java孙鑫 第二课 Java 面向对象编程

本文深入讲解了Java中的原码、反码和补码的概念及计算方法,介绍了二进制运算符和移位运算符的使用。此外,还详细解释了构造方法、方法重载、关键字static和final的用法,并探讨了类的继承与多态性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原码,反码和补码:

       原码:最高位为0表示正数,为1表示负数。例:-7表示为:10000111

       反码:如果一个数为正,那么它的原码与反码相同。如果为负,符号位为1,其余各位取反即可。

       补码:如果一个数为正,则原码,反码,补码相同。如果为负,则符号位为1,然后其余位对原码取反,然后整个数加1. 也就是对该数的反码加1 即可。但是一个字节只有8位,超过8位就进1,但是内存这时就溢出了,也就是新进位的1被丢弃。

       Eg-0原码:10000000  -0补码:11111111  所以-0的补码为11111111+1=1 00000000

           但是进位1被丢弃,所以结果为00000000.

 

二进制运算符:(这些运算符是针对二进制才使用的)

       按位与 &

       按位或 |

       按位异或 ^  两二进制不同时就为1,都为一或都为0时结果为0

       按位取反 ~  它是一元运算符,0110

 

移位运算符:

       Java中提供了3中移位运算符:

       左移       <<

       带符号右移    >>

       无符号右移  >>>

 

构造方法:

       如果你没有给定义的类定义构造函数,java会自动添加一个默认的构造函数,并且这时构造函数要对成员变量赋一个初始值。例如:

数值型就赋值为0

布尔型就赋值为flase

Char型就赋值为’/0’

对象就赋值为null

       定义了一个类之后必须要通过new关键字生成一个类对象才能使用。

New关键字作用:

              1 为对象分配内存空间

              2 引起对象构造方法的调用

              3 为对象返回一个引用

方法重载overload:

       构造函数可以有个无参数的,也可以再加一个有参数的构造函数,两个构造函数都能使用。这种叫方法重载:方法的名称相同,但是参数类型不同或者参数的个数不同。

看看下面这个输出结果是多少呢:

class Point110

{

       int x,y;

       Point110(int a,int b)

       {

              x=a;

              y=b;

              }

 

       void output()

       {

              System.out.println(x);

              System.out.println(y);

       }

       void output(int x,int y)

       {

              x=x;

              y=y;

              }

       public static void  main(String[] arg)

       {

              Point110 pt;

              pt=new Point110(23,56);

              pt.output(4,4);

              pt.output();

       }

}

结果为23 56哦。

因为在void output(int x,int y)中,成员xy变量被此出方法内的参数xy所覆盖了,相当于:4=44=4。如果你想在这里对成员变量进行赋值怎么办呢???可以将此方法参数该为不同于xy的变量名就可以了。还有中方法就是使用this关键字:

       void output(int x,int y)

       {

              this.x=x;

              this.y=y;

              }

这时输出的结果就为4 4 了哈。其实这里的this就是指Point110,但是把this直接换成Point110就不行哦。

关键字static

       1 用了此关键字,则静态变量和静态方法属于类,而不是类的某个实例了。

       2 静态方法和静态变量可以直接通过类名访问

       3 在静态方法中不能调用非静态的方法和引用非静态的成员变量,反之则可以

       4 可以用类的对象调用静态方法

Final关键字:

       她是用于声明常量用的,即是在程序运行过程中常量的值是不能被改变的,因此一般情况下都建议在定义常量时就给她赋好值,例如:final double PI = 3.1415926.但是常量定义时也可以不用先赋值,但是在程序运行中又不能对常量进行赋值或其他更改操作,怎么办呢。常量是可以在构造函数中赋值的,知道怎么办了吧

class Point110

{

       int x,y;

       final double PI;

       Point110(int a,int b)

       {

              PI = 3.1415926;

              x=a;

              y=b;

              }

              Point110()

       {

              //PI = 3.1415927;  注意这里的注释哦,如果要想她起作用的话必须放在this(7,8);

              this(7,8);     //之后哦,因为构造函数中这种this调用必须放在构造函数的第一行

              }

 

       void output()

       {

              System.out.println(x);

              System.out.println(y);

              System.out.println(PI);

       }

       void output(int x,int y)

       {

              this.x=x;

              this.y=y;

              }

       public static void  main(String[] arg)

       {

              Point110 pt=new Point110();

              pt.output();

       }

}

常量定义一般约定大写,为了节约内存,一般也把常量定义为static,常量可以在定义时赋值也可以在构造函数中赋值。

 

extends关键字 类的继承(面向对象之一)

       但是java中不允许多继承,当继承时如果子类需要更改父类某些方法的功能时,子类可以重写父类方法,但是方法名,参数类型,返回类型,和参数个数都要相同才行哦。

之前我们说的方法重载是同一个类中,这里的方法重写是发生在父类和子类之间的。当子类覆盖了父类方法,子类要是又想调用父类的那个方法该怎么调用呢,用super关键字就可以了。

       同样,如果子类定义了与父类相同的变量,那么父类的变量也自然就被隐藏了,如果要访问父类的变量同样使用super就可以了。

       每个子类构造函数第一条语句都隐含调用super(),如果父类没有这种形式的构造函数,编译时就会报错。因此父类必须要显式地申明相应的构造函数,如果父类只有带参数的构造函数,那么在子类也就要使用super(参数)这种形式来调用。

       之所以这么使用是因为构造函数是不能被子类继承的,所以子类必须得使用super调用父类构造函数,而父类也因此必须得有相应构造函数才行。

class animal

{

       int height,weight;

       animal(int height,int weight)

       {

              System.outprintln("animal construct");

              }

              void eat()

              {

                     System.outprintln("animal eat");

                     }

                     void breathe()

                     {

                            System.outprintln("animal breathe");

                            }

}

class fish extends animal

{

       int height;

       fish()

       {

              super(6,7);

              System.outprintln("fish construct");

       }

       }

 

多态:

       在有子类和父类情况下,通过覆盖父类的方法实现。在运行时,如果传递的是父类引用就使用父类的方法,如果传递的是子类的引用,就使用子类的方法。如果传递的是子类引用,其实程序就是现在子类找相匹配的方法,如果子类没有相匹配的方法就再在父类中查找,这就是多态。

Instanceof操作符:判断一个实例是否是某个对象的实例。

       Fish fs = new Fish();

       if fs instanceof fish

{

       System.out.printlin(“yes”);

}

Animal an = new Animal();

Fs instanceof Animal结果为真哦  但是an instanceof Fish结果就为假了哈

如果:an = fs,然后an instanceof Fish 结果还是为真

 

一个用面向对象思想计算长方形周长和面积的程序:

class Rectangle

{

       int w,h;

       void area()

       {

              System.out.println("area= "+w*h);

              }

       void perimeter()

       {

              System.out.println("perimeter= "+2*(w+h));

              }

              public static void main(String []arg)

              {

                     Rectangle rec = new Rectangle();

                     rec.w=2;

                     rec.h=7;

                     rec.area();

                     rec.perimeter();

                     }

       }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值