final关键字
* final : 最终的 * final 可以用来修饰的结构: 类, 方法, 变量 * * final 修饰一个类 * > 这个类就是最终的类 不可以被其他类所继承 * eg : String 类 System类 StringBuffer类 * * * final 修饰一个方法: 表明此方法不可以被重写 * * * final 修饰变量: 表明此"变量"就称为常量 * final修饰一个属性: 可以考虑赋值的位置有:显示初始化, 代码块初始化, 构造器初始化
final修饰的变量 初始化 位置:
eg
:
public class FinalTest { // final int winth; // 错误, 不可以使用这种方法 final int WIDTH = 9; final int LEFFT; final String name; { // 代码块中赋值 LEFFT = 14; } public FinalTest(){ name = "老王"; } public FinalTest(String n){ name = n; } public static void main(String[] args) { FinalTest finalTest = new FinalTest(); System.out.println(finalTest.name); } }
final修饰局部变量
尤其是使用final修饰形参时,表明此形参是个常量.当我们调用此方法时,给常量形参赋值一个实参,
一旦赋值以后, 就只能在方体内使用此形参不能重新赋值
public void show(){ int num = 10; } // final 修饰局部变量 这个局部变量只在某个特定的方法的局域或者某一块中生效 public void show(final int num){ System.out.println(num); }
static final 修饰一个属性: 全局常量 , 全局内只有这一个变量,全局就是static来修饰的 随着类的加载而加载
面试题
排错
1
public class Something { public int addOne(final int x) {
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++; }
}
class Other {
public int i; }
解答:
1, 报错 final不可修改 注释的写法是可以的 2, 可以 因为final之后的对象不可修改 ,但是修改对象内部的是可以的