final、finally、 finalize 有什么不同
感觉这三者除了长得像也没啥可作为比较的,但是面试题中经常会出现这三者的比较,就简单总结一下。
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 有什么不同的更多相关文章
- 软件工程第三周的学习报告 html<input> final finally finalize 的比较 BigInteger
三月十三号下午: html的<input>的三个属性pattern(限定用户的输入格式)与placeholder(显示的)与required(不能为空) 代码案例: pattern与pla ...
- final,finally,finalize有什么区别?String, StringBuffer, StringBuilder有什么区别?Exception和Error有什么区别?
继上篇JVM学习之后,后面将分三期深入介绍剩余JAVA基础面试题,每期3题. 题目一.final,finally,finalize有什么区别? /*请尊重作者劳动成果,转载请标明原文链接:*/ /* ...
- Android源码中final关键字的用法及final,finally,finalize的区别
Android开发的学习流程 final,finally,finalize的区别 Android的发展越来越快,Android开发人员越来越多,当两种情况碰撞,在诸多开发者中跟紧Android步伐脱颖 ...
- 【Java面试题系列】:Java中final finally finalize的区别
本篇为[Java面试题系列]第三篇,文中如有错误,欢迎指正. 第一篇链接:[Java面试题系列]:Java基础知识常见面试题汇总 第一篇 第二篇链接:[Java面试题系列]:Java基础知识常见面试题 ...
- 一、基础篇--1.1Java基础-final, finally, finalize 的区别
final, finally, finalize 首先,这三个关键字没什么关联,只是放在一起比较像,用法用处完全不同. final: final关键字可以用来修饰类.方法.变量(成员变量和局部变量), ...
- Reader和Writer区别final.finally.finalize区别
Reader和Writer是字符操作流,Writer是输出的,而Reader是输入的. 首先找到一个文件,比如:File file=new File("."+File.separa ...
- final finally finalize 区别
public class Demo { public static void main(String[] args) { long start = System.currentTimeMillis() ...
- final finally finalize
final //如果不是final 的话,我可以在checkInt方法内部把i的值改变(有意或无意的, //虽然不会改变实际调用处的值),特别是无意的,可能会引用一些难以发现的BUG ...
- [CareerCup] 14.3 Final Finally Finalize 关键字比较
14.3 What is the difference between final, finally, and finalize? 这道题考察我们Java中的三个看起来很相似的关键字final,fin ...
- Java Final, Finally, Finalize
Final is a Keyword, final can be used in three different ways: final variable final method final cla ...
随机推荐
- JS 对数组的操作集锦(基础)
下面内容是自己复习基础时候整理出来的,感谢缪雪峰老师的课程让自己可以有节奏的复习基础的东西! 以下内容颜色是重点关注,已经特别注意提醒,不是为了颜色好看噢,希望能帮到刚学习前端的朋友们,后续还会持续更 ...
- KeyPress 和KeyDown 、KeUp之间的区别
前几天,在写完一个功能模块上线测试的时候,出现了一个诡异的问题.input 框在输入查询内容之后,按回车键居然有两种不同的表现形式(input 框没有绑定键盘事件),谷歌和火狐功能正常,但IE在按了回 ...
- springboot 学习之路 18(webflux详细介绍(2))
webflux的详细介绍 引言:上一节已经简单介绍webflux的一些基本概念,本章继续学习webflux的原理和实战方面的东西: Spring WebFlux架构: note:注意理解上面这张图.下 ...
- Httprunner学习
一.简介 HttpRunner 是一款面向 HTTP(S) 协议的通用测试框架,只需编写维护一份YAML/JSON脚本,即可实现自动化测试.性能测试.线上监控.持续集成等多种测试需求. 核心特性: 继 ...
- Mongodb集群与分片 2
前面我们介绍了简单的集群配置实例.在简单实例中,虽然MongoDB auto-Sharding解决了海量存储问题,和动态扩容问题,但是离我们在真实环境下面所需要的高可靠性和高可用性还有一定的距离. 下 ...
- Keil下载时出现program fail错误的一个原因
在使用Keil给STM32单片机编程的时候有时会出现Programing Failed!对于这样的错误网上有很多的教程,错误的原因也有很多,比如是单片机上锁,环境配置错误的原因导致.这里我将提供一种错 ...
- 转:C#常用的集合类型(ArrayList类、Stack类、Queue类、Hashtable类、Sort)
C#常用的集合类型(ArrayList类.Stack类.Queue类.Hashtable类.Sort) .ArrayList类 ArrayList类主要用于对一个数组中的元素进行各种处理.在Array ...
- oracl数据库中的substr()函数的用法
substr:字符串截取. 1.substr:(字符串 | 列 ,开始点):从开始一直截取到结尾. select substr(zym,2) from bqh4 2.substr:(字符串 | 列 , ...
- Python学习--打码平台
打码平台介绍 作用:可以通过第三方平台进行智能识别或者人工识别图片. 优点:1. 价格便宜: 2. 使用简单: 3. 识别率高 平台介绍: - 云打码(推荐) [http://www.yundama. ...
- ES6+转ES5
npm init //创建package.json文件 下载转换babel库及其100+依赖 npm install babel-cli -D npm install babel-preset-env ...