1. 程式人生 > ># 2018秋招RT動力java筆試題總結

# 2018秋招RT動力java筆試題總結

1、請判斷下面程式的執行結果 public static void main(String[] args) { for(int i = 0;i<3;i++) { System.out.println(i); } System.out.println(i); } 答案:編譯時錯誤 解析:i是for迴圈中的區域性變數,在迴圈外檢測不到此變數

2、請判斷下面程式執行時會出現什麼型別的異常 public static void main(String[] args) { String s = null; s.concat(“abc”); //執行異常:java.lang.NullPointerException } 答案:NullPointerException 解析:String的初始化問題和string的concat連線字串的方法 涉及的知識點很多: (1)、首先理解String abc=null;String abc="";String abc;三種寫法有什麼區別? String abc=null:建立一個空字串物件,即建立了物件,但裡面什麼也沒有,所以不能呼叫String中的任何方法 String abc="":建立一個字串為空的字串物件。 即建立了物件,物件中有字串,單字串為空,與上邊的區別是他一應為物件賦值; String abc:宣告一個字串物件,但並沒有分配記憶體,而1,2已經分配了記憶體。 如果沒有給abc賦過值,判斷條件abc=="“會導致異常 對於最後一種表示,你不能if(abc==null),或者 int length = abc.length();編譯的時候會提示可能沒有初始化. String str=“aaa”; //於棧上分配記憶體 String str=new String(“aaa”); //於堆上分配記憶體 null是用來判斷引用型別是否分配了儲存空間 ,”"是針對字串的; 在成員變數的定義中,String s;等同於String s=null;而在本地變數(方法變數)的定義中,String s;不等同於String s=null;,這時要使用s必須顯式地賦值。 在成員變數的定義中,String s;等同於String s=null; 而在本地變數(方法變數)的定義中,String s;不等同於String s=null;,這時要使用s必須顯式地賦值。 (2)、concat連線字串的方法 public String concat(String str)將指定字串連線到此字串的結尾。 如果引數字串的長度為 0,則返回此 String 物件。否則,建立一個新的 String 物件,用來表示由此 String 物件表示的字元序列和引數字串表示的字元序列連線而成的字元序列。 這道題如果是: String s = “”; s.concat(“abc”); System.out.println(s.concat(“abc”)); System.out.println(s.concat(“abc”)); 就可以正常執行輸出

3、判斷下面程式的執行結果 public static void main(String[] args) { int i; System.out.println(“i=”+i); } 答案:編譯時錯誤 解析: 只要是在方法在中定義變數都要顯示賦初值,main()方法也不例外,而在方法之外編譯器回自動賦初值。 4、關於方法命名,下面那句話是正確的: (A)、除了構建器外,定義和類名相同的方法名會產生編譯錯誤。  (B)、如果沒有定義構建器,那麼可以定義和類名相同的方法名。  (C)、定義和類名相同的方法名不會產生錯誤,只是有時候容易混淆。  (D)、定義和類名相同的方法名不會有任何問題。 答案:C 解析:D選項錯在如果定義一個與類名相同的方法會提示警告:This method has a constructor name

5、判斷下面程式的執行結果 public static void main(String[] args) { int a=0; int c =0; do { –c; }while(c>0); System.out.println©; System.out.println(a); } } 答案:-1,0; 解析:這道題本身簡單,但要注意迴圈體中內容變化時的輸出結果 c–: -1,0; c=c–: 0,0 先把c賦值給c,在減一 c=–c:-1,0 a=c–:-1,0 a=–c:-1,-1

6.下列哪種說法是正確的()

A.例項方法可直接呼叫超類的例項方法 B.例項方法可直接呼叫超類的類方法 C.例項方法可直接呼叫其他類的例項方法 D.例項方法可直接呼叫本類的類方法 答案:D 分析:類方法指的是用static關鍵字修飾的方法,而例項方法就是相對於類方法的其它方法 當類的位元組碼檔案被載入到記憶體時,類的例項方法不會被分配入口地址,當該類建立物件後, 類中的例項方法才分配入口地址,從而例項方法可以被類建立的任何物件呼叫執行。需要注意的是, 當我們建立第一個物件時,類中的例項方法就分配了入口地址,當再建立物件時,不再分配入口地址, 也就是說,方法的入口地址被所有的物件共享,當所有的物件都不存在時,方法的入口地址才被取消。 對於類中的類方法,在該類被載入到記憶體時,就分配了相應的入口地址。從而類方法不僅可以被類建立 的任何物件呼叫執行,也可以直接通過類名呼叫。類方法的入口地址直到程式退出才被取消。 對於A,不可以呼叫父類的private例項方法。因為private修飾的方法只有本類物件才可以呼叫 對於B,類方法只有本類才可以呼叫 對於C,跟A相同,比A更離譜