1. 首页
  2. > 税务筹划 >

终止与终结的区别和意思(中间终止与结束终止最根本的区别)

作为一名程序员,不知道你在面试时,有没有遇到类似需要做笔试题的。有些笔试题看似很简单,但其中包含了很多知识点。


我有次到一家软件公司应聘软件开发岗位,就遇到需要做一份笔试题。其中有一道题目是这样的:


final、finally、 finalize有什么不同?


当时我也没有多想,也只是简单地做简答。


后来随着不断地实践。发现它们在实际项目应用中还是挺重要的。


今天我们来看看final、finally、 finalize有什么不同?


final

final可以用来修饰类、方法、变量。


final表示不可变的,它可以用来修饰类,方法和变量。


其中final修饰的class代表不可以继承扩展,


final的变量是不可以修改的,


final的方法也是不可以重写的(override)



finally

finally是异常处理中的一个关键字,通常的结构是这样的:


try{ } catch(){ } finally{ }

finally一般是用于资源释放,比如我们可以在finally块中关闭数据库连接,流关闭等。


但是finally中的代码并不是一定会被执行。在以下情况下不会执行finally中的代码:


  • 在进入try块之前程序发生异常。
  • 在try块中调用了System.exit(0)终止了虚拟机的运行。
  • 在try块或catch块中程序被中断。

我们来看一看下面这个例子:


public class FinallyTest { public static void main(String[] args) { int i = method(); System.out.println("i值:" i); } public static int method() { int num = 1; try { return num; } catch (Exception ex) { return 0; } finally { num ; } } }

程序输出结果为:i值:1


不知道看了这个例子,有没有这样的疑问,


finally中的代码究竟是在return前还是return后执行的?


我们再来看一个例子:


public class FinallyTest { public static void main(String[] args) { int j = method2(); System.out.println("j值:" j); } public static int method2(){ int num = 1; try{ return num; }catch(Exception ex){ return 0; }finally{ return 2; } } }

这段程序输出的结果为 j值:2


该程序执行到try块中的return num时将num中的值1作为返回值保存在栈中,然后执行finally块中的代码,return 2,此时栈中的返回值变为了2,所以最后的结果为2。



这时候,我们再回过头来看看第一个例子中疑问,finally中的代码究竟是在return前还是return后执行的?现在你应该知道答案了吧。


关于在finally块中使用return,在 阿里巴巴Java开发手册-异常处理 有这样的描述:


因为如果存在 finally 代码块,try中的 return 语句执行成功后,并不会立马返回调用者,而是继续执行finally块中的语句,如果此处存在return语句,(立即结束语句)的优先级最高,程序会优先返回finally语句块中的立即结束语句的结果,此时try-catch语句块中的return/抛出异常,程序结束。



很显然,在 finally 中返回或者修改返回值会对程序造成很大的困扰。不推荐这种写法。


finalize

finalize是基础类java.lang.Object的一个方法,它的设计目的是保证对象在被垃圾收集前完成特定资源的回收。


如果面试时面试官再问起final、finally、 finalize有什么不同?我们就可以根据实际案例阐述结果了。


总结:


1. final可以用来修饰类、方法、变量。


2. finally是在异常处理时提供finally块来执行任何清除操作


3.finalize是基础类java.lang.Object的一个方法


由于笔者水平有限,文中纰漏之处在所难免,权当抛砖引玉,不妥之处,请大家批评指正。


版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至123456@qq.com 举报,一经查实,本站将立刻删除。

联系我们

工作日:9:30-18:30,节假日休息