一、選擇題
1、給定如下所示的java代碼,則運行時,會產生()類型的異常。
String s = null;
s.equals(“abc”);
A) ArithmeticException
B) NullPointerExecption
C) IOException
D) ClassNotFoundException
答案:B
//如果String s = “”; s.equals(“abc”);是不會報錯的,如果String s = null;
s.equals(“abc”);會拋出一個NullPointerException
2、給定如下java程序的代碼片段,下劃線處,加入( )語句,可以使這段代碼編譯通過
public void method1() throws IOException{}
public void method2()________{ method1() };
(選擇二項)
A) throws IOException
B) throw IOException
C) throws Exception
D) throws RuntimeException
答案:AC
3、下面異常處理語句結構一定不正確的是( )
A) try{} catch(……){} finally{}
B) try{} catch(……){}
C) try{} finally{}
D)catch(……){} finally{}
答案:D
4、創建一個TCP服務程序的順序是()
A 關閉socket
B 創建一個服務器socket
C關閉I/O流
D 在服務線程中,從socket中獲得I/O流
E 對I/O流進行讀寫操作,完成與客戶的交互
G從服務器socket接受客戶連接請求
答案:BGDECA
5、下面都屬於線程安全的類是( )
A.ArrayList
B.Vector
C.HashMap
D.Hashtable
答案:BD
Vector是個老的動態數組,是線程同步(安全)且效率低,現在已經不適合使用。
ArrayList實現的是動態數組,它的功能範疇同Vector但不同步(不安全),它只是array的實現方式,允許隨機的讀取元素,特點是元素增刪慢,查找快。
LinkList實現的是鏈表結構,它允許隨機訪問,由這個類定義的鏈表能通棧和隊列一樣被使用。提供最佳順序存取,適合插入和移除元素,特點是元素增刪快,查找慢。
HashMap不是線程安全的,不能包含重複鍵,但可以包含重複值。HashMap允許null key和null value,而hashtable不允許
HashTable是線程安全的
HashMap是Hashtable的輕量級實現
6.線程通過( )方法可以休眠一段時間,然後恢復運行。
A.run
B.setPrority
C.yield
D.sleep
答案:D
7、在java中,下列選項可以存儲無序,不重複的數據是 ( )
A ArrayList
B LinkedList
C HashMap
D Set
答案:D
8、編譯運行以下java代碼,輸出結果正確的是 ( )
public class Test{
LinkedList list = new LinkedList();
list.add(“aaa”);
list.removeFrist();
list.removeLast();
System.out.println(list.size());
}
A) 1
B) 0
C) 運行異常
D) 編譯異常
答案:C
removeFrist()把第一個元素去掉,list中已經沒有元素了,removeLast()就會報錯
Exception in thread “main” java.util.NoSuchElementException
at java.util.LinkedList.removeLast(Unknown Source)
at Test20170424.Test.main(Test.java:10)
9、請選擇正確答案
import java.util.*;
public class TestListSet{
public static void main(String args[]){
List list = new ArrayList();
list.add(“Hello”);
list.add(“Learn”);
list.add(“Hello”);
list.add(“Welcome”);
Set set = new HashSet();
set.addAll(list);
System.out.println(set.size());
}
}
A) 編譯不通過
B) 編譯通過,運行時異常
C) 編譯運行都正常,輸出3
D) 編譯運行都正常,輸出4
答案:C
10、請選擇正確答案
public static Iterator reverse(List list) {
Collections.reverse(list);
return list.iterator();
}
public static void main(String[] args) {
List list = new ArrayList();
list.add("1");
list.add("2");
list.add("3");
for (Object obj: reverse(list))
System.out.print(obj + ", ");
}
A) 3, 2, 1,
B) 1, 2, 3,
C) 編譯失敗。
D) 運行時出錯。
答案:C
//for(類型 對象:集合 or 數組){}
11、請選擇正確答案
import java.util.*;
public class Example {
public static void main(String[] args) {
// insert code here
set.add(new Integer(2));
set.add(new Integer(1));
System.out.println(set);
}
}
請問要在第 4 行插入哪個語句,才能保證此程序輸出[1, 2]
A) Set set = new TreeSet();
B) Map set = new HashMap();
C) Set set = new SortedSet();
D) List set = new LinkedList();
答案:A
12、下面關於Java集合框架說法錯誤的是( )
A) Java集合框架主要包括Collection和Map兩類
B) Collection描述集合,Map描述映射
C) Collection主要包括Set和List兩類
D) Set內元素無序,而List內元素有序,但元素均不可重複
答案:D
13、在JAVA語言網絡編程中,URL類是在java.net包中,該類中提供了許多方法用來訪問URL對象的各種資源,下列哪個用來獲取URL中的端口號()
A) getFile()
B) getProtocol()
C) getHost()
D) getPort()
答案:D
14、關於 Java流的敘述錯誤的是( )
A) 流是 Java 語言處理I/O的方式
B) 從概念上講,流就是一系列的字節序列或字符序列
C) 引入流的概念的目的是使得在處理不同的數據輸入輸出時編程更加方便
D) 流是Java惟一的非面向對象的語言構成
答案:D
15、以下關於File類說法不正確的是:
A) 一個File 對象代表了操作系統中的一個文件或者文件夾
B) 可以使用File對象創建和刪除一個文件
C) 可以使用File對象創建和刪除一個文件夾
D) 當一個File對象被垃圾回收時,系統上對應的文件或文件夾也被刪除
答案:D
16、JAVA語言中的套接字(Socket)是一種基於網絡進程通信的接口,是網絡通信協議的一種應用。它有兩個主要類,下列哪個用來實現客戶端的通信功能()
A) ServerSocket類
B) URL類
C) Socket類
D) UDP
答案:C
17、下列創建InputStreamReader對象的方法中哪些是正確的方法?( )(選擇兩項)
A. new InputStreamReader(new FileInputStream(“data”));
B. new InputStreamReader(new FileReader(“data”));
C. new InputStreamReader(new BufferedReader(“data”));
D. new InputStreamReader(System.in);
答案:AD
new InputStreamReader()的參數必須是InputStream類型(或其子類類型,如FileInputstream,且e.txt是一個文件(file),所以只能用FileInputstream讀入,而不能用DataInputstream,DataInputstream只能讀入簡單類型的變量)
18、有如下代碼:
public class TestFile{
public static void main(String args[]){
File file = new File(“chp13/corejava.txt”);
}
}
請選擇一個正確答案:( )
A) corejava.txt 文件在系統中被創建
B) 在windows系統上運行出錯,因爲路徑分隔符不正確
C) corejava.txt文件在系統中沒有被創建
D) 如果corejava.txt文件已存在,則拋出一個異常
答案:C
new File是創建了一個File對象。沒有創建文件。
一般用file.exists()判斷 確定不存在後 調用 createFile會創建文件。
創建目錄文件的話 用 file.mkdir或mkdirs
19、(對象序列化)有以下代碼:
import java.io.*;
class Address{
private String addressName;
private String zipCode;
//帶參構造方法…
//get/set 方法…
}
class Worker implements Serializable{
private String name;
private int age;
private Address address;
//帶參構造方法…
//get/set 方法…
}
public class TestSerializable {
public static void main(String args[]) throws Exception{
Address addr = new Address("Beijing", "100000");
Worker w = new Worker("Tom", 18, addr);
ObjectOutputStream oout = new ObjectOutputStream(new FileOutputStream("fout.dat"));
oout.writeObject(w);
oout.close();
}
}
選擇正確答案 ( )
A) 該程序編譯出錯
B) 編譯正常,運行時異常
C) 編譯正常,運行時也正常。
D) 以上都不正解
答案:B
//調用了其他的類對象,調用的類對象必須一併實現Serializable。
//所以Address類也要實現Serializable接口
Exception in thread “main” java.io.NotSerializableException: Test20170424.Address
20、下面關於流描述不正確的是( )
A) 按流向分爲輸入流和輸出流
B) 輸入流表示將外部數據讀入程序
C) 輸出流表示由程序寫出到外部
D)複製文件是由外部寫到外部,和輸入輸出無關
答案:D
21、下面代碼
public class Foo implements Runnable {
public void run (Thread t) {
System.out.println("Running.");
}
public static void main (String[] args) {
new Thread(new Foo()).start();
}
}
執行結果是( )
A) 運行時拋出一個異常
B) 程序能夠運行,但是沒有任何輸出
C) 沒有實現 Runnable接口中的方法導致編譯錯誤
D) 程序運行後輸出“Running”
答案:C
22、有以下程序段:
public class MyThread extends Thread {
public static void main(String args[]) {
MyThread t = new MyThread();
MyThread s = new MyThread();
t.start();
System.out.print("one.");
s.start();
System.out.print("two.");
}
public void run() {
System.out.print("Thread");
}
}
則下面正確的選項是()
A) 編譯失敗
B) 程序運行結果爲:one.Threadtwo.Thread
C) 程序運行結果是:one.two.ThreaThread
D)程序運行結果不確定
答案:D
23、有以下代碼
public class Example implements Runnable {
public void run() {
while(true) {
}
}
public static void main(String args[]) {
Example ex1 = new Example();
Example ex2 = new Example();
Example ex3 = new Example();
ex1.run();
ex2.run();
ex3.run();
}
}
選擇正確答案:
A) 代碼編譯失敗,因爲ex2.run()無法獲得執行
B) 代碼編譯成功,存在3 個可運行的線程
C) 代碼編譯成功,存在1個可運行的線程
D) 以上都不正確
答案:C
24、有如下代碼
public class Example {
public static void main(String args[]) {
Thread.sleep(3000);
System.out.println(“sleep”);
}
}
選擇正確答案:
A) 編譯出錯
B) 運行時異常
C) 正常編譯運行,輸出sleep
D) 正常編譯運行,但沒有內容輸出
答案:A
//沒有處理異常
25、有以下代碼
public class Example implements Runnable {
public static void main(String args[]) {
Thread t = new Thread(new Example());
t.start();
}
public void run(int limit) {
for (int x = 0; x<limit; x++) {
System.out.println(x);
}
}
}
選擇正確答案:
A) 打印輸出,從0 至limit
B) 代碼編譯失敗,如果去掉implements Runnable,可使代碼編譯成功。
C) 代碼編譯失敗,因爲沒有正確實現Runnable接口
D) 代碼編譯失敗,如果聲明類爲抽象類,可使代碼編譯成功。
答案:C
二、填空題
1、Java中編程實現多線程應用有兩種途徑:一種是用 ( ) 類的子類創建線程,另一種是用Thread類結合( ) 接口創建線程。
Thread、Runnable
2、當一個線程處於()狀態時,它僅僅是一個空的線程對象,系統不爲它分配資源。一個正在執行的線程可能被人爲地中斷,讓出CPU的使用權,暫時中止自己的執行,進入 ()狀態。處於()狀態的線程不具有繼續運行的能力。
創建、阻塞、死亡
3、一個try語句塊後必須跟()語句塊,()語句塊可以沒有,自定義異常類必須繼承( )類及其子類,異常處理機制允許根據具體的情況選擇在何處處理異常,可以在()捕獲並處理,也可以用throws子句把他交給()處理。
catch、finally、Exception、try…catch、調用者
4、在集合中()是一種鍵值對映射的結構,()集合是有序可重複的,()集合無序不可重複。
Map、List、Set
5、異常分爲()異常和()異常,()類與異常根類。
編譯、運行、Exception
6、Internet上的每一臺計算機必須能夠唯一地標誌出來,因此標準化的第一個部分就是()地址,()可以確定網絡資料的唯一地址,()類用於創建服務器端的通信對象,()類用於創建客戶湍的通信對象。
IP、URL、ServerSocket、Socket
三、問題題
1、簡述List的實現類ArrayList與LinkedList的區別。
1.ArrayList是基於數組,LinkedList基於鏈表實現。
2.對於隨機訪問get和set,ArrayList覺得優於LinkedList,因爲LinkedList要移動指針。
3.對於新增和刪除操作add和remove,LinedList比較佔優勢,因爲ArrayList要移動數據。
2、請描述你所理解的字節流和字符流
1.所有的字節流都是InputStream和OutputStream的子類,主要用在處理二進制數據,它是按字節來處理的。
2.所有的字符流都是FileReader和FileWriter的子類,主要用在處理文本數據,它是按字符來處理的。
3.簡述RuntimeException和非RuntimeException的區別。
1、RuntimeException異常在編譯的時候不會給出警告,而是在運行期發生的,比如類型轉型異常。
2、非RuntimeException又稱編譯期異常,在編寫程序的過程中發生的異常,是必須要處理的異常,比如:Class.forName("");
4、簡述多線程的生命週期
線程生命週期可以分爲5個狀態:
1、New(新生)
2、ready(就緒)
3、Runnable(可運行):爲了方便分析,還可將其分爲:Runnable與Running。
4、blocked(被阻塞)
5、Dead(死亡)
與人有生老病死一樣,線程也同樣要經歷開始(等待)、就緒、運行、掛起和停止五種不同的狀態。這五種狀態都可以通過Thread類中的方法進行控制
5、簡述你對網絡通信的理解
網絡是用物理鏈路將各個孤立的工作站或主機相連在一起,組成數據鏈路,從而達到資源共享和通信的目的。通信是人與人之間通過某種媒體進行的信息交流與傳遞。網絡通信是通過網絡將各個孤立的設備進行連接,通過信息交換實現人與人,人與計算機,計算機與計算機之間的通信。