以下是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!");
------解决方案--------------------
------解决方案--------------------
2楼讲的最正确。
------解决方案--------------------
同意二楼的
------解决方案--------------------
final的方法不能被重写 剩下的看 三楼的吧