java final 回收_Java 初始化、final、清理

1 为什么需要无参构造器?

第一个是继承需要 super 调用父类的构造器(父类构造器必须存在且不为 private。可以是无参/默认构造器,也可以是有参构造器),特别的如果父类不包含无参构造器的话,子类继承须显示调用 super(param) 这样的方法进行初始化,如下示例;如果是无参构造器,子类继承后会在其每个构造器(包括有参/无参)内部自动调用 super() 方法。第二个是有些框架在生成对象时,默认调用无参构造器去生成对象。第三个是反射。

class SmallBrain {

// SmallBrain() {

// System.out.println(333);

// }

SmallBrain(int i) {

System.out.println(222);

}

}

class Dinosaur extends SmallBrain{

int i = 7;

static int j = 1;

Dinosaur(int i) {

super(i);

}

}

2 对数组/实例变量应用 final

static final 编译器常量,占据一段不你改变的存储空间,根据惯例使用大写字符表示。对于基础数据类型,他们是数值不可变的常量,对于引用/数组,表示一旦被初始化指向一个对象,就无法把它改为指向另一个对象

private static final int VALUE_TWO = 99;

3 禁止方法重写(单个方法 private final/ 所有方法 类 final)

所有 private 方法隐式制指定为 final,无法对其覆盖(重写)。这个问题可能会造成混淆,因为你试图覆盖一个 private 方法似乎是可行的,但是实际意义是添加一个新的同名方法(而不是重写)。

class WithFinals {

private final void f() { print("withfinals f"); }

private void g() { print("withfinals g"); }

}

class OverridingPrivate extends WithFinals {

private final void f() {

print("overridingprivate f");

}

}

可以给 class 加上 final 关键字(比如 String 类),禁止该类被继承,类中的所有方法都隐式指定为 final,成员变量/静态变量 不受影响(不是 final)。

class SmallBrain {

}

final class Dinosaur {

int i = 7;

static int j = 1;

SmallBrain x = new SmallBrain();

void f() {

}

}

class Hyrsaauc {

public static void main(String[] args) {

Dinosaur n = new Dinosaur();

n.f();

n.i++;

Dinosaur.j = 40;

}

}

4 继承与初始化过程

基类加载 —> 导出类加载 —> 执行导出类代码 ? 如果执行了创建实例方法 —> 基类成员变量初始化 —> 基类构造器初始化 —> 导出类成员变量初始化 —> 导出类构造器初始化

5 垃圾回收与清理动作

① 在垃圾回收时前调用

一旦垃圾回收器准备释放对象占用的存储空间,将首先调用其 finalize() 方法,并且在下一次垃圾回收动作发生时,才会真正回收对象占用的内存。因此可以重载它以便在垃圾回收时做一些重要的清理动作。

记住一点,在 Java 中对象并非总是被垃圾回收。因此无法确保 finalize 一定被调用。

② 由于本地方法分配存储空间,可能需要使用 finalize 中使用相应的本地方法明确地释放。

③ 检测是否该对象进行了垃圾回收(强行调用System.gc()只是建议jvm进行垃圾回收,但是是否马上进行垃圾回收jvm说了算。1.当触发了垃圾回收机制,才进行垃圾回收,例如新生代或者年老代内存空间不够;仍然存活的对象不会被回收,例如被引用)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值