一、final关键字可以用来修饰类、方法、变量。各有不同。
A、修饰类(class)。
1. 该类不能被继承。
2. final类中的所有成员方法都会被隐式地指定为`final`方法。
3. 用途:设计类时,如果该类不需要有子类,不必要被扩展,类的实现细节不允许被改变,那么就设计成`final`类
B、修饰方法(method)
1. 该方法可以被继承,但是不能被覆盖。
2. 用途:一个类不允许子类覆盖该方法,则用`final`来修饰
3. 好处:可以防止继承它的子类修改该方法的意义和实现;更为高效,编译器在遇到调用`fianal`方法转入内嵌机制,提高了执行效率。
4. 注意:父类中的`private`成员方法不能被子类覆盖,因此,`private`方法默认是final型的(可以查看编译后的class文件)
C、修饰变量(variable)
1. 用final修饰后变为常量。包括静态变量、实例变量和局部变量这三种。
2. 常量命名规范,如果是一个单词,所有字母大写,如果是多个单词,每个单词都大写,中间用下划线隔开
3. final修饰变量叫做常量,一般会与`public` ,`static`共用
4. 特点:可以先声明,不给初值,这种叫做`final空白`。但是使用前必须被初始化。一旦被赋值,将不能再被改变。
D、修饰参数(arguments)
1. 用`final`修饰参数时,可以读取该参数,但是不能对其作出修改
【一道面试题】使用 final 关键字修饰一个变量时,是引用不能变,还是引用的对象不能变?
eg:
public static void main(String[] args) {
final StringBuffer sbf = new StringBuffer("我用双手");
System.out.println(sbf);
System.out.println(System.identityHashCode(sbf));
sbf.append(",成就你的梦想。");
System.out.println("after append ====>");
System.out.println(sbf);
System.out.println(System.identityHashCode(sbf));
}
打印结果:
我用双手
1915910607
after append ====>
我用双手,成就你的梦想。
1915910607
可见,引用对象的内容变了,但是引用的地址没有变。
网友评论