日期:2014-05-20  浏览次数:20944 次

final用在方法名前有什么意义?
以下是Object.class里的一段代码
public final void wait(long timeout, int nanos) throws InterruptedException {
if (timeout < 0) {
throw new IllegalArgumentException("timeout value is negative");
}

if (nanos < 0 || nanos > 999999) {
throw new IllegalArgumentException(
"nanosecond timeout value out of range");
}

if (nanos >= 500000 || (nanos != 0 && timeout == 0)) {
timeout++;
}

wait(timeout);
}
我知道final是声明常量和最终对象(不可继承对象)的关键字。
请问wait方法前的final在这里有什么意义?
还有final声明一个对象又有什么意义呢?

------解决方案--------------------
应该是不能被 重写 继承
------解决方案--------------------
如果一个类不允许其子类覆盖某个方法,则可以把这个方法声明为final方法。 
使用final方法的原因有二: 
第一、把方法锁定,防止任何继承类修改它的意义和实现。 
第二、高效。编译器在遇到调用final方法时候会转入内嵌机制,大大提高执行效率。 
例如: 

Java codepublic class Test1 { 

public static void main(String[] args) { 
// TODO 自动生成方法存根 


public void f1() { 
System.out.println("f1"); 

//无法被子类覆盖的方法 
public final void f2() { 
System.out.println("f2"); 


public void f3() { 
System.out.println("f3"); 


private void f4() { 
System.out.println("f4"); 



public class Test2 extends Test1 { 

public void f1(){ 
System.out.println("Test1父类方法f1被覆盖!"); 


public static void main(String[] args) { 
Test2 t=new Test2(); 
t.f1(); 
t.f2(); //调用从父类继承过来的final方法 
t.f3(); //调用从父类继承过来的方法 
//t.f4(); //调用失败,无法从父类继承获得 




这个是我以前从csdn上看到的 你搜搜看说的很详细很好的
------解决方案--------------------
final修饰方法,Object的子类不允许重写这个wait方法.

final修饰一个变量,表示这个变量不能被改变.
比如final int a=5;
则a不能被重新赋值.

final StringBuilder builder = new StringBuilder("Hello ");
则builder不能再指向别的对象.但是对象的内容可以改变,比如你可以
builder.append("World!");
------解决方案--------------------
探讨
final修饰方法,Object的子类不允许重写这个wait方法.

final修饰一个变量,表示这个变量不能被改变.
比如final int a=5;
则a不能被重新赋值.

final StringBuilder builder = new StringBuilder("Hello ");
则builder不能再指向别的对象.但是对象的内容可以改变,比如你可以
builder.append("World!");

------解决方案--------------------
2楼讲的最正确。
------解决方案--------------------
同意二楼的
------解决方案--------------------
final的方法不能被重写 剩下的看 三楼的吧