84

在 Java 中,关键字final,finallyfinalize实现什么目的?

4

7 回答 7

273

最终的

final可用于将变量标记为“不可更改”

private final String name = "foo";  //the reference name can never change

final也可以使方法不是“可覆盖”的

public final String toString() {  return "NULL"; }

final也可以使一个类不是“可继承的”。即类不能被子类化。

public final class finalClass {...}
public class classNotAllowed extends finalClass {...} // Not allowed

最后

finally在 try/catch 语句中用于“始终”执行代码

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

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

敲定

finalize当对象被垃圾回收时调用。您很少需要覆盖它。一个例子:

protected void finalize() {
  //free resources (e.g. unallocate memory)
  super.finalize();
}
于 2011-10-18T22:52:01.940 回答
19
  • “Final”表示不能改变的东西。您通常希望将其用于在程序的整个生命周期中保持相同值的静态变量。
  • “Finally”与 try/catch 块结合使用。无论“try”块中的代码是否抛出异常,“finally”子句中的任何内容都将被执行。
  • 在对象即将被垃圾回收之前,JVM 会调用“Finalize”。
于 2011-10-18T22:52:24.907 回答
6

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

final – 常量声明。

finally – finally 块总是在 try 块退出时执行,除了 System.exit(0) 调用。这样可以确保即使发生意外异常也会执行 finally 块。但 finally 不仅仅对异常处理有用——它允许程序员避免清理代码意外地被 return、continue 或 break 绕过。将清理代码放在 finally 块中始终是一个好习惯,即使没有预料到异常也是如此。

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

您是否尝试在谷歌上搜索,需要澄清解释?

于 2011-10-18T22:50:00.483 回答
6

final 关键字用于声明常量。

final int FILE_TYPE = 3;

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

try
{
  //stuff
}
catch(Exception e)
{
  //do stuff
}
finally
{
  //this is always run
}

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

于 2011-10-18T22:52:36.087 回答
6

final: final是一个关键字。变量 decleared as final 应该只初始化一次并且不能更改。声明为 final 的 Java 类不能扩展。声明为 final 的方法不能被覆盖。

finally: finally 是一个块。finally 块总是在 try 块退出时执行。这样可以确保即使发生意外异常也会执行 finally 块。但是 finally 不仅仅对异常处理有用——它允许程序员避免清理代码被返回、继续或中断意外绕过。将清理代码放在 finally 块中始终是一个好习惯,即使没有预料到异常也是如此。

finalize: finalize 是一个方法。在一个对象被垃圾回收之前,运行时系统调用它的 finalize() 方法。在进行垃圾回收之前,您可以在 finalize() 方法中编写系统资源释放代码。

于 2014-08-07T17:54:41.233 回答
2

1. Final • Final 用于对类、方法和变量施加限制。• final 类不能被继承,final 方法不能被覆盖,final 变量值不能被改变。• 最终变量在创建时初始化,但在构造函数中初始化的空白最终变量除外。• Final 是一个关键字。

2. finally • finally 与try 和catch 一起用于异常处理。• 无论是否处理异常都会执行。• 该块用于关闭数据库连接、I/O 资源等资源。• finally 是一个块。

3. Finalize • Finalize 由垃圾收集线程在收集合格对象之前调用以执行清理处理。• 这是对象执行任何清理的最后机会,但由于不能保证是否会调用 finalize (),所以在调用 finalize 之前保留资源是不好的做法。• Finalize 是一种方法。

于 2016-03-05T21:42:07.420 回答
0

java中final的意思是:-应用于一个变量表示各个变量一旦初始化就不能再修改

private final double numer = 12;

如果你尝试修改这个值,你会得到一个错误。

-应用于方法意味着不能覆盖相应的方法

 public final void displayMsg()
    {
        System.out.println("I'm in Base class - displayMsg()");
    }

但是final方法可以被继承,因为final关键字限制了方法的重定义。

-应用于一个类意味着不能扩展相应的类。

class Base
{

    public void displayMsg()
    {
        System.out.println("I'm in Base class - displayMsg()");
    }
}

finally 的意思是:

class TestFinallyBlock{  
  public static void main(String args[]){  
  try{  
   int data=25/5;  
   System.out.println(data);  
  }  
  catch(NullPointerException e){System.out.println(e);}  
  finally{System.out.println("finally block is always executed");}  
  System.out.println("rest of the code...");  
  }  
} 

在这个例子中,无论 try-catch 是否被执行,finally 中的内容总是会被执行。finalize 的含义:

class FinalizeExample{  
public void finalize(){System.out.println("finalize called");}  
public static void main(String[] args){  
FinalizeExample f1=new FinalizeExample();  
FinalizeExample f2=new FinalizeExample();  
f1=null;  
f2=null;  
System.gc();  
}}  

在调用垃圾收集器之前。

于 2020-01-06T17:42:55.367 回答