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

时间:2011-10-18 22:46:15

标签: java final finally finalize

在Java中,关键字finalfinallyfinalize的目的是什么?

7 个答案:

答案 0 :(得分:268)

最终

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用于execute code "always"

的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有new try with resources statement可用于自动关闭明确或隐式实现java.io.Closeablejava.lang.AutoCloseable

的资源

的finalize

当对象被垃圾收集时调用

finalize。你很少需要覆盖它。一个例子:

protected void finalize() {
  //free resources (e.g. unallocate memory)
  super.finalize();
}

答案 1 :(得分:18)

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

答案 2 :(得分:6)

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

  

final - 不断声明。

     

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

     

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

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

答案 3 :(得分:6)

final关键字用于声明常量。

final int FILE_TYPE = 3;

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

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

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

答案 4 :(得分:6)

最后:      final是一个关键字。该变量应该是最终的     只初始化一次,无法更改。 Java类     声明为final不能延长。声明为final的方法     不能被覆盖。

最后:     最终是一个块。 finally块总是在执行时执行     尝试阻止退出。这可确保执行finally块     即使发生意外的异常。但最后是有用的     不仅仅是异常处理 - 它允许程序员     避免因返回意外绕过清理代码,     继续,或打破。将清理代码放在finally块中是     即使没有预期的例外情况,这也是一种很好的做法。

的finalize:      finalize是一种方法。在对象被垃圾收集之前,     运行时系统调用其finalize()方法。你可以写系统     资源在获取垃圾之前在finalize()方法中释放代码     收集。

答案 5 :(得分:2)

<强> 1。最终 •Final用于对类,方法和变量应用限制。 •最终的课程不能被继承,最终的方法不能被覆盖,最终的变量值也无法改变。 •最终变量在创建时初始化,除非在构造函数中初始化的空白最终变量。 •Final是关键字。

<强> 2。最后 •最后用于异常处理以及try和catch。 •无论是否处理异常,都将执行。 •此块用于关闭数据库连接,I / O资源等资源。 •最后是一个街区。

第3。完成 •在收集符合条件的对象以执行清理处理之前,垃圾收集线程调用Finalize。 •这是对象执行任何清理的最后机会,但由于无法保证是否会调用finalize(),因此保留资源直到完成调用是不好的做法。 •Finalize是一种方法。

答案 6 :(得分:0)

final在java中的含义是: -应用于变量意味着相应的变量一旦初始化就无法修改

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,最终内部的内容也将始终执行。 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();  
}}  

在致电垃圾收集器之前。