Java的关键字final
@[toc]
final的使用
- final可以用来修饰的结构:类、方法、变量
- final 用来修饰一个类:此类不能被其他类继承。比如:String类、System类、StringBuffer类
- final 用来修饰方法:表明此方法不可以被重写。比如:Object类中的getClass()
public final void AA(){}
- final 用来修饰变量:表示这个变量此时已经是一个常量
3.1、final修饰属性,可以考虑的赋值的位置有:显式初始化、代码块中初始化、构造器中初始化(如果有多个构造器,那么每个构造器都需要去赋值)、
public class FinalTest {
final int a=3;
final int b;
final int c;
{
b=1;
}
public FinalTest(){
c=2;
}
}
3.2、final修饰局部变量:当final修饰形参时,表面此形参是一个常量。当调用此方法时,给这个常量形参赋值,一旦赋值以后,就只能在方法体内使用此形参,但不能重新赋值。假日修饰的是普通变量,就变成一个常量,不能再进行操作
- static final可以用来修饰:属性、方法
修饰属性:全局常量(通常大写)
修饰方法:情况较少
练习题:排错
public class Something {
public int addOne(final int x) {
return ++x;
// return x + 1;
}
}
解释:这样用是错误的,因为已经用final修饰了x就不能再修改,但是++x对x进行了自增,改变了x,如果改成注释掉的就是正确的,因为返回x+1并未对x进行操作,只是返回一个数值
public class Something {
public static void main(String[] args) {
Other o = new Other();
new Something().addOne(o);
}
public void addOne(final Other o) {
// o = new Other();
o.i++;
}
}
class Other {
public int i;
}
解释:这里的是没错的,因为final是针对o的,但是o.i++不影响,但是如果用注释了的语句,就会错误,因为又换了一个对象,改变了o