[Java] 4.8. 確定化

確定化,確定了就不能在更改。

 

image/svg+xml4.8. 確定化 - fi nal class Person { String id, name; int age; String planet ; } class Main{ public static void main( String [] args){ Person p1 = new Person (); p1 . planet = " 火星 " ; p1 . planet = " ⽔星 " ; p1 . planet = " ⾦星 " ; } } class Person { String id, name; int age; final String planet = " 地球 " ; } class Main{ public static void main( String [] args){ Person p1 = new Person (); System.out.println( p1 . planet ); p1 . planet = " 火星 " ; } } 執⾏結果 Main.java:6: error: cannot assign a value to final variable planet p1.planet = " 火星 "; ^ 1 error class Person { String id, name; int age; final String planet ; Person (){ planet = " 地球 " ; } } class Main{ public static void main( String [] args){ Person p1 = new Person (); System.out.println( p1 . planet ); } } class Person { String id, name; int age; final static String planet = " 地球 " ; } class Main{ public static void main( String [] args){ System.out.println( Person . planet ); Person p1 = new Person (); System.out.println( p1 . planet ); } } J4_8_1 – Person.java 1. 這是⼈員類別( Person )。 J4_8_2 – Person.java J4_8_1 – Main.java 1. 這是⼈員類別( Person )。 . 在這裡居住星球屬性( planet )暫時沒有使⽤ static 關鍵字進⾏靜態化。 3. 建立⼀個⼈員物件。 4. 雖然地球是唯⼀⼈類能⽣存的星球,但居住星球屬性確可以⼀再的經由指派 運算式( = )來改變居住星球屬性中的資料,怎麼辦呢?若⽬前⼈類居住的星球僅 限地球,要如何才能限制居住星球屬性不會被變更,這樣才能夠表⽰每個⼈員⽣ 存的星球是沒有選擇的,只能⽣存在地球上。 J4_8_2 – Main.java 3. 因為居住星球屬性( planet )被確定化了,在宣 告居住星球屬性的同時,透過指派運算式( = )給予 資料時,這個資料將會被保留,並且無法在變更。 2. 使⽤ final 將居住星球屬性 planet )確定化,這表⽰當在物 件建立完成之前必須給予資料,且這 個資料是不可再⼀次的變更的。 4. 在此建立⼈員物件,在讀取確定化後的星球屬性時,還是 可以取得其中的資料,最後會得到 地球 這個資料。 5. 若您嘗試著變更居住星球屬性中 的資料時,編譯器會告訴您不可以指派新 的值(資料)給確定化( final )的屬 性,因為確定化的屬性是不可變更的,這 也滿⾜了⼈員只能居住在地球的需求。 J4_8_3 – Person.java J4_8_3 – Main.java 2. 此確定化( final )的居住星球屬性( plant 並在宣告變數的同時,使⽤指派運算式指定資料。 1. 這是⼈員類別( Person )。 3. 這是建構式,與類別同名,這即是建立物件時, new 關鍵字後 ⽅加上的式⼦-建構式;建構式是⽤來建立物件的式⼦。在 物件 出⽣的過程 章節中會詳細說明建構式的⽤法。 4. ⽽另⼀個設定確定化屬性的⽅式,就是使⽤建構式。因為建 構式是⽤來建立物件的,因此在物件未建立完成時,可⽤以設 定確定化屬性中的值。在此將居住星球屬性設定為地球。 5. 最後,取出放在居住星球屬性中 的資料,您會得到 地球 這個值。 其實還有另⼀個⽅法可以設定確定化後的屬性,那就是使⽤初始化區塊,關於 這部份的詳細內容,也將會留在 物件出⽣的過程 中為您說明。 J4_8_4 – Person.java J4_8_4 – Main.java 2. final static 關鍵字可以同時⽤來修飾屬性,當然這個屬性將 會變成確定化且靜態化的狀態。 final static 同時使⽤時沒有所 1. 這是⼈員類別( Person )。 3. 特別的是, final static ⼀同使⽤時,您必須同時將初始資 料給予這個屬性中。若不這麼作的話,編譯器會發⽣錯誤;換句話 說您不能使⽤建構式來初始化 final static 共同修飾的屬性。 4. 因為靜態的原故,因此不論是透過類別或是物件, 皆可以存取居住星球屬性( planet )。 final 也可以⽤在⽅法,以確保⽅法不會被繼承的類別改寫。 可否限制⼈類居住的星球,僅限於地球? fi nal ,確保居住星球屬性是不會被變更 建構式,也可為 fi nal 屬性進⾏初始化 fi nal static ,可同時於屬性上使⽤, 但必須在宣告屬性的同時就給予初始值

留言