[Java] 8.1. 套件

套件,分類你的類別。

 

image/svg+xml8.1. 套件 – package package personMgt ; class Person { String id; String name; String gender; int age; } package personMgt ; class Person { String id; String name; String gender; int age; } 編譯時的 javac 指令: c:\> javac -d . Person.java 編譯後的結果: package personMgt ; class Person { String id; String name; String gender; int age; public static void main ( String [] args){ Person p = new Person(); p.id= "k123456789" ; p.name= "Jack" ; p.gender= " 男⽣ " ; p.age= 20 ; System.out.println(p.id); System.out.println(p.name); System.out.println(p.gender); System.out.println(p.age); } } 執⾏時的 javac 指令: c:\> java personMgt.Person package personMgt ; class Person { String id; String name; String gender; int age; } package personMgt ; class Main { public static void main ( String [] args){ Person p = new Person(); p.id= "k123456789" ; p.name= "Jack" ; p.gender= " 男⽣ " ; p.age= 20 ; System.out.println(p.id); System.out.println(p.name); System.out.println(p.gender); System.out.println(p.age); } } package personMgt ; class Person { String id; String name; String gender; int age; } package others ; class Main { public static void main ( String [] args){ personMgt.Person p; } } 編譯 Main 類別時發⽣錯誤: Main.java:5: error: package personMgt does not exist personMgt.Person p; ^ 1 error class Main { public static void main( String [] args){ Person p ; } } 編譯時發⽣錯誤 tempCodeRunnerFile.java:4: error: cannot access Person Person p; ^ bad source file: ./Person.java file does not contain class Person Please remove or make sure it appears in the correct subdirectory of the sourcepath. 1 error 1. 分類⾄⼈員管理套件( personMgt )下的⼈員類別( Person )。 J8_1_1 – Person.java Person.class 1. 套件的功能就像是⼀個檔案櫃,可以將類別裝起來, 並可進⼀步的依照不同的檔案櫃進⾏類別的分類。 1. java 原始檔中,第 1 ⾏程式使⽤ package 關鍵字定 2. 這是我們要建立的套件名稱- ⼈員管理套件( personMgt )。 3. 這是⼈員類別( Person ),此時它會被分類⾄⼈員管理套件之下。 4. 如此就完成了將類別以套件的⽅式進⾏分類的功能。 Person.class package 除了必須於 java 原始檔中的第 1 程式出現外,⼀個 java 原始檔⾄多 只能有 1 package ,若有多個 package 則會發⽣編譯錯誤。 J8_1_1 – Person.java 3. -d 參數是⽤來指定編譯後要將類別檔 放在哪個特定⽬錄下⽤的。 2. 使⽤ javac java 檔進⾏編譯。 4. “.” 代表⽬前所在的位置, 其是 -d 參數可接再的值。 5. 當使⽤ “-d .” 的參數時, javac 會在 ⽬前的路徑下建立這個類別的套件路徑, 6. ⼈員管理套件 personMgt )是以 ⽬錄的⽅式呈現。 7. ⽽⼈員類別檔 Person )則會被放 ⾄套件的⽬錄下。 C:\ personMgt Person.class J8_1_2 – Person.java 1. ⼈員類別( Person )包含在⼈員管理套件( personMgt )下。 2. 其中的主程式( main() ⽅法),包含在⼈員類別中。 3. 這時,使⽤ java 執⾏⼈員類別的主程式- main() 時,則必須先指出套件的路徑- personMgt (這時 java 會去找相對應的⽬錄 -personMgt ),然後以句點 . )的⽅式連結這個套件下的⼈員類別( Person ), 如此才能成功執⾏其中的主程式。 J8_1_3 – Person.java J8_1_3 – Main.java Main.class Person.class ⼈員管理套件 personMgt 1. 這是⼈員類別( Person )。 3. 不論是⼈員類別或是主類別,其皆位於同⼀ 個套件中-⼈員管理套件( personMgt )。 2. 這是主類別( Main )。 4. 同⼀個套件的類別可以相互使 ⽤。⽽且不⽤強調套件路徑(後⾯ 會加以說明什麼是套件路徑),因 為它們都在同⼀個套件中。 5. 同⼀個套件的類別可以相互使⽤。 J8_1_4 – Person.java Person.class Main.class ⼈員管理套件 personMgt 其他套件 others 1. ⼈員類別( Person )位於⼈員管理套件( personMgt )中。 4. 這時其他套件的主類別,預 存取另⼀個⼈員管理套件中的⼈ 員類別不同套件的類別 3. 這是主類別( Main )位於其他套件( others )中。 2. 不同的套件不能 直接相互存取。 5. 這時在編譯時會發⽣錯誤,錯誤指出無法存取從外部存取⼈員 管理套件( personMgt )下的⼈員類別( Person ),這是不可⾏ 的,因為不同的套件預設是不能互相存取其中的類別的。 J8_1_4 – Main.java C:\ personMg t Main.java Person.class Person.class J8_1_5 – Main.java 1. 偷偷的將編譯好的⼈員類別移出⼈員管 理套件外,讓它不位於⼈員管理套件的⽬錄 下( personMgt ),並置放於與 Main 類別 同⼀個 C:\ ⽬錄下。 2. 編譯時會發⽣錯誤,告訴您⼈員類別( Person )必須位於正確的類別路徑(指套件路 徑)才能夠存取,這說明了,若類別是位於某套件的類別,則必須建立套件的⽬錄,並將類別 存於其中,此類別才可使⽤,從另⼀個⾓度來看,這表⽰我們使⽤的是 套件下的某⼀類別 套件將類別分類了 Package ,將⼈員類別分類⾄⼈員管理套件中 ⽬錄,即是⼈員管理套件編譯後呈現的⽅式 Mac Linux ,可公將 C:\ 改成 ~/ 在此帳號的⽬錄下執⾏這些程式即可。 句點( . ),指出套件下的主程式類別 相同套件的類別,可相互存取 注意,禁⽌擅⾃移除套件⽬錄 不同套件類別,禁⽌相互存取 1 1 1 1

留言