JAVA final关键字

概念:final本意为"最终的、不可改变的",可以修饰类、成员方法以及成员变量。

使用方式
  • final关键字修饰类体现在该类不能被继承。
    - 主要用于防止滥用继承,如:java.lang.String类等。
    如:

    public final class FinalClass {

    public final void show() {
    System.out.println("FinalClass类中的show方法!");
    }

    }
    public class SubFinalClass extends FinalClass {} 运行提示:java: 无法从最终src.FinalClass进行继承
  • final关键字修饰成员方法体现在该方法不能被重写但可以被继承。
    - 主要用于防止不经意间造成重写,如:java.text.Dateformat类中format方法等。
    如:
    public class FinalClass {

    public final void show() {
    System.out.println("FinalClass类中的show方法!");
    }
    }
    public class SubFinalClass extends FinalClass {

    @Override
    public void show() {
    super.show();
    }} //SubFinalClass 继承了FinalClass,重写了show方法,运行提示:SubFinalClass中的show()无法覆盖src.FinalClass中的show() 被覆盖的方法为final    
public class SubFinalClass extends FinalClass {

public static void main(String[] args) {
SubFinalClass sfc = new SubFinalClass();
sfc.show();
}
} //SubFinalClass 继承了FinalClass的show方法,运行正常
  • final关键字修饰成员变量体现在该变量必须初始化且不能改变。
    - 主要用于防止不经意间造成改变,如:java.lang.Thread类中MAX_PRIORITY等。

code:

public class FinalMemberTest {
private final int cnt; // 显式初始化
public static void main(String[] args) {

// 声明FinalMemberTest类型的引用指向该类的对象
FinalMemberTest fmt = new FinalMemberTest();
// 打印成员变量的数值
System.out.println("fmt.cnt = " + fmt.cnt);
}
} //运行提示:java: 变量 cnt 未在默认构造器中初始化,被final修饰的变量必须初始化,改成private final int cnt==1即可正常运行,或者在构造块或构造方法中赋值,如:
public class FinalMemberTest {

private final int cnt;

{
cnt = 2; // 构造块中进行初始化
}

public static void main(String[] args) {

// 声明FinalMemberTest类型的引用指向该类的对象
FinalMemberTest fmt = new FinalMemberTest();
// 打印成员变量的数值
System.out.println("fmt.cnt = " + fmt.cnt);
}
}
--------------------------构造方法中初始化-------------------------
public class FinalMemberTest {
private final int cnt;

public FinalMemberTest() {
cnt = 3; // 构造方法体中进行初始化
}

public static void main(String[] args) {

// 声明FinalMemberTest类型的引用指向该类的对象
FinalMemberTest fmt = new FinalMemberTest();
// 打印成员变量的数值
System.out.println("fmt.cnt = " + fmt.cnt);
}
} 

---------------------------------初始化后不能进行修改,修改报错,如下code------------------------ 

public class FinalMemberTest {
private final int cnt=1;

public FinalMemberTest() {
cnt = 3; // 构造方法体中进行初始化
}

public static void main(String[] args) {

// 声明FinalMemberTest类型的引用指向该类的对象
FinalMemberTest fmt = new FinalMemberTest();
// 打印成员变量的数值
System.out.println("fmt.cnt = " + fmt.cnt);
}
} //报错信息:java: 无法为最终变量cnt分配值,原因:因为初始化赋值1,构造方法为3
常量的概念

• 在以后的开发中很少单独使用final关键字来修饰成员变量,通常使用 public static final关键字共同修饰成员变量来表达常量的含义,常量的命 名规范要求是所有字母都要大写,不同的单词之间采用下划线连。

• public static final double PI = 3.14;

原文地址:https://www.cnblogs.com/goldenwangyi/p/15072032.html