1.final可以用来修饰的结构:类、方法、变量 2.final 用来修饰一个类:此类不能被其他类所继承。 比如:String类、System类、StringBuffer类 3.final 用来修饰方法,表明此方法不可以被重写 比如:object类中getClass(); 4.final 用来修饰变量:此时的“变量”就称为一个常量 4.1 final修饰属性:可以考虑赋值的位置有:显式初始化、代码块中初始化、 构造器中初始化(类中创建的所有构造器都需再次初始化)、 调用构造器后属性在构造器中加载了,此时的值都应已被初始化, 而方法在构造器后创建,故final关键字无法在后加载的方法中给定初始化。 4.2 final修饰局部变量: 尤其是使用final修饰形参时,表明此形参是一个常量。当我们调用此方法时, 给常量形参赋一个实参,一旦赋值以后,就只能在方法体内使用此此形参, 但不能进行重新赋值。(例如:show()方法) static final 用来修饰属性:全局常量 (少用 通常用final)
public class FinalTest {
//默认初始化不可使用final关键字
final int WIDTH = 10; //显式初始化 使用:需要创建多个同值对象时使用
final int LEFT; //代码块中初始化 使用:需要创建多个同值对象时使用(调用另一个方法)
final int RIGHT; //构造器中初始化 使用:需要创建多个对象,每个值都不一样
// final int DOWN; //方法中初始化 报错
{
LEFT = 10;
}
public FinalTest(){
RIGHT = 10;
}
public FinalTest(int n){
RIGHT = n;
}
// public void setDown(int down){ //报错
// this.DOWN = down;
// }
public void doWidth(){
// width = 20; //width使用了关键字final,此时的 width 是一个常量,不可在被赋值
}
public void show(){
final int NUM = 10; //常量
}
public void show(final int num){
// num = 20; //编译不通过
System.out.println(num);
}
public static void main(String[] args) {
int num = 10;
num = num + 5;
FinalTest finalTest = new FinalTest();
finalTest.show(10);
}
}
final class FinalA{
}
//class B extends FinalA{ } //FinalA使用了关键字final(最后的)不能在被继承
//class C extends String{ } //String同上(理由:基本功能已完善,无需再添加功能)
class AA{
public final void show(){
}
}
class BB extends AA{
// @Override
// public void show() { //继承的父类方法中使用了关键字final 故父类方法不可被重写
// super.show();
// }
}