Java日常練習題,每天進步一點點

承蒙各位厚愛,我們一起每天進步一點點!(鼠標選中空白處查看答案)

1、以下不屬於構造方法特征的是()

正確答案: D

構造方法名與類名相同

構造方法不返回任何值,也沒有返回類型

構造方法在創建對象時調用,其他地方不能顯式地直接調用

每一個類隻能有一個構造方法

題解:一個類可以有多個構造方法,多個構造方法通過不同參數列表進行重載。

2、下面有關java classloader說法錯誤的是?

正確答案: C

Java默認提供的三個ClassLoader是BootStrap ClassLoader,Extension ClassLoader,App ClassLoader

ClassLoader使用的是雙親委托模型來搜索類的

JVM在判定兩個class是否相同時,隻用判斷類名相同即可,和類加載器無關

ClassLoader就是用來動態加載class文件到內存當中用的

題解: JVM在判定兩個class是否相同時,不僅要判斷兩個類名是否相同,而且要判斷是否由同一個類加載器實例加載的

3、一個文件中的字符要寫到另一個文件中,首先需要( )。

正確答案: C

System.out.print (buffer[i]);

FileOutputStream fout = new FileOutputStream(this.filename);

FileInputStream fin = new FileInputStream(this.filename);

System.in.read(buffer);

題解:程序的邏輯很簡單。程序必須打開兩個文件,以可讀的方式打開一個已有文件和以可寫的方式打開一個新文件,後將已有文件中的內容,暫時存放在內存中,再寫入新的文件,後關閉所有文件,程序結束。根據題意,首先需要讀入一個文件中的字符,需要FileInputStream fin = new FileInputStream(this.filename);

4、假設num已經被創建為一個ArrayList對象,並且最初包含以下整數值:[0,0,4,2,5,0,3,0]。 執行下面的方法numQuest(),最終的輸出結果是什麼?

private List nums;

//precondition: nums.size() > 0

//nums contains Integer objects

public void numQuest() {

int k = 0;

Integer zero = new Integer(0);

while (k < nums.size()) {

if (nums.get(k).equals(zero))

nums.remove(k);

k++;

}

}

正確答案: D

[3, 5, 2, 4, 0, 0, 0, 0]

[0, 0, 0, 0, 4, 2, 5, 3]

[0, 0, 4, 2, 5, 0, 3, 0]

[0, 4, 2, 5, 3]

題解:做這種題還是要一步一步來,不然一不小心就掉坑裡: List中的 get ( i )指的是獲取下標(索引)為 i 的元素,也就是第 i+1 個元素本題:

zero==0,如果get(k)==0,執行remove(k); ;

size==8 ; k==0 , 因此第一次remove(0) ,刪除索引為0的元素也就是第一個元素0,然後k++, size()–;

此時集合元素為 :[0,4,2,5,0,3,0]

size==7; k==1,因此get(1)==4 !=0 , 不執行remove(); k++,因沒有刪除元素,size()不變,

此時集合元素為:[0,4,2,5,0,3,0]

size==7;k==2,k++;

size==7;k==3,k++;

size==7;k==4,get(4)==0,remove(4) ; k++, size()–;

此時集合元素為: [0,4,2,5,3,0]

size==6; k==5,get(5)==0,remove(5);k++, size()–;

此時集合元素為: [0,4,2,5,3]

size==5; k==6 ;退出循環;

最終輸出此時集合元素為 [0,4,2,5,3] ;

一般更改刪除集合元素,使用iterator()迭代器,不推薦使用這種;

5、以下聲明合法的是

正確答案: B

default String s

public final static native int w( )

abstract double d

abstract final double hyperbolicCosine( )

題解:

A:變量不能被defalut修飾

B:native修飾方法,native修飾的方法簡單來說就是:一個Java方法調用瞭一個非Java代碼的接口。定義navtive方法時,並不提供實現體,因為其實現體是用非Java語言在外面實現的。native可以和任何修飾符連用,abstract除外。因為native暗示這個方法時有實現體的,而abstract卻顯式指明瞭這個方法沒有實現體。

C:abstract修飾方法和類

D:final修飾的方法不能被重寫。而abstract定義的方法沒有實現,必須被子類重寫,明顯不能一起使用。

6、以下代碼段執行後的輸出結果為

public class Test {

public static void main(String[] args) {

System.out.println(test());

}

private static int test() {

int temp = 1;

try {

System.out.println(temp);

return ++temp;

} catch (Exception e) {

System.out.println(temp);

return ++temp;

} finally {

++temp;

System.out.println(temp);

}

}

}

正確答案: D

1,2,2

1,2,3

1,3,3

1,3,2

題解:

執行順序為:

輸出try裡面的初始temp:1;

temp=2;

保存return裡面temp的值:2;

執行finally的語句temp:3,輸出temp:3;

返回try中的return語句,返回存在裡面的temp的值:2;

輸出temp:2。

7、給定includel.isp文件代碼片段,如下:

<% pageContext.setAttribute(“User”,”HAHA”);%>

______ // 此處填寫代碼

給定include2.jsp文件代碼片段如下:

<%=pageContext.getAttribute(“User”)%>

要求運行include1.jsp時,瀏覽器上輸出:HAHA

正確答案: B

<jsp:include page=”include2.jsp” flash=”true”>

%@include file=”include2.jsp”%

<jsp:forward page=”include2.jsp”>

<% response.sendRedirect(“include2.jsp”); %>

題解: JSP 共有以下 6 種基本動作:

jsp:include:在頁面被請求的時候引入一個文件;

jsp:useBean:尋找或者實例化一個JavaBean。;

jsp:setProperty:設置 JavaBean 的屬性。;

jsp:getProperty:輸出某個 JavaBean 的屬性;

jsp:forward:把請求轉到一個新的頁面;

jsp:plugin:根據瀏覽器類型為 Java 插件生成 OBJECT 或 EMBED 標記。

B選項是靜態包含,相當於不include2.jsp頁面內容拷貝到此處,因此可以輸出User屬性值

D選項是轉發重定向,轉發的時候pageContent內的屬性值不能被傳遞,因此得不到User屬性值

A選項使用瞭jsp中動作標簽的包含標簽,這裡是動態包含。原理是包含與被包含的頁面單獨翻譯成不同的java文件,然後運行時合並在一起。因為是存在域中的數據,故剛開始就直接翻譯數據還不存在,因此瀏覽器上不能顯示出HAHA。

B選項使用瞭jsp三大指令中的包含指令,這裡是靜態包含。原理是直接把包含與被包含頁面的內容先合並在一起,然後翻譯成一個java源文件,最後編譯執行。故可以在瀏覽器上顯示出HAHA。

C和D選項分別使用瞭跳轉和重定向,我們知道jsp中有四個域對象,從小到大分別為:

page域:在同一個jsp頁面中數據有效

request域:在同一個請求中數據有效

session域:在用一個會話中數據有效

application域:在同一個網站中數據有效題中使用的是

page域對象:pageContext,而C選項應該使用

request域對象:HttpServletRequest,而D選項應該至少使用

session域對象:HttpSession(如果處於同一會話中)。

8、String與StringBuffer的區別。

正確答案: A B

String是不可變的對象,StringBuffer是可以再編輯的

字符串是常量,StringBuffer是變量

String是可變的對象,StringBuffer是不可以再編輯的

以上說法都不正確

題解: String 是 final定義的,不可變

9、Gadget has-a Sprocket and Gadget has-a Spring and Gadget is-a Widget and Widget has-a Sprocket 以下哪兩段代碼可以表示這個關系? (選擇兩項) ( )

正確答案: A C

A:class Widget { Sprocket s; }

class Gadget extends Widget { Spring s; }

B:class Widget { }

class Gadget extends Widget { Spring s1; Sprocket s2; }

C:class Widget { Sprocket s1; Spring s2; }

class Gadget extends Widget { }

D:class Gadget { Spring s; }

class Widget extends Gadget{ Sprocket s; }

題解:

這道題主要考查我們的Java類與類之間的關系。

類與類之間有三種關系:

(1)is-a 包括瞭繼承(類)和實現(接口)關系;

(2)has-a包括瞭關聯、聚合、組合關系;

(3)use-a包括瞭依賴關系;註:依賴關系 > 關聯關系 > 聚合關系 > 組合關系舉個例子:

(1)繼承關系:class_A is-a class_B

代碼層面:class_A extends class_B

(2)聚合關系:class_A has-a class_B

代碼層面:類A以類B對象為屬性或是調用瞭類B的屬性

10、線程安全的map在JDK 1.5及其更高版本環境 有哪幾種方法可以實現?

正確答案: C D

Map map = new HashMap()

Map map = new TreeMap()

Map map = new ConcurrentHashMap();

Map map = Collections.synchronizedMap(new HashMap());

題解: 1.HashMap,TreeMap 未進行同步考慮,是線程不安全的。 2.HashTable 和 ConcurrentHashMap 都是線程安全的。區別在於他們對加鎖的范圍不同,HashTable 對整張Hash表進行加鎖,而ConcurrentHashMap將Hash表分為16桶(segment),每次隻對需要的桶進行加鎖。 3.Collections 類提供瞭synchronizedXxx()方法,可以將指定的集合包裝成線程同步的集合。比如, List list = Collections.synchronizedList(new ArrayList()); Set set = Collections.synchronizedSet(new HashSet());

答案匯總:

1、正確答案: D

2、正確答案: C

3、正確答案: C

4、正確答案: D

5、正確答案: B

6、正確答案: D

7、正確答案: B

8、正確答案: A B

9、正確答案: A C

10、正確答案: C D

總結

本篇文章就到這裡瞭,希望能給你帶來幫助,也希望您能夠多多關註WalkonNet的更多內容!

推薦閱讀: