final finally finalize的区别联系(详解)

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 )在回收对象之前调用该方法。不保证一定执行,也不保证会执行完毕。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值