Java面向对象(二)

1.自动装箱指把一个基本类型变量赋值给一个包装类或者object类对象,自动拆箱指把一个包装类对象直接赋值给一个基本类型变量。装箱和拆箱的过程都是拆或装成对应类型的基本类型或引用类型变量。

2.包装类引用变量与基本类型变量进行==操作时因为自动拆箱或装箱的行为,可以直接以值比较;但若两个都是经自动装箱成的Integer类型,如果值在-128到127之间,==操作结果为真,如果不在此范围内,与引用类型变量执行==操作结果相同,即假。

3.基本类型变量转换成String类型变量:通过String.valueOf() 或 +"";String类型变量转换成基本类型变量(除char):通过包装类.parseXxx()方法或者包装类的构造器。

4.final修饰的成员变量一旦有初始值就不可改变;可以指定初始值的地方有静态初始化块或声明类成员的地方,费静态初始化块、声明实例成员或构造器中的地方;规定必须指定初始值(不然默认初始化时没有意义的)。

5final修饰的局部变量包括形参,一旦有初始值就不可改变,且必须显式初始化(局部变量之前的规定)。final修饰的方法不可被重写。final修饰的类不可扩展。

6.不可变类指创建该类的实例后实例成员变量不可变。不用final修饰但要满足如下规则:使用private和final修饰该类的成员变量;提供带参构造器初始化成员变量;仅为成员变量提供getter方法。但要注意引用类型变量虽然引用不能改变,引用里的值是可以改的。不可变类引出了缓存多个实例对象的思想,Integer也是缓存了-128到127的实例。

7.含有抽象方法的类(包括直接定义了一个抽象方法;继承了一个抽象父类,但没有完全实现父类包含的抽象方法,以及实现了一个接口但没有完全实现接口包含的出现方法3种情况)只能被定义成抽象类。

8.接口只能包含成员变量(自动使用public static final修饰)、抽象实例方法(自动使用public abstract修饰)和内部类(public static修饰)。在类中实现接口方法时也必须设置成public权限(子类权限不能小于父类原则)。

9.接口与抽象类相同点:不能被实例化以及都可以包含抽象方法。不同点:接口里只能包含抽象方法,而抽象类里可以包含普通方法;接口里不能定义静态方法而抽象类可以;接口里只能定义静态常量而抽象类既可以定义普通常量也可以定义静态常量;接口里不包含构造器而抽象类可以;接口里不包含初始化块而抽象类可以;一个类最多只能有一个直接父类但可以实现多个接口。

10.通知系统垃圾回收使用System.gc()方法或Runtime.getRuntime().gc()方法,但是系统不一定立马进行。系统垃圾回收之前总会先调用对象的finalize()方法,这可能会让对象重新复活,导致垃圾回收取消。

11.对象引用有强引用、软引用、弱引用和虚引用四中方式,软引用通过SoftReference类实现,SoftReference sr = new SoftReference(new String("asd"));可以通过sr.get(0方法获得引用对象,当一个对象只有软引用时,内存空间够就不会被回收,不够就可能会被回收;弱引用由WeakReference类实现,语法同上,但垃圾回收机制运行时会立即被回收;徐引用通过PhantomReference类实现,但不能通过虚引用获得引用对象且必须和引用队列一起使用。


你可能感兴趣的:(Java知识点)