說明:以下面試題中,選項背景爲這個顏色的,則代表爲正確答案,後續會繼續總結其它面試題系列,持續做題關注。
01
下面程序運行的結果爲?
public static void main(String args[]){ Thread t = new Thread(){ public void run(){ pong(); } }; t.run(); System.out.println("ping"); } static void pong(){ System.out.println("pong"); }
A. | pingpong | |||
---|---|---|---|---|
B. | pongping | |||
C. | pingpong和pongping都有可能 | |||
D. | 都不輸出 |
解析
考點:Thread類中start()和run()方法的區別
start()用來啓動一個線程,當調用start方法後,系統纔會開啓一個新的線程,進而調用run()方法來執行任務,而單獨的調用run()就跟調用普通方法是一樣的,已經失去線程的特性了。因此在啓動一個線程的時候一定要使用start()而不是run();
02
下面哪個流屬於面向字符的輸入流()?
A. | BufferedWriter | |||
---|---|---|---|---|
B. | FileInputStream | |||
C. | ObjectInputStream | |||
D. | InputStreamReader |
解析
考點:I/O流、字節流、字符流、輸入流、輸出流
Java的I/O操作中有面向字節(Byte)和麪向字符(Character)兩種方式。 面向字節的操作爲以8位爲單位對二進制的數據進行操作,對數據不進行轉換,這些類都是InputStream和OutputStream的子類。 面向字符的操作爲以字符爲單位對數據進行操作,在讀的時候將二進制數據轉爲字符,在寫的時候將字符轉爲二進制數據,這些類都是Reader和Writer的子類。
總結:
以InputStream(輸入)/OutputStream(輸出)爲後綴的是字節流;
以Reader(輸入)/Writer(輸出)爲後綴的是字符流;
03
新建一個流對象,下面哪個選型的代碼是錯誤的?
A. | new BufferedWriter(new FileWriter("a.txt")); | |||
---|---|---|---|---|
B. | new BufferedReader(new FileInputStream("a.dat")); | |||
C. | new GZIPOutputStream(new FileOutputStream("a.zip")); | |||
D. | new ObjectInputStream(new FileInputStream("a.dat")); |
解析
考點:對象流的使用
Reader只能用FileReader進行實例化
04
System.out.println("5"+2);的輸出結果應該是?
A. | 52 | |||
---|---|---|---|---|
B. | 7 | |||
C. | 2 | |||
D. | 5 |
解析
考點:類型轉換
Java會自動將2轉換爲字符串
05
以下程序運行的結果是?
public class Test{ static boolean foo(char c){ System.out.println(c); return true; } public static void main(String[] args){ int i = 0; for(foo('a');foo('b')&&(i<2);foo('c')){ i++; foo('d'); } } }
A. | abdcbdcb | |||
---|---|---|---|---|
B. | abcdabcd | |||
C. | abcddcdb | |||
D. | an exception is thrown at runtime |
解析
考點:for循環的執行順序
for(表達式1;表達式2;表達式3){
//循環體
}
先執行“表達式1”,再進行“表達式2”的判斷,判斷爲真則執行“循環體”,循環體執行完以後執行表達式3
06
關於sleep()和wait(),以下描述錯誤的一項是?
A. | sleep是線程類(Thread)的方法,wait是Object類的方法 | |||
---|---|---|---|---|
B. | sleep不釋放對象鎖,wait放棄對象鎖 | |||
C. | wait後進入等待鎖定池,只有針對此對象發出notify方法後獲得對象鎖進入運行狀態 | |||
D. | sleep暫停線程、但監控狀態仍然保持,結束後會自動恢復 |
解析
考點:sleep()和wait()區別
sleep是線程類(Thread)的方法,導致此線程暫停執行指定時間,給執行機會給其他線程,但是監控狀態依然保持,到時後會自動恢復。調用sleep不會釋放對象鎖。 wait是Object類的方法,對此對象調用wait方法導致本線程放棄對象鎖,進入等待此對象的等待鎖定池,只有針對此對象發出notify方法(或notifyAll)後本線程才進入對象鎖定池準備獲得對象鎖進入運行狀態
07
提供Java存取數據庫能力的包是?
A. | java.sql | |||
---|---|---|---|---|
B. | java.awt | |||
C. | java.lang | |||
D. | java.swing |
解析
考點:工具包的使用
java.sql是JDBC的編程接口 java.awt和java.swing是做圖像界面的類庫 java.lang: Java 編程語言進行程序設計的基礎類
08
下面哪個表達式的值與數組下標量總數相等?
已知表達式 int m[] ={1,2,3,4,5,6};
A. | m.length() | |||
---|---|---|---|---|
B. | m.length()+1 | |||
C. | m.length | |||
D. | m.length() - 1 |
解析
考點:數組下標API
數組下標是從零開始的,但是數據下標的總量和數據長度相同
09
如下代碼,如何使成員變量m被函數fun()直接訪問?
class Test{ private int m; public static void fun() { //some code„ } }
A. | 將private int m改爲 protected int m | |||
---|---|---|---|---|
B. | 將private int m改爲 public int m | |||
C. | 將private int m改爲 static int m | |||
D. | 將private int m改爲int m |
解析
考點:靜態屬性的使用
靜態的方法中可以直接調用靜態數據成員
10
不能用來修飾interface的有?
A. | private | |||
---|---|---|---|---|
B. | public | |||
C. | protected | |||
D. | static |
解析
考點:接口修飾符有哪些
修飾接口可以是public、默認、final;
11
JDBC中,用於表示數據庫連接的對象是?
A. | Statement | |||
---|---|---|---|---|
B. | Connection | |||
C. | DriverManager | |||
D. | PreparedStatement |
解析
考點:JDBC連接數據庫的步驟
1:加載驅動
Class.forName("oracle.jdbc.driver.OracleDriver");
2:創建連接
Connection con = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:orcl", "1111", "1111");
3:創建語句
PreparedStatement ps = con.prepareStatement("select * from user");
4:執行語句
ResultSet rs = ps.executeQuery();
5:處理結果
while(rs.next()) {
rs.get.....(“”);
}
6:關閉資源
finally {
if(con != null) {
try {
con.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
12
如下代碼,輸出的結果是?
public class Foo { public static void main(String[] args) { try { return; }catch(Exception e){ }finally { System.out.println( "Finally" ); } } }
A. | Finally | |||
---|---|---|---|---|
B. | 編譯失敗 | |||
C. | 代碼正常運行但沒有任何輸出 | |||
D. | 運行時拋出異常 |
解析
考點:finally執行
try.... catch...finally...結構,不管代碼是否有異常,finally代碼塊總會執行
13
下面關於Java的引用,說法正確的是?
A. | 引用實際上就是指針 | |||
---|---|---|---|---|
B. | 引用本身是Primitive | |||
C. | 引用就是對象本身 | |||
D. | 一個對象只能被一個引用所指引 |
解析
考點:Java引用
Java中沒有指針,到處都是引用(除了基本類型),在Java中,變量有兩種類型,一種是原始類型,一種是引用類型;
引用數據型在被創建時,首先要在棧上給其引用(句柄)分配一塊內存,而對象的具體信息都存儲在堆內存上,然後由棧上面的引用指向堆中對象的地址;
強引用--弱引用--軟引用--幻想引用(虛引用)
primitive type: 基本類型,eg:int、double等
wrapped type:包裝類型,int—>Integer,double—>Decimal等
基本類型跟就是不可實例化的,可以直接初始化、賦值、運算。不可調用方法,不可放入容器;
包裝類型就是把基本類型變成一個類實例,一定要new才產生,可以調用方法,可以放入容器;
14
在一個線程中Sleep(1000)方法,將使得該線程在多少時間後獲得對CPU的控制(假設睡眠過程中不會有其他事件喚醒該線程)?
A. | 正好1000毫秒 | |||
---|---|---|---|---|
B. | 1000毫秒不到 | |||
C. | =>1000毫秒 | |||
D. | 不一定 |
解析
考點:線程sleep方法
調用sleep(1000)方法後,線程會在1000毫秒之後,纔可以重新運行,此時爲就緒狀態,需要進入到隊列中,等待CPU資源的釋放,然後纔可以獲取執行權限,所以需要最少1000毫秒纔可以獲取CPU的控制權限
15
下面哪個不是JAVA關鍵字?
A. | integer | |||
---|---|---|---|---|
B. | double | |||
C. | float | |||
D. | default |
解析
考點:Java關鍵字
Java中存在關鍵字爲:Integer
16
下列關於構造方法的敘述中,錯誤的是?
A. | Java語言規定構造方法名與類名必須相同 | |||
---|---|---|---|---|
B. | Java語言規定構造方法沒有返回值,但不用vold聲明 | |||
C. | Java語言規定構造方法不可以重載 | |||
D. | Java語言規定構造方法只能通過new自動調用 |
解析
考點:構造方法
構造方法可以被重載、類的多態性體現
17
Java語言中下面哪個可以用作正確的變量名稱?
A. | 3D | |||
---|---|---|---|---|
B. | name | |||
C. | extends | |||
D. | implements |
解析
考點:Java命名規範
1:名稱只能由字母、數字、下劃線、$符號組成
2:不能以數字開頭
3:名稱不能使用JAVA中的關鍵字
4:堅決不允許出現中文及拼音命名
18
在JavaScript中如何驗證一個數據是否是數字?
A. | 如果用Integer.parseInt(value)有誤就不是數字 | |||
---|---|---|---|---|
B. | int I = value 若報錯就不是數字 | |||
C. | 沒有方法驗證 | |||
D. | 利用isNaN(value) 返回的boolean進行判斷 |
解析
考點:JS驗證API的使用
isNaN(value)判斷value是否爲數字
19
如下代碼,如何使成員變量m被函數fun()直接訪問?
class Test{ private int m; public static void fun() { //TODO } }
A. | 將private int m改爲 protected int m | |||
---|---|---|---|---|
B. | 將private int m改爲 static int m | |||
C. | 將private int m改爲 public int m | |||
D. | 將private int m改爲int m |
解析
考點:static靜態變量使用
靜態方法中必須使用類變量中的靜態變量
20
下面哪些是Thread類的方法?
A. | start() | |||
---|---|---|---|---|
B. | run() | |||
C. | exit() | |||
D. | getPriority() |
解析
考點:Thread類
看Java API docs吧:http://docs.oracle.com/javase/7/docs/api/,exit()是System類的方法,如System.exit(0)