以下是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声明一个对象又有什么意义呢?

解决方案 »

  1.   

       如果一个类不允许其子类覆盖某个方法,则可以把这个方法声明为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上看到的 你搜搜看说的很详细很好的
      

  2.   

    final修饰方法,Object的子类不允许重写这个wait方法.final修饰一个变量,表示这个变量不能被改变.
    比如final int a=5;
    则a不能被重新赋值.

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

  3.   

    请问wait方法前的final在这里有什么意义? 
    外部再也不能修改和覆盖这个方法 
    打个比方说:不管你开什么牌子的汽车 我就规定了开汽车的方法就这个一个
    还有final声明一个对象又有什么意义呢?
    同理 外部再也不能修改和覆盖这个对象
      

  4.   

    final的方法不能被重写 剩下的看 三楼的吧