筆記
91、包命名:小寫字母,使用順序反過來的網域名稱。
92、包內的類需聲明為public,否則不屬於此包的方法無法使用它。
93、採用JAR檔案方便維護和安裝,一個JAR檔案往往包含多個包,Sun J2SE所提供的標準類放在rt.jar中
。
94、J2SE提供工具軟體jar來產生JAR檔案:
jar cvf <jar file> <class file>
jar cmvf <manifest> <jar file> <class file> 用m來包含自訂的說明(manifest)檔案
Manifest.mf。
95、將建立的包輸入進來:用import com.mycompany.shape.*;非import com.mycompany.shp;另外還需將
此JAR檔案包含在類路徑中,在Windows中需要設定:SET CLASSPATH=.;shapr.jar。或者可以使用:java
-classpath <class path> <class file>
96、由於和對象相關的變數屬於參考型別,使用obj1=obj2;obj1隻是得到一份obj2應用的副本,而不是
obj2對象本身。
97、使用clone()來複製一個對象,clone()從Object類繼承。obj1=obj2.clone();obj2必須是可複製的
。
98、為了使一個使用者自訂的類對象可被複製,必須使用介面Cloneable,並聲明一個public方法clone()
來執行複製工作。
99、若要完成深度複製(deep copy)(包含所參考的對象和其相關的對象),則需根據對象間的階層關係
一層層地複製下去。
100、Reflection又稱introspection,因為它允許執行中地Java程式來進行自我檢查,可以得到一個對象
所屬類定義的成員及相關的資料,這是Java特有的功能。
101、Reflection提高像功能指標一樣的功能,可在程式執行時才動態提高所以執行的類對象方法名稱與
所要輸入的參數。
102、首先得到一個Class對象,有兩種方法
由既存類對象,使用getClass()得到一個類對象,如obj.getClass();
使用Class.forName(String className)
103、其次,使用Class提供的方法來得到該類的相關資料
String getName(); 用來得到該類的名稱
Method[] getDeclaredMethods(); 得到所有在該類內所聲明的方法名稱
Method[] getMethods(); 得到所有在該類的方法名稱,包含由父類繼承的方法
Method getMethod(String methodName, Class[] parameterTypes); 得到一個Method對象
104、最後,使用Method所提供的方法來執行所要執行的方法
Object invoke(Object methodObj,Object[] parameters); 發生錯誤時,產生
InvocatioTargetException
105、利用Reflection功能來執行類內的方法時,方法的輸入資料類型是較特殊的地方,文法為:
typeName.class,如int[]為int[].class,int為int.class,String為String.class。輸入的參數必須為對
象(Object)
106、為了知道一個Java程式的執行效率,以提供改進程式的方法,Java提供了Java profiling的功能。
java -Xrunhprof:help 用於查詢Java profiling可供使用的選項。如,瞭解程式中各種方法執行時間的
比例,可使用java -Xrunhprof:cpu=times className。會產生一個java.hprof.txt檔案。
107、Throwable是所有Java程式中錯誤處理的父類,有兩種資類:Error和Exception。
108、Error:表示由JVM所偵測到的無法預期的錯誤,由於這是屬於JVM層次的嚴重錯誤,導致JVM無法繼
續執行,因此,這是不可捕捉到的,無法採取任何恢複的操作,頂多隻能顯示錯誤資訊。
109、Exception:表示可恢複的例外,這是可捕捉到的,因此,當例外發生時,可採取一些恢複的行動。
110、例外的處理方式之一:如果要忽略程式中可能發生的例外,而交由其他程式處理,可將這些例外直
接返回所調用的程式,而所調用的程式必須處理這些例外或是將它們再往上返回所調用的程式。
111、例外的處理方式之二:如果要再程式中直接處理這些例外,則可使用try...catch(...finally)的
方式。
112、finally可以省略。如果使用,finally內的程式一定會被執行,一般用來進行最後的清理工作,如
關閉所開啟的系統資源。
113、Throwable所提供的方法:
String toString():代表該Throwable對象的字串標記法。
String getMessage():返回和該對象相關的錯誤資訊。
void printStackTrace():將例外產生所發生的途徑顯示出來。
void printStackTrace(PrintStream out):輸出到一個PrintStream的資料流中,藉此可將資訊
寫到一個檔案。
void printStackTrace(PrintWriter out):輸出到一個PrintWriter的資料流中。
114、try...catch也是一種區段式的構架,對子變數的可見範圍也必須遵循同樣的規則,有時為了讓
catch(或finally)區段能使用try區段內的變數,需要將變數聲明再try...catch的區段外。
115、當程式需要捕捉數個不同的例外時,需要特別注意這些例外的順序。應該按照類之間的階層關係放
置,越是基本的類越需放在後面的catch()區段。
116、一個例外類至少需要包含一個預設的建構函式(用來顯示預設的資訊)及一個以String對象為參數
的建構函式(用來顯示使用者提供的自訂資訊)。
117、C/C++只能提供位元組流,在Java中,還有位元組(byte)流和字元(character)流之分。
118、位元組流:OutputStream提供的方法:
void write(int b):寫入一個位元組的資料
void write(byte[] buffer):將數組buffer的資料寫入流
void write(byte[] buffer,int offset,int len):從buffer[offset]開始,寫入len個位元組的數
據
void flush():強制將buffer內的資料寫入流
void close():關閉流
119、InputStream提供的方法:
int read():讀出一個位元組的資料,如果已達檔案的末端,傳回值為-1
int read(byte[] buffer):讀出buffer大小的資料,傳回值為實際所讀出的位元組數
int read(byte[] buffer,int offset,int len)
int available():返迴流內可供讀取的位元組數目
long skip(long n):跳過n個位元組的資料,傳回值為實際所跳過的資料數
void close():關閉流
120、字元流。Reader、Writer類中提供的方法與位元組流相同,只是參數內的byte[]需改為char[]