1. 程式人生 > >牛客網第20天

牛客網第20天

1.下列運算符合法的是( ) A.&& B.<> C.if D.:= 正確答案: A 你的答案: A (正確) 解析:java 中沒有<> := 這種運算子, if else不算運算子,因此選a 2.下列Java常見事件類中哪個是滑鼠事件類?() A.InputEvent B.KeyEvent C.MouseEvent D.WindowEvent 正確答案: C 你的答案: C (正確) 解析:inputEvent輸入事件,KeyEvent按鍵事件,MouseEvent滑鼠事件,WindowEvent窗體事件。 3.Math.round(11.5) 等於:() A.11 B.11.5 C.12 D.12.5 正確答案: C 你的答案: C (正確) 解析:Math.round()四捨五入方法。 4. 閱讀以下 foo 函式,請問它的時間複雜度是: int foo(intarray[], int n, int key) { int n1=0,n2=n-1,m; while(n1<=n2) { m=(n1+n2)/2; if(array[m]key) return m; if(array[m]>key) n2=m-1; else n1=m+1; } return -1; } A.O(n2) B.O(n) C.O(log(n)) D.O(n) 正確答案: C 你的答案: C (正確) 解析:這題是真不會。 5.假設有以下程式碼 String s=”hello”; String t=”hello”; char c[] ={‘h’,’e’,’l’,’l’,’o’}; 下列選項中返回false的語句是: A.s.equals(t); B.t.equals©; C.s

t; D.t.equals(new String(“hello”)); 正確答案: B 你的答案: B (正確) 解析: ==是比較地址值是否相等,.equals()方法是比較值是否相等 s和t兩個變數都是指向字串常量池中的同一個記憶體區域,所以地址值相等,值當然也相等,AC正確 Char c[]是一個字元陣列,和字串t使用.equals()方法比較,返回false D選項new了一個新的字串,它的值和s、t是相同的,但是由於是新new出來的,就會重新開闢一個空間進行儲存,所以地址不同,但是值相同 6.如下程式碼,執行test()函式後,螢幕列印結果為() public class Test2 { public void add(Byte b) { b = b++; } public void test() { Byte a = 127; Byte b = 127; add(++a); System.out.print(a + " "); add(b); System.out.print(b + “”); } } A.127 127 B.128 127 C.129 128 D.以上都不對 正確答案: D 你的答案: D (正確) 解析:public void add(Byte b){ b=b++; } 這裡涉及java的自動裝包/自動拆包(AutoBoxing/UnBoxing) Byte的首字母為大寫,是類,看似是引用傳遞,但是在add函式內實現++操作,會自動拆包成byte值傳遞型別,所以add函式還是不能實現自增功能。也就是說add函式只是個擺設,沒有任何作用。 Byte型別值大小為-128~127之間。 add(++a);這裡++a會越界,a的值變為-128 add(b); 前面說了,add不起任何作用,b還是127 7.以下說法錯誤的是() A.虛擬機器中沒有泛型,只有普通類和普通方法 B.所有泛型類的型別引數在編譯時都會被擦除 C.建立泛型物件時請指明型別,讓編譯器儘早的做引數檢查 D.泛型的型別擦除機制意味著不能在執行時動態獲取List中T的實際型別 正確答案: D 你的答案: C (錯誤) 解析:1、建立泛型物件的時候,一定要指出型別變數T的具體型別。爭取讓編譯器檢查出錯誤,而不是留給JVM執行的時候丟擲類不匹配的異常。 2、JVM如何理解泛型概念 —— 型別擦除。事實上,JVM並不知道泛型,所有的泛型在編譯階段就已經被處理成了普通類和方法。 處理方法很簡單,我們叫做型別變數T的擦除(erased) 。 總結:泛型程式碼與JVM ① 虛擬機器中沒有泛型,只有普通類和方法。 ② 在編譯階段,所有泛型類的型別引數都會被Object或者它們的限定邊界來替換。(型別擦除) ③ 在繼承泛型型別的時候,橋方法的合成是為了避免型別變數擦除所帶來的多型災難。 無論我們如何定義一個泛型型別,相應的都會有一個原始型別被自動提供。原始型別的名字就是擦除型別引數的泛型型別的名字。 8.下列不正確的 Java 語言識別符號是( ) A.Sky B.C
omputerC.forD.NULL:C:D()java1azAZ09Computer C.for D.NULL 正確答案: C 你的答案: D (錯誤) 解析:java識別符號命名規範是: 1)只能包含字母a-zA-Z,數字0-9,下劃線_和美元符號
; 2)首字母不能為數字; 3)關鍵字和保留字不能作為識別符號。 null是關鍵字,NULL不是關鍵字,java區分大小寫。這題答案D是對的,但C是錯的,for是關鍵字。 9.下列說法錯誤的有( ) A.在類方法中可用this來呼叫本類的類方法 B.在類方法中呼叫本類的類方法時可直接呼叫 C.在類方法中只能呼叫本類中的類方法 D.在類方法中絕對不能呼叫例項方法 正確答案: A C D 你的答案: C D (錯誤) 解析: 首先: 成員方法又稱為例項方法 靜態方法又稱為類方法 其次: a,靜態方法中沒有this指標 c,可以通過類名作用域的方式呼叫Class::fun(); d,太絕對化了,在類中申請一個類物件或者引數傳遞一個物件或者指標都可以呼叫; 10.有關靜態初始化塊說法正確的是? A.無法直接呼叫靜態初始化塊 B.在建立第一個例項前或引用任何靜態成員之前,將自動呼叫靜態初始化塊來初始化 C.靜態初始化塊既沒有訪問修飾符,也沒有引數 D.在程式中,使用者可以控制合適執行靜態初始化塊 正確答案: A B C 你的答案: B D (錯誤) 解析: JAVA的初始化順序: 父類的靜態成員初始化>父類的靜態程式碼塊>子類的靜態成員初始化>子類的靜態程式碼塊>父類的程式碼塊>父類的構造方法>子類的程式碼塊>子類的構造方法 注意: 1.靜態成員和靜態程式碼塊只有在類載入的時候執行一次,再次建立例項時,不再執行,因為只在方法區存在一份,屬於一整個類。 2.上述的是通用的載入順序,如果沒有則省略。