final也是很多面试喜欢问的地方,但我觉得这个问题很无聊,通常能回答下以下5点就不错了:
被final修饰的类不可以被继承
被final修饰的方法不可以被重写
被final修饰的变量不可以被改变.如果修饰引用,那么表示引用不可变,引用指向的内容可变.
被final修饰的方法,JVM会尝试将其内联,以提高运行效率
被final修饰的常量,在编译阶段会存入常量池中.
除此之外,编译器对final域要遵守的两个重排序规则更好:
在构造函数内对一个final域的写入,与随后把这个被构造对象的引用赋值给一个引用变量,这两个操作之间不能重排序 初次读一个包含final域的对象的引用,与随后初次读这个final域,这两个操作之间不能重排序。
在Java中,final关键字用于声明常量变量,它的作用是确保该变量在声明后不能被修改。final关键字可以用于以下几种情况:
声明常量变量:final关键字用于声明常量变量,它可以确保该变量在声明后不能被修改。例如:
final int MAX_VALUE = 100;
声明静态变量:final关键字用于声明静态变量,它可以确保该变量在声明后不能被修改。例如:
public class MyClass {
static final int MAX_VALUE = 100;
}
声明局部变量:final关键字用于声明局部变量,它可以确保该变量在声明后不能被修改。例如:
public class MyClass {
private int value;
public void setValue(int value) {
this.value = value;
}
public int getValue() {
return value;
}
}
声明方法参数:final关键字用于声明方法参数,它可以确保该参数在声明后不能被修改。例如:
java
public class MyClass {
public void doSomething(final int value) {
// do something with value
}
}
需要注意的是,final关键字只能用于常量变量、静态变量和方法参数,不能用于局部变量和实例变量。此外,final关键字不能用于基本数据类型,因为基本数据类型是不可变的。