final finally finalize的区别及作用
首先 先来阐述一下每一个的作用
final
final的翻译意思就是决定性的,不可改变的
final 修饰符的一种 修饰的类 不能被继承
修饰方法 不能被重写
修饰变量(基本类型) 不能被重新赋值 当变量为引用类型时 只能说明引用地址不可变.
这里涉及到引用类型和基本类型
那么 简单说一下什么是引用类型 什么是基本类型?
基本数据类型很好理解我前面也已经说到了 就是八种基本数据类型
这就简单了 剩下的数据类型都是引用类型 主要包含什么呢?
主要包含:类 接口类型 数组类型 枚举类型 注解类型
关于基本类型和引用类型下期进行详解 这里就简单说一下
言归正传
现在是不是理解了final是干什么用的了
finally
首先 从翻译的意思来看 是最终 最后
接下来我们再来分析一下finally
大家可以想一下finally是在哪里使用的?是不是在处理异常时使用
没错 try catch finally是异常捕获处理的整体流程,finally就是不管有没有异常
也就是无论捕获到还是没有捕获到异常,都要被执行的部分.
至于还能不能用在其他地方 我还真没遇到过 不知道有没有其他地方会使用
下面说一下finally也是有不被执行的情况出现的
第一种情况:
程序在进入finally之前挂掉了
做个示例:
public static void MyException(){
try {
System.out.println("try");
System.exit(0);
return;
}catch (Exception e){
e.printStackTrace();
System.out.println("catch");
}finally {
System.out.println("finally");
}
}
上面是我定义的一个静态方法
当程序走到**System.exit(0);**时 程序退出 程序都挂掉了 finally里面的还怎么走啊!
第二种情况:
程序没有进入异常捕获流程
什么意思呢?就是压根就没执行到异常捕获 程序就挂了
第三种情况:
try中死循环或者cache中死循环
public static void MyException(){
try {
System.out.println("try");
for (int i=1;i>0;i++){
System.out.println(i);
}
}catch (Exception e){
e.printStackTrace();
System.out.println("catch");
}finally {
System.out.println("finally");
}
}
你看 try中的 for循环都不会结束 怎么可能会执行下面的finally
总结: 只有程序非正常执行时 finally部分才不会被执行.
finalize
finalize()是Object的protected方法,子类可以覆盖该方法以实现资源清理工作,GC(垃圾收集 Garbage Collection )在回收对象之前调用该方法。不保证一定执行,也不保证会执行完毕。