package package ppt Test java import java util

  • Slides: 32
Download presentation
package: 程式庫單元 <<package. ppt>>

package: 程式庫單元 <<package. ppt>>

// Test. java import java. util. *; public class Test { public static void

// Test. java import java. util. *; public class Test { public static void main(String[] args) { Array. List a = new Array. List(); } } 3

Import (匯入) 程式庫 import java. util. *; 取用 package,在此即將 Java 標準公用程式庫整 個引入。 import java.

Import (匯入) 程式庫 import java. util. *; 取用 package,在此即將 Java 標準公用程式庫整 個引入。 import java. util. Array. List; 引入單一 class – Array. List。 4

. java 檔的邏輯意義 package public class. java file Non-public class 7

. java 檔的邏輯意義 package public class. java file Non-public class 7

// mypackage: Vector. java // Creating a package mypackage; public class Stack { public

// mypackage: Vector. java // Creating a package mypackage; public class Stack { public Stack(){ System. out. println(“mypackage. Stack"); } } package mypackage; 便會讓此編譯單元成為 mypackage 程式庫中的一部份。 8

此 Vector class 的引用方式: 完整名稱 mypackage. Stack v = new mypackage. Stack(); 使用關鍵字 import

此 Vector class 的引用方式: 完整名稱 mypackage. Stack v = new mypackage. Stack(); 使用關鍵字 import mypackage. *; //. . . Stack v = new Stack(); 9

// com: uu: mypackage: Vector. java package com. uu. mypackage; public class Vector {

// com: uu: mypackage: Vector. java package com. uu. mypackage; public class Vector { public Vector(){ System. out. println(“mypackage. Vector"); } } // com: uu: mypackage: List. java package com. uu. mypackage; public class List { public List() { System. out. println(“mypackag e. List"); } } 12

上述的 Vector. java 和 List. java 編譯後的. class 檔置 於下列目錄: C: Java. Codecomuumypackage CLASSPATH

上述的 Vector. java 和 List. java 編譯後的. class 檔置 於下列目錄: C: Java. Codecomuumypackage CLASSPATH 環境變數設定如下: CLASSPATH=. ; C: Java. Code; C: j 2 sdk 1. 4. 2jrelibrt. jar 14

妥善設定 CLASSPATH 之後,以下程式檔可置於任何 目錄之下而被編譯成功: // Lib. Test. java // Uses the library. import com.

妥善設定 CLASSPATH 之後,以下程式檔可置於任何 目錄之下而被編譯成功: // Lib. Test. java // Uses the library. import com. uu. mypackage. *; public class Lib. Test { public static void main(String[] args) { Vector v = new Vector(); List l = new List(); } } 15

衝突 import com. uu. mypackage. *; import java. util. *; 由於 java. util. *

衝突 import com. uu. mypackage. *; import java. util. *; 由於 java. util. * 也含有 Vector class,如果你現 在嘗試產生一個 Vector,便會引發衝突,編譯器不 知你要產生那個 Vector: Vector v = new Vector(); 如欲使用的是標準的 Java Vector,要指出其名稱, 如下: java. util. Vector v = new java. util. Vector(); 16

類別的可見度圖例 Mytools. txt 套件 套件外可看見 class Text. Component public class Text. Editor 套件外可看見 public

類別的可見度圖例 Mytools. txt 套件 套件外可看見 class Text. Component public class Text. Editor 套件外可看見 public class Text. Area extends Text. Component 19

Field 和 Method 的可見度 Java 存取權限飾詞 public、protected、private 應 該置於 class 內的每個 member 定義之前,無論此 member

Field 和 Method 的可見度 Java 存取權限飾詞 public、protected、private 應 該置於 class 內的每個 member 定義之前,無論此 member 是 field 或是 method。 private 預設 (無修飾字) public protected 20

// Ice. Cream. java // Demonstrates “private” keyword. class Sundae { private Sundae() {}

// Ice. Cream. java // Demonstrates “private” keyword. class Sundae { private Sundae() {} static Sundae make. Sundae() { return new Sundae(); } } public class Ice. Cream { public static void main (String[] args) { Sundae error = new Sundae(); // compile error! Sundae right = Sundae. make. Sundae(); } } 22

friendly (無修飾字) 同一 package 內的其他所有 classes,都可以存 取 friendly member,但對於 package 以外的 classes 則形同 private。

friendly (無修飾字) 同一 package 內的其他所有 classes,都可以存 取 friendly member,但對於 package 以外的 classes 則形同 private。 friendly 存取權限又稱為 package 存取權限。 23

default package // c 05: Pie. java public class Pie { void f() {

default package // c 05: Pie. java public class Pie { void f() { System. out. println("Pie. f()"); } } // c 05: Cake. java class Cake { public static void main(String[] args) { Pie x = new Pie(); x. f(); } } 這兩個檔案在同一目錄,Java 會自動將這兩個檔案視為隸屬於該 目錄的所謂 default package 中,因此對同目錄下的所有檔案來 說,它們都是 friendly。 24

//: c 05: dessert: Cookie. java package c 05. dessert; public class Cookie {

//: c 05: dessert: Cookie. java package c 05. dessert; public class Cookie { void bite() { System. out. println("bite"); } } ///: ~ //: c 05: Dinner. java // Uses the library. import c 05. dessert. *; public class Dinner { public static void main(String[] args) { Cookie x = new Cookie(); x. bite(); // compile error! } } ///: ~ 25

檔案結構如下圖所示: 編譯方式 c: Java. Testjavac c 05Dinner. java 執行方式 c: Java. Testjava -cp. ;

檔案結構如下圖所示: 編譯方式 c: Java. Testjavac c 05Dinner. java 執行方式 c: Java. Testjava -cp. ; c 05 Dinner 設定 classpath 26

//: c 05: dessert: Cookie. java package c 05. dessert; public class Cookie {

//: c 05: dessert: Cookie. java package c 05. dessert; public class Cookie { void bite() { System. out. println("bite"); } } //: c 05: Chocolate. Chip. java import c 05. dessert. *; public class Chocolate. Chip extends Cookie { public static void main(String[] args) { Chocolate. Chip x = new Chocolate. Chip(); x. bite(); // compile error! } } 29

//: c 05: dessert: Cookie. java package c 05. dessert; public class Cookie {

//: c 05: dessert: Cookie. java package c 05. dessert; public class Cookie { protected void bite() { System. out. println("bite"); } } //: c 05: Chocolate. Chip. java import c 05. dessert. *; public class Chocolate. Chip extends Cookie { public static void main(String[] args) { Chocolate. Chip x = new Chocolate. Chip(); x. bite(); // It’s right! } } 30

//: c 05: Chocolate. Chip. java import c 05. dessert. *; public class Chocolate.

//: c 05: Chocolate. Chip. java import c 05. dessert. *; public class Chocolate. Chip extends Cookie { public static void main(String[] args) { Chocolate. Chip x = new Chocolate. Chip(); x. bite(); // It’s right! } } //: c 05: Dinner 2. java public class Dinner 2 { public static void main(String[] args) { Chocolate. Chip x = new Chocolate. Chip(); x. bite(); // compile error! } } 31

可見度總結 Mytools. txt 套件 public class A public class B private char[] text; 彼此可看見

可見度總結 Mytools. txt 套件 public class A public class B private char[] text; 彼此可看見 int linecount; // 預設的可見度 protected void format. Text(); class D 彼此可看見 public void get. Text(); 套件外可看見 public class C extends A 32