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的更多內容!
推薦閱讀:
- 初步認識JVM的體系結構
- Java中的Native方法
- java類加載機制、類加載器、自定義類加載器的案例
- java中String、StringBuffer與StringBuilder的區別
- Java實現折半插入排序算法的示例代碼