您的位置:首页 > 编程语言 > Java开发

Java——面向对象(二)

2016-04-13 00:00 190 查看
摘要: 简单介绍了java面向对象的基本要素,比如final,抽象,接口,枚举等属性。

一:自动增强的包装类

自动装箱:把一个基本类型变量直接赋给对应的包装类变量,或者赋给object变量。自动拆箱则与之相反,允许直接把包装类对象直接赋给一个对应的基本类型变量。

包装类还可以实现基本类型变量和字符串之间的转换:a、利用包装类提供的parseXxx(String s)静态方法 b、利用包装类提供的Xxx(String s)构造器。将基本类型变量和“”进行连接运算,系统会自动把基本类型变量转换成字符串。无符号整数不支持负数,其最小值为0.

二:处理对象

java对象都是object类的实例。

toString()方法是object类里的一个实例方法,将所有的java类都是object类的子类,因此所有的java对象都具有toString()方法。toString()方法是一个自我描述的方法,总是返回该对象实现类的“类名+@+hashcode”值,用户使用的时候可以重写toString方法。

==和equals方法的异同:

当使用==判断两个变量是否相等时,如果两个变量是基本类型变量,且都是数值类型(不一定要求数据类型严格相等),则只要两个变量的值相等,就返回true。但是对于两个引用类型变量,只有它们指向同一个对象时,==判断才会返回true。

使用new String()创建出来的字符串是运行时创建出来的,它被保存在运行时内存区(堆内存),不会放入常量池。

自定义相等的对象使用equals方法。正确的重写equals()应该满足:自反性,对称性,传递性,一致性。

三:类成员

static关键字不能修饰构造器。static可以修饰成员变量,方法,初始化块,内部类,以static修饰的成员就是类成员。类变量既可以通过类来访问,亦可以通过类的对象来访问。

四:final修饰符

final修饰的变量不可被改变,一旦获得了初始值,该final变量的值就不能被重新赋值。

final修饰的成员变量必须由程序员显示的指定初始值。

final修饰的类变量,要么在定义该类变量时指定初始值,要么在静态初始化块中为该变量指定初始值。

final修饰的形参不能被赋值。

final修饰基本类型变量时,不能对基本类型变量重新赋值,因此基本类型变量不会改变,但是对于引用变量而言,final保存的仅仅是一个引用,final只保证这个引用类型变量所引用的地址不会变,一直引用同一个对象,但这个对象完全可以发生改变。

final修饰的方法不可被重写,但可以被重载。

final修饰的类不可以有子类。

创建不可变类:

a:使用private和final修饰符来修饰该类的成员变量。

b:提供带参数的构造器,用于根据传入参数来初始化类里的成员变量。

c:仅为该类的成员变量提供getter方法,不要为该类的成员变量提供setter 方法。

不可变类的实例在整个生命周期中永远处于初始化状态,它的实例变量不可改变。

缓存池采用“先进先出”规则来决定哪个对象将被移出缓冲池。

五:抽象类

抽象方法只有方法签名,没有方法实现。

抽象方法和抽象类使用abstract来修饰,有抽象方法的类只能被定义成抽象类,抽象类里可以没有抽象方法。抽象方法不能有方法体。抽象类不能被实例化,无法使用new关键字来调用抽象类的构造器创建抽象类的实例。抽象类的构造器不能用于创建实例,主要用于被其子类调用。abstract不能修饰构造器。static和abstract不能同时修饰某个方法,但可以同时修饰内部类。

六:接口

接口使用interface关键字。接口里不能包含普通方法,接口里所有的方法都是抽象方法。接口定义了一种规范,接口定义了某一批类所需要遵守的规范,接口不关心这些类的内部状态数据,也不关心类里方法的实现细节,它只规定这批类里必须提供某些方法,提供这些方法的类就可以满足实际需要。接口可以有多个直接父接口,但是接口只能继承接口。接口里不能包含构造器和初始化块。

接口和抽象类的区别:

a:接口只能包含抽象方法,静态方法和默认方法,抽象类可以包含普通方法。

b:接口里只能定义静态常量,不能定义普通成员变量,抽象类则可以定义两种。

c:接口里不包含构造器,抽象类里包含构造器。

d:接口里不包含初始化块,抽象类可以包括。

面向接口编程:1:简单工厂模式 2:命令模式

七:内部类

内部类提供了更好的封装。

内部类成员可以直接访问外部类的私有数据,但外部类不能访问内部类的实现细节。

匿名内部类适合用于创建那些仅需要一次使用的类。

内部类可以比外部类多使用三个修饰符:private,protected,static。

非静态内部类不能拥有静态成员。

非静态内部类对象里,保存了一个它所寄生的外部类对象的引用。如果外部类需要访问非静态成员变量,则必须显示创建非静态内部类对象来调用访问其实例成员。非静态内部类对象必须寄存在外部类对象里,而外部类对象则不必一定要有非静态内部类对象寄生其中。

如果使用static来修饰一个内部类,则这个类就属于外部类本身。静态内部类可以包含静态成员,也可以包含非静态成员。

匿名内部类必须继承一个父类,或实现一个接口,但最多只能继承一个父类,或实现一个接口。

匿名内部类不能是一个抽象类。

匿名内部类不能定义构造器。

八:枚举类

enum关键字。

枚举类可以实现一个或多个接口。非抽象的枚举类不能派生子类。枚举类的构造器只能使用private访问控制符。枚举类的所有实例必须在枚举类的第一行显示列出。枚举类的实例值只能是枚举值,不能随意通过new来创建枚举类对象。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java final 抽象 接口 枚举