1.final
final是Java中的关键字,可以修饰属性、方法、类。
1.1.属性
对属性进行修饰时,如果是基本数据类型,这个数据的值不能发生变化,如果是引用类型,如对象,他们的引用地址不能发生变化,引用地址指向对象中的内容可以发生变化。在类中使用final关键字修饰属性,必须给它们初始化赋值,如果定义时没有赋值,需要在构造函数中赋值,不然编译不通过,因为对象创建完成后它们是不可变的,引用地址也是不可变的。
class TestFinal{
//定义时直接赋值
final int a =1;
final String b="s";
final Person p=new Person() ;
TestFinal(){
}
}
class TestFinal{
//定义时没有赋值
final int a ;
final String b;
int c;
final Person p ;
//构造函数时必须赋值,不然编译报错
TestFinal(){
a=1;
b="s";
p=new Person();
}
TestFinal(int c){
//先调用无参构造函数,将没有赋值的final属性进行赋值,再操作其他属性,不然编译失败
this();
this.c = c;
}
}
1.2.方法、类
final修饰后的方法,不能被子类覆写,private修饰方法默认是final的,也是不能被覆写。
修饰的类不能被继承
2.finally
finally是异常处理try-catch-finally中的一部分,在异常处理中它被设计成一定执行的,一些必须执行的代码,放在finally中
3.finalize
finalize 是object中的一个方法,是jvm在进行垃圾处理前,调用的一个方法。它可以让我们手动的清理一些gc无法处理的存储空间,这些分配的存储空间一般都是native方法调用非Java代码如c、c++进行分配的,和Java的分配不同,gc无法自主处理。我们一般变成中,是不需要进行实现finalize方法的,实现了,也确定什么时候执行。因为Java中对象的销毁,是jvm自主控制的,当它判定我们的内存不足时,才会调用gc销毁无用的对象.如果内存足够,gc可能一直不会执行,直到我们程序运行结束,将内存直接释放给系统。
1.对象可能不被垃圾回收 :
2.垃圾回收不等于析构
3.垃圾回收至于内存有关 ,只有内存不够才会进行调用gc ,gc操作也占用内存的