[Java] 4.1. 類別、物件與屬性

以物件為中心思考,看什麼東西都以一個物件的角色去看。

 

image/svg+xml但變數讓程式變得複雜 在只有變數的情況下, 記錄⼈員資料的情況! 若將⼈員物件導向化, 讓⼀個⼈員就是⼀個物件⼜會是如何? 1 步, class 定義⼈員類別 4.1. 類別、物件與屬性 Class & Object & Attribute class Main { public static void main( String [] args){ String id = " K000111222 " ; String name = " 王⼩明 " ; int age = 20 ; } } class Main { public static void main( String [] args){ String id1 = "K000111222" ; String name1 = " 王⼩明 " ; int age1 = 20 ; String id2 = "Y333444555" ; String name2 = " 李⼩路 " ; int age2 = 25 ; String id3 = "L666777888" ; String name3 = " 曾⼩語 " ; int age3 = 23 ; } } class Person {} class Person { String id ; String name ; int age ; } class Main { public static void main( String [] args){ System.out.println( new Person () ); System.out.println( new Person () ); System.out.println( new Person () ); } } 執⾏結果 Person@c17164 Person@1fb8ee3 Person@61de33 class Main { public static void main( String [] args){ Person p1 = new Person (); p1.id = " K000111222 " ; p1 . name = " 王⼩明 " ; p1 . age = 20 ; System.out.println( p1.id ); System.out.println( p1.name ); System.out.println( p1.age ); Person p2 = new Person (); p2.id = " Y333444555 " ; p2.name = " 李⼩路 " ; p2.age = 25 ; Person p3 = new Person (); p3.id = " L666777888 " ; p3.name = " 曾⼩語 " ; p3.age = 23 ; } } class Person {} class Main{ public static void main( String [] args){ Person.id = "K000111222" ; } } 編譯時發⽣錯誤 Main.java:4: error: non-static variable id cannot be referenced from a static context Person.id = "K000111222"; ^ 1 error class Main{ public static void main( String [] args){ Person p ; System.out.println( p ); } } 編譯時發⽣錯誤 Main.java:6: error: variable p might not have been initialized System.out.println( p ); ^ 1 error class Main{ public static void main( String [] args){ Person p1 = null ; System.out.println( p1 ); } } 執⾏結果 null J4_1_1 – Main.java 1. 1 個⼈ 3 個變數。 J4_1_2 – Main.java 姓名:王⼩明 ⾝份證號: K000111222 年齡: 20 1. 每個資訊都必須使⽤ 1 個變數來保留資 訊,在此⼈員有 3 個資訊,此時就必⽤使⽤ 3 變數保存此⼈員的資訊。 ⾝份證號: K000111222 姓名:王⼩明 年齡: 20 年齡: 25 ⾝份證號: Y333444555 姓名:李⼩路 ⾝份證號: L666777888 姓名:曾⼩語 年齡: 23 2. 2 個⼈共 6 個變數。 3. 3 個⼈就 9 個變數。那 …100 個⼈呢?!不就 300 個變數了嗎?且變 數的名稱⼜是不可重複的,光是命名就是⼀件⿇煩,有沒有更好的⽅法 讓保存⼈員資訊的作業可更輕鬆簡單呢?除了變數以外! 1 個⼈員, 1 個物件 20 王⼩明 K000111222 你的年齡 ? 你的名字 ? 你的⾝份證字號 ? 年齡: 20 ⾝份證號: K000111222 姓名:王⼩明 想像⼀下,以對話式的⽅式問向⼈員問資訊的情況 ~ J4_1_3 – Person.java 1. class 關鍵字就是類別的意思,我們將使⽤ class 定義⼈員類別。 2. 接著即是類別的名稱- Person ,表⽰在此定義 ⼀個⼈員類別,⽽⼈員翻譯成英⽂即是 Person 3. 這個⼤括號( { } )內裝的是⼈員類 別( Person )的內容,在⼤括號後,可 以描述有什麼東⻄是⼈員類別可以擁有 的,⽬前無任何內容於⼤括號中。 4. 定義⼈員類別就像您在紙上設 計⼀個⼈員⼀樣,⽤來描述⼈員 是什麼東⻄,應該長什麼樣⼦。 現在,我們有了⼀個 ⼈員類別 ,但類別僅僅只是描述⽽已;就好像我們將想 要的東⻄先在紙上畫下來⼀樣,只是 Java 是⽤ “class” 這個關鍵字來進⾏描 述的。 J4_1_4 – Person.java 1. 這是原先定義的⼈員類別( Person )。 2. 在⼈員類別的⼤括號( { } )中,直接宣告希望 在物件上使⽤的變數即可;對應⾄⼈員的屬性,有 ⾝分證字號( id )、姓名( name )與年齡 age )。⽽屬性即是宣告在類別中的變數,只是 屬性這個名詞是⽤來描述物件所應有的資訊⽽已。 3. 屬性如同變數⼀般, 每個屬性前⾯皆有型別。 再⼀次的提醒⼀下,類別的功能就是定義,就像我們對 什麼是⼈員 下定義是 ⼀樣的道理,即便其中多了屬性。 J4_1_4 – Main.java 1. new 關鍵字的作⽤, 就是⽤來建立物件的。 2. 沒錯,接在 new 後⾯的這就是⼈員類別 Person )的名稱,後⾯記得加上⼩括號( () )。 3. 在此使⽤ 3 new 建立 3 個⼈員物件,⽽ 3 個⼈員物 件都是各別獨立的,為了證明此為 3 個獨位的物件,此 時可透過列印物件的⽅式將物件列印出來,其中都會 包含它們各⾃的編碼(雜湊碼)。絕對不會重複。 透過 new 建立出來的物件都是各⾃獨立的,那到底可以建立多少個物件呢 ? 案是無限個,想建3個物件,就必須寫3次的 new 物件。 J4_1_5 – Main.java 1. 為了可以再次使⽤建立的⼈員物件( Person ),必須先準備 p1 變數存放⼈員物件,⽽變數的型別即指定為⼈員類別。 2. 建立⼀個⼈員物件, 並存放在 p1 變數中。 3. p1 變數取出⼈員物件,並透過句點( . )的⽅式存取⾝ 份證字號屬性( id ),在透過指派運算式( = )指定此⼈員的 名稱為 “K000111222” 。⽽句點可解釋為 的意思。 4. 依序透過句點( . )指定此⼈員物件的 姓名( name )與年齡( age )屬性的值。 6. 若要表⽰不同的⼈員,則必須透過 new 建立獨 立的物件,在透過屬性存放⼈員的資訊。在此另外 建立 2 個⼈員物件,以表⽰另外 2 個獨立的⼈員。 5. 當然,也可透過句點的⽅式, 取出每個屬性中存放的值。 new Person () new Person () new Person () 類別即是⽤來定義物件的 ⽽物件是透過 new+ 類別所打造的實體 J4_1_6 – Main.java 1. 這是個錯誤的⽰範,不可由⼈員類別( Person )直接存取屬性, 因為屬性是依附在物件上的,必須先使⽤ new 建立物件後才可使⽤。 J4_1_7 – Main.java 2. p 變數要⼀個根本不存在的⼈員物件。編譯會告訴我們 p 變數 中必須先初使化;也就是必須先放入⼈員( Person )物件,之後才 可向 p 變數索取物件,否則發⽣編譯失敗的情況。 1. 只宣告了⼀個存放⼈員( Person )物件的 變數 p ,於此同時並未存入⼀個⼈員物件。 J4_1_8 – Main.java 1. 宣告⼀個存放⼈員物件( Person )的變數 p1 2. 若要明確的表⽰ p1 變數中沒有任何的⼈員物件, 這時可存入 null 來表⽰ p1 變數中沒有表存⼈員物件, null 即有 空的,無任何東⻄ 的意思存在。 3. 透過 p1 取得的資料會是 null ,讓將此 null 輸出,這時畫⾯上會顯⽰ null 字樣。 2 步,屬性定義⼈員的資訊 3 步, new 出⼈員物件 第4步,句點( . )存取各⼈員的資訊 再注意,不可向變數索取不存在的⼈員物件 null ,明確的表⽰這裡沒有⼈員物件 1 2 3 1 2 3 到底什麼是⼈員類別,什麼是⼈員物件? 注意,禁⽌透過⼈員類別存取屬性

留言