目錄
- 1.final修飾的類無法繼承
- 2.final修飾的方法無法覆寫
- 3.final修飾區域變數
- 4.final修飾參考
- 5.final修飾實體變數
- 6.常量
- 7.總結:
1.final修飾的類無法繼承
final關鍵字
1.final是java語言的一個關鍵字
2.final表示最終的,不可變的,
3.final可以修飾變數以及方法、還有類
4.final修飾的變數?
5.final修飾的方法?
final修飾的方法無法覆寫,無法重寫,
6.final修飾的類?
final修飾的類無法繼承,
final class A{
}
//B類繼承A類,相當于對A類的功能進行擴展,如果你不希望別人對A類進行擴展,你可以給A類驕傲final關鍵字,這樣的話A類就無法繼承了,
class B extends A{
}

如String類就是最終類

2.final修飾的方法無法覆寫
class C{
public final void dosome(){
System.out.println("c的dosome");
}
}
class D extends C{
public void dosome(){
System.out.println("d的dosome");
}
}

3.final修飾區域變數
public static void main(String[] args) {
//區域變數
int i=100;
//重新賦值
i=200;
//區域變數
final int k=100;
//重新賦值
k=300;
}
final修飾的區域變數,一旦賦值不能重新賦值,
final int m;
//第一次賦值
m=200;
//重新賦值
m=300;

重點:final修飾的變數,只能賦一次值,
4.final修飾參考
final修飾的變數,只能賦一次值,
參考是不是一個變數呢???,是的
public class FinalTest02 {
public static void main(String[] args) {
Person p1=new Person(20);
System.out.println(p1.age);
//代碼不管怎么變化,p也是一個變數(只不過這里它有一個特殊的名字,參考)
final Person p=new Person(30);
p=new Person(30);
}
}
class Person{
int age;
public Person(){}
public Person(int age){
this.age=age;
}
}

錯誤:無法為最終變數p分配值
注意:區域變數沒有初始值,
final修飾的參考:
該參考只能指向1個物件,并且它只能永遠指向該物件,無法再指向其他物件,并且在該方法執行程序中,該參考指向該物件之后,該物件不會被垃圾回收器回收,直到當前方法結束,才會釋放空間,
雖然final的參考指向A后,不能再重新指向物件B,但是物件A的資料可以被修改,

5.final修飾實體變數
final修飾的實體變數
萬變不離其宗,final修飾的變數只能賦值一次,(這句話到哪里都好使)
你是否還記得:實體變數如果沒有手動賦值的話,系統會賦默認值,
java程式設計,甩鍋甩的很好,
實體變數在什么時候賦值(初始化)
構造方法執行的程序中賦值(new的時候賦值)
終極結論:
final修飾的實體變數,系統不負責賦默認值,要求程式員必須手動賦值(定義的時候就必須賦值),
這個手動賦值,在變數后面賦值可以,在構造方法中賦值也可以
public class FinalTest03 {
public static void main(String[] args) {
}
}
class User{
//編譯器報錯
// final int age;
//可以,因為程式員手動賦值了
final double height=1.8;
//以下這一堆代碼全部聯合起來,weight變數也是賦值了1次,
//實體變數
final double weight;
//構造方法
public User(){
//只要我趕在系統賦默認值之前賦值就行,
this.weight=80;
}
}
6.常量
final修飾的實體變數
final修飾的實體變數一般添加static修飾
終極修飾:
static final聯合修飾的變數稱為常量
常量名建議全部大寫,每個單詞之間采用下劃線連接
常量:實際上常量和靜態變數一樣,區別在于:常量的值不能改變,常他們都是存盤在方法區,并且都是在類附加時初始化
常量無法重新賦值
常量一般是公開的,是public的
public class FinalTest04 {
public static void main(String[] args) {
}
}
class Chinese{
//身份證,每個人都不一樣,物件級別的
String idCard;
//姓名,物件不同姓名不一樣
String name;
//國家的值就是一個固定值,"中國"
//既然這里的值不會改變,還有必要宣告為實體變數嗎
//實體變數在堆中,一個物件一份,100個物件100份
//實體變數既然使用final修飾了,說明該實體變數不會隨著物件的變化而變化,
//該實體變數前面應該添加:static關鍵字,變為靜態的,存盤在方法區,
// static final String country="中國";
static final String COUNTRY="中國";
//i永遠都是10,創建100個物件,i也是10
//i是10是永遠不會變化的,既然這樣,沒必要宣告為實體變數,最好是靜態的,節省記憶體空間,
}
class MyMath{
public static final double PI=3.1415926;
}
7.總結:
1、final關鍵字
- 1.1、final修飾的類無法繼承,
- 1.2、final修飾的方法無法覆寫,
- 1.3、final修飾的變數只能賦一次值,
- 1.4、final修飾的參考一旦指向某個物件,則不能再重新指向其它物件,但該參考
指向的物件內部的資料是可以修改的, - 1.5、final修飾的實體變數必須手動初始化,不能采用系統默認值,
- 1.6、final修飾的實體變數一般和static聯合使用,稱為常量,
public static final double PI = 3.1415926;
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/260397.html
標籤:java
下一篇:Point2D類,JavaSE
