面試題 | 《Java面試題集》 -- 第二套

說明:以下面試題中,選項背景爲這個顏色的,則代表爲正確答案,後續會繼續總結其它面試題系列,持續做題關注。

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)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章