final 、finally
开发工具与关键技术:工具:myeclipse 技术: final 、finally
作者:吴东梅
撰写时间:2019-05-11
final和finally单词书写相似,很容易被搞混,但是它们的作用却截然不同。
final修饰符
final主要用法有以下四种:
一、 用来修饰数据,包括成员变量和局部变量,该变量只能被赋值一次且它的值无法被改变。对于成员变量来讲,我们必须在声明时、构造方法或者初始化块中对它赋值。
final修饰成员变量:final修饰的成员变量必须由程序员显示的指定初始值。必须在非静态初始化块、声明该实例变量或构造器中指定初始值,而且只能在三个地方的其中之一指定。
如果已经指定过一次值之后,就不能再次指定了。
final修饰的类变量,必须在静态初始化块中指定初始值或声明该类变量时指定初始值,而且只能在两个地方的其中之一指定。
示例代码如下:
成员变量又称实例变量。

二、用来修饰局部变量,表示在变量的生存期中它的值不能被改变。
final修饰局部变量时,既可以在定义时指定默认值,也可以不指定默认值。
如果在定义时指定了默认值,那么就不能在后面的代码中为变量赋值。
如果在定义时没有指定默认值,那么可以在后面的代码中赋值一次,而且只能一次。
也不能对final修饰的形参赋值。
如下图所示:

三、修饰方法,表示该方法无法被重写;
首先定义了一个类,类里面有两个方法,一个是普通方法,一个是final修饰的方法,然后再定义另一个类来继承第一个类,然后重写定义的两个方法,会发现普通方法可以成功被重写,而被final修饰的方法则会报错,所以final修饰的方法无法被重写。如下图所示:

四、 修饰类,表示该类无法被继承。 需要注意的是:final修饰的类不可以被继承,但是可以继承别人。
而且String 默认有final修饰,也不能被继承。

finally
finally块一般用来关闭物理资源(数据库连接,网络连接,磁盘文件等),这些物理资源必须显式关闭。除非在try块、catch块中调用了退出虚拟机的方法( System.exit(0); ),否则不管在try块、catch块中执行怎样的代码,出现怎样的情况,异常处理的finally块一定会被执行。
示例代码:

运行结果如下:

final、finally的区别:
答:final:修饰符(关键字)有三种用法:1、类被声明为final,意味着它不能再派生出新的子类,即不能被继承;2、将变量声明为final,可以保证它们在使用中不被改变;被声明为final的变量必须在声明时给定初值,而在以后的引用中只能读取不可修改。3、被声明为final的方法不能在子类中被重写。
finally:通常放在try…catch…的后面,finally块中的代码总能执行,这就意味着程序无论正常执行还是发生异常,这里的代码只要JVM不关闭都能执行,可以将释放外部资源的代码写在finally块中。
本文深入解析了final和finally这两个在Java编程中容易混淆的关键字。详细介绍了final作为修饰符的四种主要用途,包括修饰数据、局部变量、方法和类,以及finally在异常处理中的关键作用。
363

被折叠的 条评论
为什么被折叠?



