当前位置:网站首页>详解final、finally和finalize
详解final、finally和finalize
2022-06-28 09:19:00 【李王家的翠花】
一、final 关键字
1.1 修饰类
当它修饰类的时候表示该类是不能被继承的,因为抽象类就是用来被继承的,所以abstract关键字和final关键字不能共存。final类中所有的成员方法都会隐式的定义为final方法。
1.2 修饰方法
当一个方法声明为final时,该方法不允许任何子类重写这个方法,但子类仍然可以使用这个方法。
PS:重写和重载的区别:方法的重载和重写都是实现多态的方式,区别在于前者实现的是编译时的多态性,而后者实现的是运行时的多态性。
重载:
重载发生在一个类中,同名的方法如果有不同的参数列表(参数类型不同、参数个数不同或者二者都不同)则
视为重载,重载对返回类型没有特殊的要求,不能根据返回类型进行区分。
重写:
1.发生在父类与子类之间
2.方法名,参数列表,返回类型(除过子类中方法的返回类型是父类中返回类型的子类)必须相同
3.访问修饰符的限制一定要大于被重写方法的访问修饰符(public>protected>default>private)
4.重写方法一定不能抛出新的检查异常或者比被重写方法申明更加宽泛的检查型异常
1.3 修饰常量
当final修饰一个基本数据类型时,表示该基本数据类型的值一旦在初始化后便不能发生变化;如果final修饰一个引用类型时,则在对其初始化之后便不能再让其指向其他对象了,但该引用所指向的对象的内容是可以发生变化的。本质上是一回事,因为引用的值是一个地址,final要求值,即地址的值不发生变化。——引用不可变
final成员变量表示常量,只能被赋值一次,赋值后其值不再改变。final修饰一个成员变量(属性),必须要显示初始化。这里有两种初始化方式,一种是在变量声明的时候初始化;第二种方法是在声明变量的时候不赋初值,但是要在这个变量所在的类的所有的构造函数中对这个变量赋初值。
如下所示:
当a这个属性被修饰为final,而非static的时候,它属于类的实例对象的资源。当静态final同时修饰的时候,它属于类的资源。
当类被加载进内存的时候,因为是实例对象的资源,这个属性并没有被分配内存空间,而只是定义了一个变量a,只有当类被实例化的时候(创建对象)这个属性才被分配内存空间,而实例化的时候同时执行了构造函数,所以属性被初始化了,也就符合了当它被分配内存空间的时候就需要初始化。
二、finally关键字
finally作为异常处理的一部分,它只能在try/catch语句中,并且附带一个语句块表示这段语句最终一定被执行,经常被用在需要释放资源的情况下。
finally不被执行的情况:
(1)只有与finally对应的try语句块得到执行的情况下,finally语句块才会执行。
(2)try 语句块中终止了 Java 虚拟机的运行或者线程中断interrupted或终止。
public static int a() {
int a = 0;
try{
a++;
return a;
}catch (Exception e){
a++;
return a;
}finally {
a++;
return a;
}
}
以上代码输出结果为:2。
finally语句在改代码中一定会执行,不管抛不抛异常,都会先有一次a++,再在finally中有一次a++。
综上,在都有return的情况下,finally中的return为最终结果。
三、finalize()方法
参考我的另一篇文章:JVM系列(2)——垃圾回收
finalize()方法是Object类的一个方法,因为所有的类都继承自Object类,所以所有的类都有finalize方法。
真正宣告一个对象进入死亡之前,会进行两次标记:第一次是可达性分析之后,发现可以回收,会进行标记;第二次是先进行是否有必要调用finalize()方法的筛选,筛选规则:有没用重写finalize()方法。第二次执行finalize()方法,判定为没有必要调用。
若需要调用,则进行第二次标记,然后进行对象回收。
强烈不建议使用此方法,不确定性太大,无法保证对象调用顺序。
边栏推荐
- Full link service tracking implementation scheme
- This article explains in detail the difficult problems and solutions faced by 3D cameras
- From knowledge to wisdom: how far will the knowledge map go?
- Is it safe for CICC fortune to open an account? How much do you charge?
- 104. maximum depth of binary tree
- Which occupational groups are suitable for the examination
- 1182:合影效果
- 自动转换之-面试题
- 分而治之之经典Hanoi
- Postman interface test
猜你喜欢

自动转换之-面试题

Chrome devtools

Interpretation of new products: realm launched GT neo2 Dragon Ball customized version

1182: effets de la photo de groupe

Rman Backup Report Ora - 19809 Ora - 19804

RMAN backup message ora-19809 ora-19804

MATLAB小技巧(20)矩阵分析--主成分回归

new URL(“www.jjj.com“)

学习阿里如何进行数据指标体系的治理

Ingersoll Rand面板维修IR英格索兰微电脑控制器维修XE-145M
随机推荐
Is it safe for Huatai Securities to open an account online? What is the handling process
When the interviewer asks you to write binarysort in two ways
RMAN backup message ora-19809 ora-19804
High rise building fire prevention
"Jianzhi offer" -- Interview Question 4: finding two-dimensional arrays
1181:整数奇偶排序
Static page of pinyougou mall
怎样在手机上开户?现在网上开户安全么?
PMP needs to master its own learning methods
1. Kimball dimension modeling of data warehouse: what is a fact table?
从知识到智慧:知识图谱还要走多远?
Discussion on safety management of centralized maintenance construction site of substation under the mode of operation and maintenance
Campus honey decoration of APP course design (e-commerce platform)
DEJA_VU3D - Cesium功能集 之 051-地形开挖完美实现
The constructor is never executed immediately after new()!!!!!
Key points of building fire protection design
Apiccloud, together with 360 Tianyu, helps enterprises keep the "first pass" of APP security
Deployment of MySQL database in Linux Environment
Postman interface test
[big case] Xuecheng online website