在Java中,关键字final
,finally
和finalize
的目的是什么?
答案 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"
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.Closeable或java.lang.AutoCloseable
的资源 finalize
。你很少需要覆盖它。一个例子:
protected void finalize() {
//free resources (e.g. unallocate memory)
super.finalize();
}
答案 1 :(得分:18)
答案 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();
}}
在致电垃圾收集器之前。