简述final和finally的用法和区别

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了简述final和finally的用法和区别相关的知识,希望对你有一定的参考价值。

这是关于Java的一道简答题

我们依次来回顾一下每种情况下final的作用。首先来看第一种情况,如果final修饰的是一个基本类型,就表示这个变量被赋予的值是不可变的,即它是个常量;如果final修饰的是一个对象,就表示这个变量被赋予的引用是不可变的,这里需要提醒大家注意的是,不可改变的只是这个变量所保存的引用,并不是这个引用所指向的对象。在第二种情况下,final的含义与第一种情况相同。实际上对于前两种情况,有一种更贴切的表述final的含义的描述,那就是,如果一个变量或方法参数被final修饰,就表示它只能被赋值一次,但是JAVA虚拟机为变量设定的默认值不记作一次赋值。

被final修饰的变量必须被初始化。初始化的方式有以下几种:

1、在定义的时候初始化。
2、final变量可以在初始化块中初始化,不可以在静态初始化块中初始化。
3、静态final变量可以在静态初始化块中初始化,不可以在初始化块中初始化。
4、final变量还可以在类的构造器中初始化,但是静态final变量不可以。

接下来我们一起回顾一下finally的用法。这个就比较简单了,它只能用在try/catch语句中,并且附带着一个语句块,表示这段语句最终总是被执行。请看下面的代码:
Java代码
public final class FinallyTest
public static void main(String[] args)
try
throw new NullPointerException();
catch (NullPointerException e)
System.out.println("程序抛出了异常");
finally
System.out.println("执行了finally语句块");




运行结果说明了finally的作用:

1、程序抛出了异常
2、执行了finally语句块

请大家注意,捕获程序抛出的异常之后,既不加处理,也不继续向上抛出异常,并不是良好的编程习惯,它掩盖了程序执行中发生的错误,这里只是方便演示,请不要学习。
参考技术A 我们依次来回顾一下每种情况下final的作用。首先来看第一种情况,如果final修饰的是一个基本类型,就表示这个变量被赋予的值是不可变的,即它是个常量;如果final修饰的是一个对象,就表示这个变量被赋予的引用是不可变的,这里需要提醒大家注意的是,不可改变的只是这个变量所保存的引用,并不是这个引用所指向的对象。在第二种情况下,final的含义与第一种情况相同。实际上对于前两种情况,有一种更贴切的表述final的含义的描述,那就是,如果一个变量或方法参数被final修饰,就表示它只能被赋值一次,但是JAVA虚拟机为变量设定的默认值不记作一次赋值。

被final修饰的变量必须被初始化。初始化的方式有以下几种:

1、在定义的时候初始化。
2、final变量可以在初始化块中初始化,不可以在静态初始化块中初始化。
3、静态final变量可以在静态初始化块中初始化,不可以在初始化块中初始化。
4、final变量还可以在类的构造器中初始化,但是静态final变量不可以。

接下来我们一起回顾一下finally的用法。这个就比较简单了,它只能用在try/catch语句中,并且附带着一个语句块,表示这段语句最终总是被执行。请看下面的代码:
Java代码
public final class FinallyTest
public static void main(String[] args)
try
throw new NullPointerException();
catch (NullPointerException e)
System.out.println("程序抛出了异常");
finally
System.out.println("执行了finally语句块");




运行结果说明了finally的作用:

1、程序抛出了异常
2、执行了finally语句块

请大家注意,捕获程序抛出的异常之后,既不加处理,也不继续向上抛出异常,并不是良好的编程习惯,它掩盖了程序执行中发生的错误,这里只是方便演示,请不要学习。
参考技术B finally的用法。它只能用在try/catch语句中,并且附带着一个语句块,表示这段语句最终总是被执行
finalize()方法是在GC清理它所从属的对象时被调用的,如果执行它的过程中抛出了无法捕获的异常(uncaught exception),GC将终止对改对象的清理,并且该异常会被忽略;直到下一次GC开始清理这个对象时,它的finalize()会被再次调用。
参考技术C final:禁止多态开关~
修饰变量:变量不能被改变
修饰类:类不能被继承
修饰方法:方法不能被重写

finally:用在异常处理的最后一个语句块
无论是否产生异常都要被执行~~~

楼主不要忘了结贴~~~~~~~~~
参考技术D final是用来定义静态域的(第一次初始化后就不能再修改)
finally一般用于异常处理trycatch()finall...就最后finally一定会执行...一帮用于关闭流和资源(万一抛异常后面的就不执行....而你的关闭资源放在catch..发生异常你的资源就关闭不了啦)

delphi try except语句 和 try finally语句用法以及区别

try//尝试执行
{SomeCode} 
except//出错的时候执行, Except有特定的错误类型 
{SomeCode} 
end; 

try//尝试执行
{SomeCode} 
finally//无论如何都强制执行
{SomeCode} 
end; 

例:
try
Age:=StrToInt(Edit1.Text);
ShowMessage(Format(‘生于%d年‘,[YearOf(Now)-Age]));
except
on EConvertError do
showmessage(‘输入编辑框的不是一个有效的数字!‘);
on ERangeError do
showmessage(‘输入编辑框的年龄值太大!‘);
end;



保留字on…do用于判断异常类型。必须注意的是:except后面的语句必须包含在某一个on…do模块中,而不能单独存在。这又是同finally不同的一个地方。


异常处理
try
//成功失败都跳进finally语句里执行
finally

end;
try
//失败才跳进 except里执行
except on e:Exception do
ShowMessage(e.Message);
end; 

以上是关于简述final和finally的用法和区别的主要内容,如果未能解决你的问题,请参考以下文章

44-final, finally, finalize的区别

c#sealed 和 Java 的 final 关键字在功能上有啥区别吗? [复制]

[转] java基础-浅析Java中的final关键字

final .....finally ...... 和Finalize ......区别

delphi try except语句 和 try finally语句用法以及区别

delphi try except语句 和 try finally语句用法以及区别