Java 第六章

6.1增强的包装类

1,Java中的8中基本数据类型是不支持面向对象的,所有基本数据类型的不能当成Object类变量使用,所以Java提供包装类概念(Wrapper Class),把基本数据类型转化成包装类变量。

基本数据类型 包装类
byte     Byte
short Short
int  Integer
long Long
char Character
float Float
double Double
boolean Boolean

2,自动拆箱和自动装箱:自动拆箱就是把基本数据类型赋值为对应的包装类变量,或者赋值给Object类变量;自动拆箱则相反,就是把包装类变量转化为对应的基本数据类型。注意:只能是int自动装箱为Integer,不能是Boolean类,只能是对应的转换。

6.2处理对象

1,打印对象和toString()方法

toString()方法是Object类的实例方法,所有的类都是Object类的子类,那么所有的方法都有toString()方法。toString()方法是一个”自我描述”方法,就是会把对象的“自我描述”信息告诉给外界,但是Object类的toString()方法总是返回“类名+@+hashcode”,所以要实现自我描述,就的重写toString()方法。

2,==和equals方法

==用于比较两个基本数据类型是否相等(不一定是同一种基本数据类型,只要是值相等就返回true),也可比较两个引用数据类型,当是引用数据类型时,必须是同一个对象才会返回true;equals方法比较引用数据类型,Object类提供的equals方法就是比较两个对象的地址,所以与==没什么区别,所以一般那情况下,用equals方法都需要重写(override)方法。

语法为:String str1=new String();String str2=new String();  System.out.println(str1.equals(str2));//true

6.3类成员

1,类成员:类的成员有5种:成员变量,方法,构造器,初始化块,内部类。其中构造器不能用static修饰,其余均可以用static修饰,用static修饰的类成员属于整个类,不属于对象实例,所以叫做类成员。

2,类成员的访问:类成员的访问通过类调用,也可以通过对象调用,通过对象调用的类成员实际也是通过该类调用的;但是static修饰的类成员不能访问实例成员,因为类成员在类开始的时候就已经初始化了,但是实例还没有初始化,所以会造成错误。

3,单例类(Singleton):一个类只能创建一个实例对象,所以叫做单例类。构造单例类的时候需要一个成员变量来记录是否建立过对象。

6.4 final修饰符

final可以修饰成员变量,也可以修饰局部变量,可以修饰类,方法等,final修饰的变量一旦被赋予值,就不能重新赋值。final修饰的变量必须有程序员显示指定初始值。

1,final修饰成员变量:修饰类成员变量时,只能在静态初始化代码块或者定义该变量时赋值;修饰实例成员变量时,只能在非静态初始化代码块,定义该变量时或者构造器内给变量赋值;

2,局部变量必须由程序员显示赋值,被final修饰的局部变量,要么在非静态初始代码块,构造器或者定义时赋值,不能再别的时候赋值,一旦被赋值,不能重复赋值。

3,final修饰的基本数据类型和引用数据类型的区别:final修饰的基本数据类型只能赋值一次,不能重复赋值,final修饰的引用数据类型只能是该引用的地址不能改变,引用得对象实例内容可以改变。

4,final修饰类:该类不能被继承。

5,final修饰方法:final修饰的方法不能被重写。但是父类里面用private和final修饰的方法,在子类中重新定义一个相同方法名,参数列表,返回值类型的方法则会编译通过,因为子类中的方法不是重写,而是重新定义一个方法。

6.5 抽象类

1,抽象方法和抽象类:用abstract修饰的类和方法;抽象方法的所在的类必须是抽象的类,抽象类不能被实例化,抽象类可以哦含有成员变量,实例变量,构造器,内部类和初始化块。抽象类不能创建实例,只能用于子类的继承。static和abstract不能同时修饰一个方法。

2,抽象类的作用:由于抽象类不能创建实例,只能被子类继承,所以抽象类相当于一个模板,定义了方法被子类重写,实现。

6.6接口(interface)多个类共同的公共行为规范,通常定义一组公用方法。语法:

【修饰符】interface 接口名 extends 父接口1,父接口2...

{

    零个或者多个常量定义...

    零个或者多个抽象方法定义...

    零个或者多个默认方法或类方法定义...

    零个或者多个内部类,接口,枚举定义...

}

1,修饰符可以是public或者省略;接口名由多个英文单词组成,每个英文单词首字母大写,中间没有空格符;一个接口可以有多个直接的父接口,继承只能有一个直接父类。

2,接口里面只能定义静态常量,抽象的方法,类方法和默认方法,内部类(内部接口,枚举)。定义静态常量的时候,不管是否有修饰符,默认修饰符为public static final修饰;定义普通方法时,系统默认修饰符为public abstract修饰;默认方法都用default修饰,不能省略。

3,接口的继承,一个接口可以直接继承多个父接口,从而获得父接口的成员变量,方法等。

4,接口的实现(implements):语法为:

        【修饰符】class  类名 extends 父类 implements 接口1,接口2....

            {

                类体部分

              }

  一个类实现了一个接口,必须实现这个接口里面的所有抽象方法,否则这个类必须用abstract修饰,即为抽象类,不能实现方法。

5,接口和抽象类区别:a,接口没有构造构造器,抽象类有;

                                    b,接口没有初始化代码块,抽象类有;

                                    c,接口只能定义静态成员常量,不能定义成员变量;抽象类可以定义静态的,或非静态成员变量;

                                    d,一个类只能继承一个直接的父类,但是接口可以继承和实现多个接口;

                                    e,接口只包括类方法,抽象方法,默认方法,不能为普通方法实现,但是抽象类完全包含普通方法。

6.7内部类:定义在类里面的类就叫内部类,相当于类中的成员,有内部类的类被叫做外部类。分为非静态内部类,静态内部类,使用内部类和局部内部类,匿名内部类。静态内部类和非静态内部类都叫做成员内部类。

1,非静态内部类:只要把一个类定义在另一个类中间,当成一个成员就行。非静态内部类可以访问外部类的所有成员(除了静态的),包括静态类成员变量,但是外部类不能访问内部类的实现细节。非静态内部类不能定义静态变量,方法,和静态初始代码块。

2,静态内部类:用static修饰的内部类。里面可以定义静态的变量,也可以定义非静态变量,但是静态变量只能访问静态变量,不能访问非静态变量,

猜你喜欢

转载自blog.csdn.net/weixin_41961130/article/details/80318565