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

牛客網第七天

1.欲構造ArrayList類的一個例項,此類實現了List介面,下列哪個方法是正確的?
A.ArrayList myList=new Object()
B.List myList=new ArrayList()
C.ArrayList myList=new List()
D.List myList=new List()
正確答案: B 你的答案: B (正確)
解析:本題考查在Java中如何實現介面。選項A錯誤,只是例項化了一個ArrayList類的物件myList,而沒有實現介面;選項B正確,用List來宣告MyList實現介面,並用ArrayList構造出一個例項;選項C錯誤,List並不是一個類,不能用new關鍵字;選項D錯誤,介面不能例項化—個介面。故本題的答案是B。
2.以下程式碼將打印出
public static void main(String args[]) {
List Listlist1 = new ArrayList();
Listlist1.add(0);
List Listlist2 = Listlist1;
System.out.println(Listlist1.get(0) instanceof Integer);
System.out.println(Listlist2.get(0) instanceof Integer);
}
A.編譯錯誤
B.true true
C.true false
D.false false
正確答案: B 你的答案: D (錯誤)
解析:
collection型別的集合(ArrayList,LinkedList)只能裝入物件型別的資料,該題中裝入了0,是一個基本型別,但是JDK5以後提供了自動裝箱與自動拆箱,所以int型別自動裝箱變為了Integer型別。編譯能夠正常通過。
將list1的引用賦值給了list2,那麼list1和list2都將指向同一個堆記憶體空間。instanceof是Java中關鍵字,用於判斷一個物件是否屬於某個特定類的例項,並且返回boolean型別的返回值。顯然,list1.get(0)和list2.get(0)都屬於Integer的例項
3.一個以“.java”為字尾的原始檔
A.只能包含一個public類,類名必須與檔名相同
B.只能包含與檔名相同的public類以及其中的內部類
C.只能有一個與檔名相同的public類,可以包含其他非public類(不考慮內部類)
D.可以包含任意public類
正確答案: C 你的答案: C (正確)
解析:java檔案可以包含多個類,唯一的限制就是:一個檔案中只能有一個public類, 並且此public類必須與檔名相同。而且這些類和寫在多個檔案中沒有區別。
4.下面不屬於HttpServletRequest介面完成功能的是?
A.讀取cookie
B.讀取HTTP頭
C.設定響應的content型別
D.讀取路徑資訊
正確答案: C 你的答案: D (錯誤)
解析: HttpServletRequest類主要處理:
1.讀取和寫入HTTP頭標
2.取得和設定cookies
3.取得路徑資訊
4.標識HTTP會話
5.下列不屬於Java語言性特點的是
A.Java致力於檢查程式在編譯和執行時的錯誤
B.Java能執行虛擬機器實現跨平臺
C.Java自己操縱記憶體減少了記憶體出錯的可能性
D.Java還實現了真陣列,避免了覆蓋資料型別的可能
正確答案: D 你的答案: C (錯誤)
解析:Java致力於檢查程式在編譯和執行時的錯誤。
Java虛擬機器實現了跨平臺介面
型別檢查幫助檢查出許多開發早期出現的錯誤。
Java自己操縱記憶體減少了記憶體出錯的可能性。
Java還實現了真陣列,避免了覆蓋資料的可能。
注意,是避免資料覆蓋的可能,而不是資料覆蓋型別
6.下列哪個選項是合法的識別符號?()
A.123
B._name
C.class
D.first

正確答案: B D 你的答案: B D (正確)
解析: Java識別符號由 數字、字母、下劃線(_)、美元符號($) 組成, 首位不能是數字 。並且 Java關鍵字不能作為識別符號 。
7.如果Child extends Parent,那麼正確的有()?
A.如果Child是class,且只有一個有引數的建構函式,那麼必然會呼叫Parent中相同引數的建構函式
B.如果Child是interface,那麼Parent必然是interface
C.如果Child是interface,那麼Child可以同時extends Parent1,Parent2等多個interface
D.如果Child是class,並且沒有顯示宣告任何建構函式,那麼此時仍然會呼叫Parent的建構函式
正確答案: B C D 你的答案: B C D (正確)
解析: A 可以呼叫父類無參的建構函式,子類的有參建構函式和是否呼叫父類的有引數的建構函式無必然聯絡。
B 介面繼承的時候只能繼承介面不能繼承類,因為如果類可以存在非抽象的成員,如果介面繼承了該類,那麼介面必定從類中也繼承了這些非抽象成員,這就和介面的定義相互矛盾,所以介面繼承時只能繼承介面。
C 介面可以多繼承可以被多實現,因為介面中的方法都是抽象的,這些方法都被實現的類所實現,即使多個父介面中有同名的方法,在呼叫這些方法時呼叫的時子類的中被實現的方法,不存在歧義;同時,介面的中只有靜態的常量,但是由於靜態變數是在編譯期決定呼叫關係的,即使存在一定的衝突也會在編譯時提示出錯;而引用靜態變數一般直接使用類名或介面名,從而避免產生歧義,因此也不存在多繼承的第一個缺點。 對於一個介面繼承多個父介面的情況也一樣不存在這些缺點。所以介面可以多繼承。
D 子類即使沒有顯示建構函式,也會有個無引數的預設建構函式,仍然會呼叫父類的建構函式
8.以下關於物件序列化描述正確的是
A.使用FileOutputStream可以將物件進行傳輸
B.使用PrintWriter可以將物件進行傳輸
C.使用transient修飾的變數不會被序列化
D.物件序列化的所屬類需要實現Serializable介面
正確答案: C D 你的答案: A B D (錯誤)
解析:使用ObjectOutputStream和ObjectInputStream可以將物件進行傳輸.
宣告為static和transient型別的成員資料不能被序列化。因為static代表類的狀態, transient代表物件的臨時資料。
9.Which are keywords in Java?
A.null
B.true
C.sizeof
D.implements
E.instanceof
解析:
goto和const是保留字也是關鍵字。
關鍵字列表 (依字母排序 共50組):
abstract, assert, boolean, break, byte, case, catch, char, class, const(保留關鍵字), continue, default, do, double, else, enum, extends, final, finally, float, for, goto(保留關鍵字), if, implements, import, instanceof, int, interface, long, native, new, package, private, protected, public, return, short, static, strictfp, super, switch, synchronized, this, throw, throws, transient, try, void, volatile, while
保留字列表 (依字母排序 共14組),Java保留字是指現有Java版本尚未使用,但以後版本可能會作為關鍵字使用:
byValue, cast, false, future, generic, inner, operator, outer, rest, true, var, goto (保留關鍵字) , const (保留關鍵字) , null
10.byte b1=1,b2=2,b3,b6,b8;
final byte b4=4,b5=6,b7;
b3=(b1+b2); /語句1

/
b6=b4+b5; /語句2/
b8=(b1+b4); /語句3/
b7=(b2+b5); /語句4/
System.out.println(b3+b6);
下列程式碼片段中,存在編譯錯誤的語句是()
A.語句2
B.語句1
C.語句3
D.語句4
Java表示式轉型規則由低到高轉換:
1、所有的byte,short,char型的值將被提升為int型;

2、如果有一個運算元是long型,計算結果是long型;

3、如果有一個運算元是float型,計算結果是float型;
4、如果有一個運算元是double型,計算結果是double型;
5、被fianl修飾的變數不會自動改變型別,當2個final修飾相操作時,結果會根據左邊變數的型別而轉化。
--------------解析--------------
語句1錯誤:b3=(b1+b2);自動轉為int,所以正確寫法為b3=(byte)(b1+b2);或者將b3定義為int;
語句2正確:b6=b4+b5;b4、b5為final型別,不會自動提升,所以和的型別視左邊變數型別而定,即b6可以是任意數值型別;
語句3錯誤:b8=(b1+b4);雖然b4不會自動提升,但b1仍會自動提升,所以結果需要強轉,b8=(byte)(b1+b4);
語句4錯誤:b7=(b2+b5); 同上。同時注意b7是final修飾,即只可賦值一次,便不可再改變。
解析: Java表示式轉型規則由低到高轉換:
1、所有的byte,short,char型的值將被提升為int型;

2、如果有一個運算元是long型,計算結果是long型;

3、如果有一個運算元是float型,計算結果是float型;
4、如果有一個運算元是double型,計算結果是double型;
5、被fianl修飾的變數不會自動改變型別,當2個final修飾相操作時,結果會根據左邊變數的型別而轉化。
--------------解析--------------
語句1錯誤:b3=(b1+b2);自動轉為int,所以正確寫法為b3=(byte)(b1+b2);或者將b3定義為int;
語句2正確:b6=b4+b5;b4、b5為final型別,不會自動提升,所以和的型別視左邊變數型別而定,即b6可以是任意數值型別;
語句3錯誤:b8=(b1+b4);雖然b4不會自動提升,但b1仍會自動提升,所以結果需要強轉,b8=(byte)(b1+b4);
語句4錯誤:b7=(b2+b5); 同上。同時注意b7是final修飾,即只可賦值一次,便不可再改變。