美文网首页
经典面试题目

经典面试题目

作者: 冰与河豚鱼 | 来源:发表于2018-10-19 12:31 被阅读0次
    谈谈final,finally,finalize有什么不同?

    final可以用来修饰类、方法、变量。final修饰的class代表不可以继承扩;final的变量是不可以修改的,而final的方法是不可以被重写的。
    finally是Java保证重点代码一定要被执行的机制。可以使用try-finally、try-catch-finally或try-with-resource来进行类似关闭JDBC连接、保证unlock锁、清理资源等操作。
    finalize是基础类java.lang.Object的一个方法,目的是保证对象在被垃圾收集前完成特定资源的回收。

    注意点:
    try{
      // do something
      System.exit(1);
    }finally{
      System.out.println("finally");
    }
    

    上面代码中的finally块不会被执行,因为System.exit(1)指非正常退出程序,结束当前正在运行的JVM。

    finalize的执行是和垃圾收集关联在一起的,一旦实现了非空的finalize方法,就会导致相应对象回收呈现数量级上的变慢。finalize无法保证垃圾什么时候执行,执行的是否符合预期,使用不当会影响性能,导致程序死锁,挂起。

    不要在finally代码块中处理返回值
    不要再try代码块中调用return、break或continue语句

    final与immutable:
    final List<String> str = new ArrayList<>();
    str.add("hello");
    str.add("world");
    List<String> unmodifuableStr = List.of("hello","world");
    unmodifuableStr.add("again");
    

    上面代码中final只能约束str这个引用不可以被赋值,但是str对象行为不被final影响,添加元素等操作是完全正常的。如果希望本身是不可变的,那么需要相应的类支持不可变的行为。而List.of方法创建的本身就是不可变List,最后的add方法会抛出异常。

    相关文章

      网友评论

          本文标题:经典面试题目

          本文链接:https://www.haomeiwen.com/subject/mijyzftx.html