使用final修飾變量定義:該變量一旦被初始化以後就不容許再被修改。函數
final修飾引用類型:一旦爲其賦值,將不可以從新用來引用另外一個對象,不過能夠修改其引用對象的成員 變量。this
final修飾成員變量:其值不能改變,必須進行初始化。spa
public class YourClassNameHere { final String color; // 若是後面沒有在構造函數中初始化,則錯誤。 final String color1 = "紅色"; //正確,進行顯示初始化 String color2 = "藍色"; public YourClassNameHere(String color){ this.color = color; } public static void main(String[] args) { String color = "黃色"; YourClassNameHere test = new YourClassNameHere(color); System.out.println(test.color); String color1 = "綠色"; YourClassNameHere test1 = new YourClassNameHere(color1); System.out.println(test1.color); System.out.println(test1.color1); // test1.color = "改變顏色"; //錯誤,不能修改final變量 test1.color2 = "改變顏色2"; System.out.println(test1.color2); } }
final修飾的局部變量:code
final修飾局部變量能夠只聲明不初始化,可是被修飾的局部變量一旦被賦值後就不能進行修改了。若是在建立時沒有對其賦值,那麼在使用前仍是能夠對其賦值的。對象
final修飾的方法:blog
被修飾的方法能被該類的子類所繼承,但不能重寫,這樣保護了父類某些特殊的數據。繼承
//重寫父類方法,但沒有用final修飾 class bike { String color = "黃色"; public void getMes() { System.out.println("父類的成員變量color" + color); } } public class test extends bike { String color = "綠色"; //重寫父類方法 public void getMes() { System.out.println("子類的成員變量color" + color); } public static void main(String[] args) { test t = new test(); t.getMes(); } }
//重寫父類方法,用final修飾 class bike { String color = "黃色"; public final void getMes() { System.out.println("父類的成員變量color" + color); } } public class test extends bike { String color = "綠色"; //不能重寫父類方法 /* public void getMes() { System.out.println("子類的成員變量color" + color); } */ public static void main(String[] args) { test t = new test(); t.getMes(); } }
final修飾類:說明該類不能有子類,即該類不能被繼承,該類的成員變量在這裏不起做用。內存
final修飾類裏的方法默認被修飾爲final。get
靜態:在內存中只能有一份。class
靜態變量:只能存在一份,它屬於類,不屬於對象,不隨着對象的建立而創建副本。若是不想在建立對象的時候就須要知道一些相關信息,那麼就聲明爲static類型。
public class test { static String color = "綠色"; public test(String color) { this color += color; } public static void main(String[] args) { test t1 = new test("黃色"); test t2 = new test("紅色"); System.out.println(t1.color); // 綠色黃色紅色 System.out.println(t2.color); //綠色黃色紅色 System.out.println(color); //綠色黃色紅色 } }
靜態變量的訪問:
靜態常量:惟一的、不可變的、只存在一份的數據。系統不會分配默認值,必須初始化。
public:聲明被它修飾的成員變量爲公共類型,這個成員變量在任何包裏都能訪問,包括子類也能訪問到。
private:除了本類外任何類都不能訪問到這個成員變量,具備很好的保護性。
default:若是不給成員變量添加任何修飾符,就表示這個成員變量被修飾爲default類型。在同一個包裏的類或子類是可以訪問的,至關於public類型。可是在不一樣包裏的類或子類沒有繼承該成員變量,是訪問不到它的。
若是子類在另外一個包裏,而成員變量或方法沒有添加修飾符,子類是訪問不到的。
protected:在同一個包裏和public類型是同樣的,可訪問到。若是在不一樣包裏的protected類型的成員變量就只能經過子類來訪問。子類能夠訪問父類protected權限的成員是指集成到子類中後在子類是可見的,而非子類內部創建一個父類的實例後該實例能夠訪問自身的protected成員。
與final含義徹底相反。抽象類裏最少要含有一個抽象方法,讓子類去實現這個抽象方法