目录
01 final介绍
* final:最终的
* 1.final可以用来修饰的结构:类、方法、变量
* 2.final用来修饰一个类:此类不能被其他类所继承。
* 比如:String类、System类、StringBuffer类
* 3.final修饰一个方法:final标记的方法不能被子类重写。
* 比如:Object类中的getClass()。
* 4.final用来修饰变量:此时的 "变量" (成员变量或局部变量)就是一个常量。名称大写,且只能被赋值一次。
- final修饰属性,可以考虑赋值的位置有:显式初始化、代码块中初始化、构造器中初始化
- final修饰局部变量:
- 尤其是使用final修饰形参时,表明此形参是一个常量。当我们调用此方法时,给常量形参赋一个实参。
- 一旦赋值以后,就只能在方法体内使用此形参,但不能进行重新赋值。
* static final 用来修饰:全局常量
final修饰属性和局部变量
public class FinalTest {
final int WIDTH = 0;
final int LEFT;
final int RIGHT;
// 代码块
{
LEFT = 1;
}
// 构造器
public FinalTest(){
RIGHT = 2;
}
public FinalTest(int n){
RIGHT = n;
}
public void dowidth(){
// width = 20;
// 如果width设置为final属性报错:width cannot be resolved to a variable
}
public void show(){
final int NUM = 10; //常量
// num += 20;
}
public void show(final int num){ // final修饰形参时,在此方法内只能调用,不能对其进行修改
// num = 20; //编译不通过
System.out.println(num);
}
public static void main(String[] args) {
int num = 10;
num = num + 5;
FinalTest test = new FinalTest();
// test.setDown(5);
test.show(10);
}
}
final修饰类
// 修饰类
final class FianlA{
}
//class B extends FinalA{ //错误,不能被继承。
//
//}
//class C extends String{
//
//}
final修饰类中的方法
class AA{
public final void show(){
}
}
//class BB extends AA{ // 错误,不能被重写。
// public void show(){
//
// }
//}
1.1 final相关面试题
面试题1: 纠错
public class Something {
public int addOne(final int x) { // final定义不能在方法内更改
return ++x; // return x + 1;
}
}
面试题2:
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++; // 这里没问题,因为o是常量,但o的属性i是一个变量
}
}
class Other {
public int i;
}