Java面試題問答之編譯時與運行時
在開發和設計的時候,我們需要考慮編譯時,運行時以及構建時這三個概念。下面是本站小編為大家搜索整理的關於常見的Java問題與解答,歡迎參考閲讀,希望對大家有所幫助!想了解更多相關信息請持續關注我們應屆畢業生考試網!
Q.下面的代碼片段中,行A和行B所標識的代碼有什麼區別呢?
public class ConstantFolding {
static final int number1 = 5;
static final int number2 = 6;
static int number3 = 5;
static int number4= 6;
public static void main(String[ ] args) {
int product1 = number1 * number2; //line A
int product2 = number3 * number4; //line B
}
}
A.在行A的代碼中,product的值是在編譯期計算的,行B則是在運行時計算的。
如果你使用Java反編譯器(例如,jd-gui)來反編譯s文件的話,那麼你就會從下面的結果裏得到答案。
public class ConstantFolding{
static final int number1 = 5;
static final int number2 = 6;
static int number3 = 5;
static int number4 = 6;
public static void main(String[ ] args){
int product1 = 30;
int product2 = number3 * number4;
}
}
常量摺疊是一種Java編譯器使用的優化技術。由於final變量的值不會改變,因此就可以對它們優化。Java反編譯器和javap命令都是查看編譯後的代碼(例如,字節碼)的利器。
Q.你能想出除了代碼優化外,在什麼情況下,查看編譯過的代碼是很有幫助的?
裏的泛型是在編譯時構造的,可以通過查看編譯後的class文件來理解泛型,也可以通過查看它來解決泛型相關的問題。
Q.下面哪些是發生在編譯時,運行時,或者兩者都有?
A.
方法重載:這個是發生在編譯時的。方法重載也被稱為編譯時多態,因為編譯器可以根據參數的類型來選擇使用哪個方法。
public class {
public static void evaluate(String param1); // method #1
public static void evaluate(int param1); // method #2
}
如果編譯器要編譯下面的語句的話:
evaluate(“My Test Argument passed to param1”);
它會根據傳入的參數是字符串常量,生成調用#1方法的字節碼
方法覆蓋:這個是在運行時發生的。方法覆蓋被稱為運行時多態,因為在編譯期編譯器不知道並且沒法知道該去調用哪個方法。JVM會在代碼運行的時候做出決定。
public class A {
public int compute(int input) { //method #3
return 3 * input;
}
}
public class B extends A {
@Override
public int compute(int input) { //method #4
return 4 * input;
}
}
子類B中的compute(..)方法重寫了父類的compute(..)方法。如果編譯器遇到下面的代碼:
public int evaluate(A reference, int arg2) {
int result = ute(arg2);
}
編譯器是沒法知道傳入的參數reference的類型是A還是B。因此,只能夠在運行時,根據賦給輸入變量“reference”的對象的類型(例如,A或者B的實例)來決定調用方法#3還是方法#4.
泛型(又稱類型檢驗):這個是發生在編譯期的。編譯器負責檢查程序中類型的正確性,然後把使用了泛型的代碼翻譯或者重寫成可以執行在當前JVM上的非泛型代碼。這個技術被稱為“類型擦除“。換句話來説,編譯器會擦除所有在尖括號裏的類型信息,來保證和版本1.4.0或者更早版本的JRE的兼容性。
List
編譯後成為了:
List myList = new ArrayList(10);
註解(Annotation):你可以使用運行時或者編譯時的註解。
public class B extends A {
@Override
public int compute(int input){ //method #4
return 4 * input;
}
}
-
計算機三級考試《網絡技術》模擬題及答案
距離全國計算機等級考試不到一天的時間了,大家是否感受到了時間的緊迫感?別擔心,下面是本站小編為大家搜索整理了關於計算機三級考試《網絡技術》模擬題及答案,歡迎參考練習,希望對大家備考有所幫助!想了解更多相關信息請持續關注我們應屆畢業生考試網!一、選擇題(...
-
計算機三級考試嵌入式系統開發技術模擬試題
為了使廣大考生在備戰計算機等級考試時,更快的掌握相應知識點,下面是小編搜索整理的計算機三級考試嵌入式系統開發技術模擬試題,供參考練習,預祝考生們考出自己理想的成績!1.世界上第一台計算機研製成功的年代是(C)Α.1944年B.1945年C.1946年D.1947年2.十進制數235...
-
計算機三級《嵌入式系統開發》簡答題練習
嵌入式系統的核心是由一個或幾個預先編程好以用來執行少數幾項任務的微處理器或者單片機組成。下面是小編給大家整理了計算機三級《嵌入式系統開發》簡答題練習,供大家參閲。1.簡述典型嵌入式系統的組成。答:典型的嵌入式系統由2部分組成;嵌入式硬件:包括處理器、...
-
2017年9月計算機三級數據庫技術自測題
2017年9月計算機三級數據庫技術自測題大家需要多練習,下面是小編為大家收集的關於2017年9月計算機三級數據庫技術自測題,希望能夠幫到大家!1).對數據庫的結構、完整性、安全保密性、存取路徑等信息的描述是由下列()功能模塊實現的。A.數據庫定義模塊B.數據庫維護...