finalize和finally傻傻分不清楚

一. finalize 用途
答: 垃圾回收器(garbage colector)决定回收某对象时, 就会运行该对象的 finalize()方法 但是在 Java 中很不幸, 如果内存总是充足的, 那么垃圾回收可能永远不会进行, 也就是说 filalize()可能永远不被执行, 显然指望它做收尾工作是靠不住的。 那么 finalize()究竟是做什么的呢? 它最主要的用途是回收特殊渠道申请的内存。 Java 程序有垃圾回收器, 所以一般情况下内存问题不用程序员操心。但有一种 JNI(Java Native Interface)调用 non-Java程序(C 或 C++) , finalize()的工作就是回收这部分的内存。

二. finally
Try catch finally
在try中return之前会执行finally中的代码,如果finally中有return,直接return
值为finally中修改的,如果finally中没有return,则执行try中的return,数值仍然是try中的

finally 一定会被执行, 如果 finally 里有 return 语句, 则覆盖 try/catch 里的 return ,比较爱考的是 finally 里没有 return 语句, 这时虽然 finally 里对 return 的值进行了修改, 但 return 的值并不改变这种情况

三. finally 代码块和 finalize()方法有什么区别?
无论是否抛出异常, finally 代码块都会执行, 它主要是用来释放应用占用的资源。
finalize()方法是 Object 类的一个 protected 方法, 它是在对象被垃圾回收之前由 Java 虚拟机来调用的。

猜你喜欢

转载自blog.csdn.net/u010651249/article/details/83894658
今日推荐