在Java中,关键字"final","finally"和"finalize"的用途是什么?

Pat*_*ery 82 java final finally finalize

在Java中,目的是什么做的关键字final,finallyfinalize履行?

kri*_*ico 270

最后

final 可用于标记变量"不可更改"

private final String name = "foo";  //the reference name can never change
Run Code Online (Sandbox Code Playgroud)

final 也可以使方法不"重写"

public final String toString() {  return "NULL"; }
Run Code Online (Sandbox Code Playgroud)

final也可以使一个类不"可继承".即该类不能被子类化.

public final class finalClass {...}
public class classNotAllowed extends finalClass {...} // Not allowed
Run Code Online (Sandbox Code Playgroud)

最后

finally在try/catch语句中用于执行代码"always"

lock.lock();
try {
  //do stuff
} catch (SomeException se) {
  //handle se
} finally {
  lock.unlock(); //always executed, even if Exception or Error or se
}
Run Code Online (Sandbox Code Playgroud)

Java 7有一个新的try with resources语句,您可以使用它来自动关闭显式或隐式实现java.io.Closeablejava.lang.AutoCloseable的资源

敲定

finalize在对象被垃圾收集时调用.你很少需要覆盖它.一个例子:

protected void finalize() {
  //free resources (e.g. unallocate memory)
  super.finalize();
}
Run Code Online (Sandbox Code Playgroud)

  • 比大多数Java书籍更好的答案!! (18认同)
  • 谢谢.与其他称为"专家"的人相比,这个答案得到了很好的解释. (3认同)
  • 答案很好但是finalize方法的签名是错误的. (2认同)

Kev*_*n R 19

  • "最终"表示某些事情无法改变.您通常希望在静态变量上使用它,这些变量将在程序的整个生命周期中保持相同的值.
  • "Finally"与try/catch块一起使用.无论"try"块中的代码是否抛出异常,都将执行"finally"子句中的任何内容.
  • 在对象即将被垃圾收集之前,JVM会调用"Finalize".


Vor*_*sak 6

http://allu.wordpress.com/2006/11/08/difference-between-final-finally-and-finalize/

最后 - 不断声明.

finally - finally块总是在try块退出时执行,但System.exit(0)调用除外.这确保即使发生意外异常也会执行finally块.但最终不仅仅是异常处理有用 - 它允许程序员避免因返回,继续或中断而意外绕过清理代码.将清理代码放在finally块中始终是一种很好的做法,即使没有预期的例外情况也是如此.

finalize() - 方法有助于垃圾收集.在垃圾收集器丢弃对象之前调用的方法,允许它清理其状态.不应该用于释放非内存资源,如文件句柄,套接字,数据库连接等,因为Java只有有限数量的这些资源,并且您不知道垃圾收集何时会启动以释放这些非内存资源通过finalize()方法.

您是否尝试在Google上搜索,需要澄清一下解释?

  • 欢迎来到Stack Overflow!虽然本文可能实际上回答了这个问题,[但最好](http://meta.stackexchange.com/q/8259)在此处包含答案的基本部分,并提供参考链接.Stack Overflow仅与其问题和答案一样有用,如果此博客主机出现故障或URL被移动,则此答案将变得无用.谢谢! (4认同)

ctr*_*oot 6

final关键字用于声明常量.

final int FILE_TYPE = 3;
Run Code Online (Sandbox Code Playgroud)

finally关键字在try catch语句中用于指定要执行的代码块,而不管抛出的异常.

try
{
  //stuff
}
catch(Exception e)
{
  //do stuff
}
finally
{
  //this is always run
}
Run Code Online (Sandbox Code Playgroud)

最后(哈哈),finalize我不完全确定是一个关键字,但在Object类中有一个finalize()函数.


ven*_*nom 6

final: final是关键字.作为final的decleared应该只初始化一次,不能更改.声明为final的Java类无法扩展.声明为final的方法不能被覆盖.

最后: 终于是一个块.当try块退出时,finally块总是执行.这确保即使发生意外异常也会执行finally块.但最终不仅仅是异常处理有用 - 它允许程序员避免因返回,继续或中断而意外绕过清理代码.将清理代码放在finally块中始终是一种很好的做法,即使没有预期的例外情况也是如此.

finalize: finalize是一种方法.在对象被垃圾回收之前,运行时系统会调用其finalize()方法.在收集垃圾之前,您可以在finalize()方法中编写系统资源释放代码.