Java筆試題(二)
1.以下java程式程式碼,執行後的結果是()
java.util.HashMap map=new java.util.HashMap();
map.put("name",null);
map.put("name","Jack");
System.out.println(map.size());
答案:1
解析:
1.HashMap 可以插入 null 的 key 或 value。
2.插入的時候,檢查是否已經存在相同的 key,如果不存在,則直接插入,如果存在,則用新的 value 替換舊的 value。
3.在本題中,第一條 put 語句,會將 key / value 對插入 HashMap,而第二條 put,因為已經存在一個 key 為 name 的項,所以會用新的 value 替換舊的 vaue,因此,兩條 put 之後,HashMap 中只有一個 key / value 鍵值對。那就是(name,jack)。所以,size為 1。
2.下面程式的執行結果是()
String str1 = "hello";
String str2 = "he" + new String("llo");
System.err.println(str1 == str2);
答案:false
解析:
str1 指向的常量分配在字串常量池中
“he” 在編譯期分配在字串常量池中,new String("llo") 指向的常量 “llo” 也分配在字串常量池中。
雖然 str2 也是經過初始化,但是無法判斷 new String("llo") 到底是什麼,進而不會將 = 號右側的內容存於常量池,而是在通過構造時在堆區中的常量池外
3.以下程式碼執行後輸出結果為( )
public class ClassTest{ String str = new String("hello"); char[] ch = {'a','b','c'}; public void fun(String str, char ch[]){ str="world"; ch[0]='d'; } public static void main(String[] args) { ClassTest test1 = new ClassTest(); test1.fun(test1.str,test1.ch); System.out.print(test1.str + " and "); System.out.print(test1.ch); } }
答案:hello and dbc
解析:
1.Java 中都是按棧中的值傳遞,基本資料型別棧中的值就是實際儲存的值,引用型別棧中的值就是指向堆中的地址。
2.String 和 char[ ] 都是引用型別,所以在方法中傳遞的都是指向真實資料的地址。
3.String 在原始碼中的是這麼寫的:public final class String,final 型別不可改變。fun() 方法是開闢一塊新的記憶體,將 world 放入記憶體,然後把新的地址給 fun() 方法中的 str(形參)。也就是說,fun() 方法中根本沒有改變初始存放 “hello” 的記憶體(地址)值,當這個方法返回時,main 方法中的 str 依然是那個沒修改前的引用,當然還是輸出 “hello” 了。
4.Java 的跨平臺特性是指編譯後的檔案(位元組碼檔案,即 class 檔案)跨平臺,而不是源程式跨平臺。該 class 檔案與平臺無關,而 class 檔案經過解釋執行之後翻譯成最終的機器碼,這是平臺相關的。
5.JSP分頁程式碼中,正確的步驟次序
1.count(*) 得到總記錄數
2.計算總頁數
3.過濾顯示本頁資料
6.Servlet的生命週期一般可以用三個方法來表示:
1.init():僅執行一次,負責在裝載 Servlet 時初始化 Servlet 物件
2.service():核心方法,一般 HttpServlet 中會有 get,post 兩種處理方式。在呼叫 doGet 和 doPost 方法時會構造 servletRequest 和servletResponse 請求和響應物件作為引數。
3.destory():在停止並且解除安裝 Servlet 時執行,負責釋放資源
初始化階段:Servlet 啟動,會讀取配置檔案中的資訊,構造指定的 Servlet 物件,建立 ServletConfig 物件,將 ServletConfig 作為引數來呼叫 init() 方法。