四、 關鍵字篇
Q4.1 java里面怎么定義宏? 答:java不支持宏,因為宏代換不能保證類型安全。如果你需要定義常量,可以將它定義為某個類的static final成員。參見Q4.2和Q4.6。
Q4.2 java里面沒法用const。 答:你可以用final關鍵字。例如 final int m = 9。被聲明為final的變量不能被再次賦值。唯一的例外是所謂blank final,如下例所示: public class MyClass1 { private final int a = 3; private final int b; // blank final
public MyClass1() { a = 5; // 不合法,final變量不能被再次賦值。 b = 4; // 合法,這是b第一次被賦值。 b = 6; // 不合法,b不能被再次賦值。 } } final也可以用于聲明方法或類,被聲明為final的方法或類不能被繼承。 注意const是java的保留字以備擴充。
Q4.3 java里面也不能用goto。 答:甚至在面向過程的語言中你也可以完全不用goto。請檢查你的程序流程是否合理。如果你需要從多層循環中迅速跳出,java增強了(和C++相比)break和continue的功能,支持label。 例如: outer : while( ... ) { inner : for( ... ) { ... break inner; ... ... continue outer; ... } } 和const一樣,goto也是java的保留字以備擴充。
Q4.4 java里面能不能重載操作符? 答:不能。String的+號是唯一一個內置的重載操作符。你可以通過定義接口和方法來實現類似功能。
Q4.5 我new了一個對象,但是沒法delete掉它。 答:java有自動內存回收機制,即所謂Garbarge Collection。你不需要刪除對象。你再也不用擔心指針錯誤,內存溢出了。
Q4.6 我想知道為什么main方法必須被聲明為public static?為什么在main方法中不能調用非static成員? 答:聲明為public是為了這個方法可以被外部調用,詳情見Q5.4。 static是為了將某個成員變量/方法關聯到類(class)而非實例(instance)。你不需要創建一個對象就可以直接使用這個類的static成員,因而在static成員中不能調用非static成員,因為后者是關聯到對象實例(instance)的。在A類中調用B類的static成員可以使用B.staticMember的寫法。注意一個類的static成員變量是唯一的,被所有該類對象所共享的,在多線程程序設計 中尤其要謹慎小心。類的static成員是在類第一次被JRE裝載的時候初始化的。你可以使用如下方法來使用非static成員: public class A { private void someMethod() //非static成員 {} public static void main(String args) { A a = new A(); //創建一個對象實例 a.someMethod(); //現在你可以使用非static方法了 } }
Q4.7 throw和throws有什么不同?
答:throws用于方法聲明中,聲明一個方法會拋出哪些異常。而throw是在方法體中實際執行拋出異常的動作。如果你在方法中throw一個異常,卻沒有在方法聲明中聲明之,編譯器會報錯。注意Error和RuntimeException的子類是例外,無需特別聲明。
Q4.8 什么是異常?
答:異常最早在Ada語言中引入,用于在程序中動態處理錯誤并恢復。你可以在方法中攔截底層異常并處理之,也可以拋給更高層的模塊去處理。你也可以拋出自己的異常指示發生了某些不正常情況。常見的攔截處理代碼如下: try { ......//以下是可能發生異常的代碼 ...... //異常被你或低層API拋出,執行流程中斷并轉向攔截代碼。 ...... } catch(Exception1 e) //如果Exception1是Exception2的子類并要做特別處理,應排在前面 { //發生Exception1時被該段攔截 } catch(Exception2 e) { //發生Exception2時被該段攔截 } finally //這是可選的 { //無論異常是否發生,均執行此段代碼 //即使在catch段中又向外拋出了新的exception,finally段也會得到執行。 }
|