黑马程序员学习日记 final/finalize/finally的区别

限时加码!20+主流AI编程工具免费用 购周边加赠Coding Plan Lite,Claude Code、Cursor等即刻畅享,学习进阶更高效! 阅读详情

------- <a href="http://www.itheima.com" target="blank">android培训</a>、<a href="http://www.itheima.com" target="blank">java培训</a>、期待与您交流! ----------

一、性质不同

(1)final为关键字;

(2)finalize()为方法;

(3)finally为为区块标志,用于try语句中;

二、作用

(1)final为用于标识常量的关键字,final标识的关键字存储在常量池中(在这里final常量的具体用法将在下面进行介绍);

(2)finalize()方法在Object中进行了定义,用于在对象“消失”时,由JVM进行调用用于对对象进行垃圾回收,类似于C++中的析构函数;用户自定义时,用于释放对象占用的资源(比如进行I/0操作);

(3)finally{}用于标识代码块,与try{}进行配合,不论try中的代码执行完或没有执行完(这里指有异常),该代码块之中的程序必定会进行;

三、final详解

1定义变量

1.1  final定义基本类型变量时,要求变量初始化必须在声明时或者构造函数中,不能用于其它地方。该关键字定义的常量,除了初始化阶段,不能更改常量的值。

1.2  final定义对象的引用,该引用的初始化与定义常量时的要求一致;该关键字定义的对象内容可以改变,但是引用指向的地址不能改变;

2定义参数

如果传入该参数定义的变量时,方法不能对该参数内容进行修改(错误),与定义变量的修改规则相同;java方法中传递基本类型时是传值的,java方法对于对象的传递是传参的;<归根结底,java中方法的传递是依靠传递“副本”:对于基本类型,首先建立一个Copy,并将传入的值赋值给Copy,然后对Copy进行操作;对于对象类型,首先建立一个引用Copy,并将传入的对象引用赋值给Copy>

比如:method(final int test);

有些书上说,这里final定义参数,尤其是对象的参数很有作用,不能在方法内对于对象的内容进行改变,这样的说法是错误的!原来我也认为这样有些函数式编程的特点,不能对于对象的内容进行修改该,这里依旧可以对对象的内容进行修改。

??定义该参数有什么用??

String天生就是final类型的!

3定义方法

(1)使用final关键字定义的方法,不能被子类继承;

(2)允许编译器将所有对此方法的调用转化为inline(行内)行为,即可以将此方法直接复制在调用处,而不是进行例行的方法调用(保存断点、压栈),这样会使程序的效率升高。但是---------如果过多的话,这样会造成代码膨胀,反而会影响效率,所以该方法要慎用。。

4定义类

一个任何final类无法被任何人继承,这也就意味着此类在一个继承树中是一个叶子类,并且此类被认为是很完美的,不需要进行任何修改(总之是不推荐使用)

 

finally语句与return语句详解 文章目录1.return语句执行顺序1.1finally语句是在return语句执行之后,return语句返回之前执行的2.覆盖问题2.1finally块中的return语句会覆盖try块的return返回2.2如果finally语句没有return语句覆盖返回,那么原来的返回可能因为finally里的修改而改变也有可能不变3.异常情况3.1try块中的return语句在异常的情况下不会被执行3.2try中发生异常时,return写在catch语句中4.finally语句一定会被执行吗? 1.retur 阅读详情

相关推荐

Finalize详解

finalize()方法详解,前言,finalize()是Object的protected方法,子类可以覆盖该方法以实现资源清理工作,GC在回收对象之前调用该方法。 finalize的作用f (1)finalize()与C++中的析构函数不是对应的。C++中的析构函数调用的时机是确定的(对象离开作用域或delete掉),但Java中的finalize的调用具有不确定性 (2)不建议用finalize方法完成“非内存资源”的清理工作,但建议用于:① 清理本地对象(通过JNI创建的对象);② 作为确保某.

weixin_38987366的博客 2019

finally与return总结

如果return的数据是引用数据类型,而在finally中对该引用数据类型的属性的改变起作用,try中的return语句返回的就是在finally中改变后的该属性的。情况二:如果finally中没有return语句,也没有改变要返回,则执行完finally中的语句后,会接着执行try中的return语句,返回之前保留的。如果return的数据是基本数据类型,则在finally中对该基本数据的改变不起作用,try中的return语句依然会返回进入finally块之前保留的

weixin_59640333的博客 2136

Javafinally与return的执行顺序

Java的异常处理中,try、catch 和 finally 是按顺序执行的。如果 try 中没有异常,则顺序为 try→finally,如果 try 中有异常,则顺序为 try→catch→finally。但是当 try、catch、finally 中加入 return 之后,return 和 finally 的执行顺序让很多人混淆不清。下面来分别说明一下。 1. try 和 catch 中带有return 1)try 中带有 return public class tryDemo { ...

骏马逸动,心随你动的博客 8593

finalfinallyfinalize区别

三者的区别 1.性质不同 (1)final关键字; (2)finalize()为方法; (3)finally为为区块标志,用于try语句中; 2. 作用 (1)final为用于标识常量关键字,final标识的关键字存储在常量池中(在这里final常量的具体用法将在下面进行介绍); (2)finalize()方法在Object中进行了定义,用于在对象“消失”时,由JVM进行调用用于对对象 进行垃圾回收,类似于C++中的析构函数;用户自定义时,用于释放对象占用的资源(比如进行 I/0操作);

m0_37290191的博客 8741

Javafinalfinallyfinalize区别

简单区别final用于声明属性,方法和类,分别表示属性不可交变,方法不可覆盖,类不可继承。 finally是异常处理语句结构的一部分,表示总是执行。 finalize是Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,供垃圾收集时的其他资源回收,例如关闭文件等。 中等区别: 虽然这三个单词在Java中都存在,但是并没有太多关联: final:jav...

aqs53198的博客 942

Javafinalfinallyfinalize区别与用法

本文转自以下博主链接: https://www.cnblogs.com/smart-hwt/p/8257330.html Javafinalfinallyfinalize区别与用法 1.简单区别final用于声明属性,方法和类,分别表示属性不可交变,方法不可覆盖,类不可继承。 finally是异常处理语句结构的一部分,表示总是执行。 finalize是Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,供垃圾收集时的其他资源回收,例如关闭文件等。 2.中等区别: 虽然这个单

changleeei的博客 1149

finalize()方法详解

前言 finalize()是Object的protected方法,子类可以覆盖该方法以实现资源清理工作,GC在回收对象之前调用该方法。。 finalize的作用 (1)finalize()与C++中的析构函数不是对应的。C++中的析构函数调用的时机是确定的(对象离开作用域或delete掉),但Java中的finalize的调用具有不确定性 (2)不建议用finalize方法完成“...

weixin_30426065的博客 1440

final,finally,finalize区别

final,finally,finalize区别 final 用于声明 属性(属性不可交变)、方法(方法不可覆盖)、类(类不可继承)。 finally 是 异常处理语句结构 的一部分,不管是否有异常,他的语句总是执行。 finalize 是Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,供垃圾收集时的其他资源回收,例如关闭文件等。

TheDevice的博客 6092

finally 和 return 的执行顺序

代码一: 运行结果如下: 从上述运行结果来看,在执行到之前先运行了代码,为什么会是这样的呢?我们可以看看编译后的代码如下: 发现编译后 被优化了放到了后面,中间都是用临时变量存储的,所以自然而然执行顺序就是先输出然后执行。同时也是表示这个方法运行完准备退出。 代码二: 运行结果如下: 为什么是这样的输出结果,我们查看编译后的代码如下所示: 还是因为代码自动优化了。代码三: 运行结果如下所示: 看完运行结果我们看看编译后的代码如下所示: 从这里可以看出只要在中加了代码结束符,其他地方的都忽略,在中加就相当于

龚小帅的博客 1639

final,finalize,finally区别

final  finalize  finally  的区别一、性质不同 (1)final关键字;(2)finalize()为方法;(3)finally为为区块标志,用于try语句中; 二、作用 (1)final为用于标识常量关键字final标识的关键字存储在常量池中(在这里final常量的具体用法将在下面进行介绍);(2)finalize()方法在Object中进行了定 (3)finally{}用于标识代码块,与try{}进行配合,不论try中的代码执行完或没有执行完(这里指有异常),该代码块之中的程

suwu150 1478

javafinalize()方法

finalize 垃圾回收机器(Garbage Collection),也叫GC,垃圾回收器主要有一下特点: 当对象不再被程序所使用的时候,垃圾回收器将会将其回收 垃圾回收是在后台运行的,我们无法命令垃圾回收器马上回收资源,但是我们可以告诉他可以尽快回收资源(System.gc()和Runtime.getRuntime().gc()) 垃圾回收器在回收某个对象的时候,首先会调用该对象的finalize()方法 GC主要针对堆内存 单例模式的缺点 finalize()是Object里面的一个方法,当一个堆

南宫沉梦博客 3万+

临时对象探讨与解析,提高性能手段

一:临时对象的概念 二:临时对象的产生情况和解决

qq_38158479的博客 354

Java基础【1】 final, finally, finalize区别

final:修饰--类,方法,变量。        类:不可被继承。        方法:不可被重写。        变量:初始化时给定,以后不得修改。finally:是在异常处理时提供finally块来执行任何清除操作。不管有没有异常被抛出、捕获,finally块都会被执行。try块中的内容是在无异常时执行到结束。catch块中的内容,是在try块内容发生catch所声明的异常时,跳转到cat...

youxia007ya的技术社区 1239

return在finally前执行还是后执行?

如果在finally前面有return,那么也会先把finally中的代码执行完,再执行return,所以。当程序执行到return的时候,会结束这个方法,并且会把return后面的,返回到方法调用的地方。finally是用在异常处理中,放在catch之后,finally中的代码是一定会执行的。

weixin_52222660的博客 1627

try、catch、finally、return执行顺序超详解析与throw与throws区别

【代码】try、catch、finally、return执行顺序超详解析与throw与throws区别

CHEN_DA_PING的博客 2590

finally、catch和return,你真的会用吗?

1.先简单介绍一下Java中的错误(Error)和异常(Exception)在java.lang包中有一个java.lang.Throwable类,这个类是所有错误和异常的父类。Error:    是Java中所有错误的父类,一般是与虚拟机相关的问题,如系统崩溃,虚拟机错误,动态链接失败等。对于这种任务,通常应用程序无法处理这类错误,也不需要开发人员处理,故应用程序不需要使用cath来捕获Erro...

Jae_Wang的博客 2129

finalize作用

转自:https://blog.csdn.net/a4171175/article/details/90749839 finalize()是Object中的方法,当垃圾回收器将要回收对象所占内存之前被调用,即当一个对象被虚拟机宣告死亡时会先调用它finalize()方法,让此对象处理它生前的最后事情(这个对象可以趁这个时机挣脱死亡的命运)。要明白这个问题,先看一下虚拟机是如何判断一个对象该死的。 判定死亡 "GC ROOTS"定义:GC管理的主要区域是Java堆,一般情况下只针对堆进行垃圾回收。.

渣渣 4582

finalize方法

java当中,当一个对象没有别人指向时,会成为一个垃圾对象。会被jvm回收(销毁)堆内存(或对象空间)。 默认情况下一个类的finalize方法都是继承Object类的。对象调用finalize方法后即被回收。程序员可以重写一个类的finalize方法。但是因为jvm的垃圾回收机制可能不会马上回收。我们可以通过System.gc()进行主动触发垃圾回收机制。 public class Finalize_ { public static void main(String[] args) {

weixin_57711380的博客 849
上一篇: 黑马程序员学习日记 overload与override的区别
下一篇: 黑马程序员学习日记 Eclipse常用设置
Mr_April
博客等级 码龄11年 1粉丝 10原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值