java面向对象简要总结 三.md

java面向对象简要总结 三.md

tk_sky 179 2022-09-03

一、引用类型

针对java的对象,我们操作的标识符实际上是“引用”,通过引用指向一个对象的地址,类似于C中的指针。我们通过标识符来对对象进行操作。

四种引用类型

java针对不同的引用类型有不同的垃圾回收方式。

1、强引用

java默认的声明方式就是强引用。只要引用还指向某个对象,该对象就不会被回收。

Object obj = new Object();//强引用
//如果需要让Object可以被回收,只需要:
obj = null;

手动将引用设置为“null”可以使对象能被回收。

2、软引用

java的软引用可以将对象设为可被清理状态,当JVM内存不足时,系统将会清理被标识为软引用的对象。

SoftReference<Object> ref = new SoftReference<>(obj);

可用ref.get()来获取引用指向的对象。

3、弱引用

设置弱引用,只要JVM进行垃圾回收,则弱引用指向的对象无论内存剩余情况如何,都会被系统清理。

WeakReference<Object> ref = new WeakReference<>(obj);

4、虚引用

虚引用是最弱的一种引用,即使有弱引用指向,没有其他引用指向的对象仍然会被回收。

PhantomReference<Object> ref = new PhantomReference<>(obj);

instanceof 运算符

instanceof是java保留字,用于测试它左边的对象书否是它右边类的实例。返回值是逻辑型。

String s = "String类是Object的子类";
boolean isObject = s instanceof Object;
//返回值是true

二、组合

组合是一种实现程序复用的手段,但不借助继承。相比继承,使用组合的方法进行代码复用能够保证更好的封装性。组合思想将要被复用的父类当做新类(子类)的组成部分,由新类直接调用父类的方法。

例子:

class father{
    public void do(){
        System.out.println("do sth..");
    }
}

class child{
    private father f;
    public child(father a){
        f = a; //将父类的对象引入
    }
    public void do(){
        //重新定义一个do方法
        f.do() //直接调用父类的方法
    }
}

在上述例子中,新建child对象时需要传递一个father对象。

father f1 = new father();
child c1 = new child(f1);

三、初始化块

初始化与构造器类似,都在类中定义用于对对象进行初始化操作。

初始化块分为静态初始化块和非静态初始化块两种:

  • 静态初始化块:

    在初始化块之前加上static修饰符,只会在类装载到系统时执行一次。

  • 非静态初始化块:

    不加任何修饰符,在该类的每个对象生成时都会执行一次,且执行顺序在构造方法之前。

初始化块语法格式:

class test{
    [修饰符] {
    dosth();
	}
}

初始化块没有命名,只有{ }

可以定义多个初始化块,运行顺序仅依据定义的先后。

四、包装类

java是面向对象的语言,但其包含的8种基本数据类型并不是标准的对象,不支持面向对象的编程机制。如果需要将基本数据类型转换为对应的按类编写的引用类型,从而可以像对象一样对其进行操作。

int i = 1;
Integer itObj = new Integer(i);
int i2 = itObj.intValue(); //取出int变量