感觉这三者除了长得像也没啥可作为比较的,但是面试题中经常会出现这三者的比较,就简单总结一下。

1.final

  final 可以用来修饰类、方法和变量,修饰类的时候表示类是不可以被继承的,修饰方法的时候表示方法不可以被重写,修饰变量的时候表示变量不可以被更改

  一般情况下,我们把方法或者类声明成final的时候就是为了告诉人们,这些行为不可以被更改,这在某种程度上也能够保证平台的安全性。能够有效的避免API的使用者修改一些特定的值。

  下面的一段代码中,final 只能约束 strList 这个引用不可以被赋值,但是这个对象的行为却不会受到影响。

 final List<String> strList = new ArrayList<>();
strList.add("Hello");
strList.add("world");
List<String> unmodifiableStrList = List.of("hello", "world");
unmodifiableStrList.add("again");

  上面两行代码运行不会报错,运行结果为:

  但是List.of()方法创建的是不可变的list,所以在add的时候会抛出异常。

  2.finally

  finally是java中为了保证重点代码一定被执行的一种机制。一般情况下,我们会使用try-fianlly,try-catch-finally来关闭流,关闭连接等操作。

  几个fianlly中的代码不会被执行的特殊情况:

1. try-catch 异常退出。
try{
system.exit(1)
}finally{
System.out.println(123);
} 2. 无限循环
try{
while(ture){
System.out.println(123);
}
}finally{
System.out.println(456);
} 3. 线程被杀死
当执行 try,finally 的线程被杀死时。finally 也无法执行。

  fianlly在使用的过程中需要注意的就是:

    1.不要在 finally 中使用 return 语句。
    2.finally 总是执行,除非程序或者线程被中断

  3.finalize 

  finalize 是基础类 java.lang.Object中的一个方法,用来回收资源,目的是为了保证对象在被垃圾回收之前完成特定资源的回收。但是在jdk9已经被标记deprecated了。也就是是说,这个方法并不推荐使用。之所以被废弃掉的原因在于不可控性,你无法控制finailize什么时候被执行,执行完成之后是否符合你的期望值。使用不当的话还有可能造成程序死锁,挂起等。

  finalize被设计成在资源回收集之前调用,这也就是意味着对象如果实现了这个方法,jvm就需要对他做额外的处理。这样看来finalize本质上成为了快速回收的阻碍者,很可能会导致你的对象会经过好几个垃圾回收集才能被回收,而垃圾回收集的时间不可预测,这样会导致大量的资源被占用,消耗掉许多高频的资源。

  那么与其使用finalize会导致系统性能下降,不如在资源使用完成之后显性释放掉或者利用资源池来进行复用

final、finally、 finalize 有什么不同的更多相关文章

  1. 软件工程第三周的学习报告 html<input> final finally finalize 的比较 BigInteger

    三月十三号下午: html的<input>的三个属性pattern(限定用户的输入格式)与placeholder(显示的)与required(不能为空) 代码案例: pattern与pla ...

  2. final,finally,finalize有什么区别?String, StringBuffer, StringBuilder有什么区别?Exception和Error有什么区别?

    继上篇JVM学习之后,后面将分三期深入介绍剩余JAVA基础面试题,每期3题. 题目一.final,finally,finalize有什么区别? /*请尊重作者劳动成果,转载请标明原文链接:*/ /* ...

  3. Android源码中final关键字的用法及final,finally,finalize的区别

    Android开发的学习流程 final,finally,finalize的区别 Android的发展越来越快,Android开发人员越来越多,当两种情况碰撞,在诸多开发者中跟紧Android步伐脱颖 ...

  4. 【Java面试题系列】:Java中final finally finalize的区别

    本篇为[Java面试题系列]第三篇,文中如有错误,欢迎指正. 第一篇链接:[Java面试题系列]:Java基础知识常见面试题汇总 第一篇 第二篇链接:[Java面试题系列]:Java基础知识常见面试题 ...

  5. 一、基础篇--1.1Java基础-final, finally, finalize 的区别

    final, finally, finalize 首先,这三个关键字没什么关联,只是放在一起比较像,用法用处完全不同. final: final关键字可以用来修饰类.方法.变量(成员变量和局部变量), ...

  6. Reader和Writer区别final.finally.finalize区别

    Reader和Writer是字符操作流,Writer是输出的,而Reader是输入的. 首先找到一个文件,比如:File file=new File("."+File.separa ...

  7. final finally finalize 区别

    public class Demo { public static void main(String[] args) { long start = System.currentTimeMillis() ...

  8. final finally finalize

    final  //如果不是final 的话,我可以在checkInt方法内部把i的值改变(有意或无意的,       //虽然不会改变实际调用处的值),特别是无意的,可能会引用一些难以发现的BUG   ...

  9. [CareerCup] 14.3 Final Finally Finalize 关键字比较

    14.3 What is the difference between final, finally, and finalize? 这道题考察我们Java中的三个看起来很相似的关键字final,fin ...

  10. Java Final, Finally, Finalize

    Final is a Keyword, final can be used in three different ways: final variable final method final cla ...

随机推荐

  1. JS--我发现,原来你是这样的JS(引用类型不简单[下篇],基本包装类型与个体内置对象)

    一.介绍 本篇是续上一篇的,引用类型的下篇,本篇主要是说基本包装类型和个体内置对象.如果你能收获一些知识,那我很高兴,很满足,哈哈哈,希望大家能愉快看完.如果你想学好一门技术,要不忘初心,方得始终. ...

  2. Django. No changes detected when "makemigrations"

    在修改了models.py后,有些用户会喜欢用python manage.py makemigrations生成对应的py代码. 但有时执行python manage.py makemigration ...

  3. 准备开发一个运行在Android上的JavaME模拟器

    在一个虚拟机A上运行另外一个虚拟机B看起来是挺不靠谱的一件事,在手机上运行某个虚拟机也不怎么靠谱.并且如果虚拟机A运行在手机上这个听起来就更不靠谱了.但是很多人就在做这样的事.比如在在手机上运行DOS ...

  4. openCV 视频分解及合成

    1. 视频分解 import cv2 # ************************** # 分解视频 cap=cv2.VideoCapture('1.mp4')#获取一个视频cap isOpe ...

  5. [Linux]《鸟哥的私房菜》笔记 (缓慢更新)

    暂时不更新了..这几天一看起书来发现内容很多,这样写blog太慢,也没意义.所以现在是每天看书,在笔记本上记笔记,再配合着<操作系统>和 linux内核 加深理解.往后会以心得体会为主写一 ...

  6. CentOS6.8系统安装Node

    环境:CentOS6.8_X64系统 一.到官方下载最新的编译好的安装文件,目前是6.9.4. $>cd /usr/local/src #定位到这个目录,下载的文件会在这个目录#使用wget下载 ...

  7. Sofware-Engineering Zero

    第一部分:结缘计算机 与大部分同学一样,也是刚刚进入大学才接触编程,在第一堂C语言课上敲下了第一行属于自己的代码""Hello World",然后在摸索中开始自己的Cod ...

  8. Windows安装PostgreSQL数据库 无法初始化数据库问题

    背景 由于项目的需要,使用PostgreSQL数据库,因此在Windows上安装PostgreSQL数据库.但是在安装后,无法访问本地数据库,这个时候查看/data目录,没有任何文件.而且安装过程中, ...

  9. Python3 sqlacodegen 根据已有数据库生成 ORM 使用的 model.py

    pip install sqlacodegen pip install pymysql sqlacodegen mysql+pymysql://username:password@127.0.0.1: ...

  10. windows系统相关命令及问题排查实践

    1. 如何查看哪个端口被哪个程序占用? Netstat –ano|findstr "80" ->找到监听80端口的pid tasklist|findstr “<PID号 ...