赞
踩
在Java中声明类、变量和方法时, 可使用关键字final来修饰,表示“最终的”,一旦你将引用声明为final,你将不能改变这个引用了。
final
标记的类不能被继承。提高安全性,提高程序的可读性。String
类、System
类、StringBuffer
类final
标记的方法不能被子类重写。Object
类中的getClass()
。final
标记的变量(成员变量或局部变量)即称为常量,只能被赋值一次。名称一般全大写,用下划线分隔。final
标记的成员变量必须在声明时或在每个构造器中或代码块中显式赋值,否则编译报错。final double MY_PI = 3.14;
修饰类: 修饰的类不能被继承,这样可以提高安全性, 提高程序的可读性。
比如:Math
、String
等。
final class A{
}
class B extends A{//错误,不能被继承。
}
修饰方法:该方法不可被子类重写。但是可以被重载!
final
方法比非final方法要快,因为在编译的时候已经静态绑定
了,不需要在运行时再动态绑定。
被final
修饰的方法,JVM 会尝试将其内联,以提高运行效率。
class A{
public final void print(){
System.out.println("A");
}
}
class B extends A{
public void print() {//错误, 不能被重写。
System.out.println("哈哈");
}
}
修饰变量: 被它修饰的变量不可改变,即为常量(Constant),只能被赋值一次。常量名一般全大写,单词之间用下划线分隔。
使用static final
修饰成员变量则为全局常量
final
修饰成员变量:不会被默认初始化,所以必须显式赋值,否则无法通过编译。
声明时赋值(推荐)
final double MY_PI = 3.14;
初始化块中赋值
每个构造器中赋值:如果只在一个构造器中进行赋值,那么调用其他构造器时该常量无法进行初始化。或者在其中一个构造器中赋值,其他构造器使用this()
调用该构造器也可以。
class A{
private final String
INFO = "haha";//声明常量
public void print() {
//The final field A.INFO_can not be assigned
//INFO="heihei";
}
}
final
修饰局部变量:使用final
修饰形参时,表明此形参是一个常量。当我们调用此方法时,给常量形参赋一个实参。一旦赋值以后,就只能在方法体内使用此形参,但不能进行重新赋值。public void show(final int num) {
// num = 20;//编译不通过
System.out.println(num);
}
private final List list= new ArrayList();
list.add("haha"); //valid
list.add("heihei"); //valid
list= new Vector(); //not valid
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。