zoukankan      html  css  js  c++  java
  • [java基础问题] final、finally、 finalize

    1. final、finally、 finalize

      1. final 用来修饰class,variable, function的关键字。修饰class时,代表类不可被继承;修饰variable时,代表标量不可修改(引用所指向的内存地址不可修改); 修饰function时,该方法不可重写(override);
      2. finally java中使用在try-finally 或者 try-catch-finally中,用来确保finally块内的代码一定会被执行,常用来关闭资源等;
      3. finalize 基础类 java.lang.Object 的一个方法,设计目的是保证对象在被垃圾收集前完成特定资源的回收。jdk9中被标记为deprecated(已丢弃)
    2. 知识扩展

      1. 使用final生命的变量只是当前引用地址不可变,如申明的是基本数据类型,则值不变。申明的是非基本数据类型时,对象的引用不可变,成员变量,等信息可以改变;
      2. finally确保总是执行,但是在异常退出时会不执行,例如:
      try {
          // do something
          System.exit(1);
      } finally {
          System.out.println("This is finally");
      }
      
      1. try-catch-finally中使用return的情况:
        1. 在执行第一个return之前没有抛出异常(包括在catch中存在return),则在执行return的前先执行finally后再执行return,此时在finally中无法改变return返回的值(引用的内存地址不可变);
        2. 如果在finally中使用return,会强制执行finally的return,在执行return之前catch的异常信息将会丢失,并且无法对异常进行处理try-catch中的return值会丢失;
      2. 建议使用try-with-resources机制来进行资源回收;
      3. finalize (已丢弃),原因是不发保证执行顺序与时间,并且实现了finallize的对象会被垃圾回收机制特殊处理,影响垃圾回收机制效率,甚至堆积一定程度后出现OOM;
  • 相关阅读:
    远程连接mysql root账号报错:2003-can't connect to MYSQL serve
    php定位并且获取天气信息
    PHP Ajax 跨域问题最佳解决方案
    AngularJS 过滤器
    AngularJS自定义指令及指令配置项
    php获取微信的openid
    SVN服务器
    redis的LRU策略理解
    golang入门案例之http client请求
    golang入门案例之SOCKET
  • 原文地址:https://www.cnblogs.com/xiong233/p/10944568.html
Copyright © 2011-2022 走看看