
一、 以下的變量定義語句中,合法的是()
A.byte=128
B.boolean=null
C.long a=123L
D.double=0.9239d
解析:
- byte表示的范圍為[-128,127];
- boolean的取值只能是true或false
- D選項(xiàng)缺少變量名
答案:C
二、若在某一個(gè)類定義中定義有如下的方法: abstract void performDial( );該方法屬于()
A.本地方法
B.最終方法
C.解態(tài)方法
D.抽象方法
解析:
本地方法:簡單地講,一個(gè)
native Method就是一個(gè)java調(diào)用非java代碼的接口;native方法表示該方法要用另外一種依賴平臺(tái)的編程語言實(shí)現(xiàn)。最終方法:
final void B(){},這樣定義的方法就是最終方法,最終方法在子類中不可以被重寫,也就是說,如果有個(gè)子類繼承了這個(gè)最終方法所在的類,那么這個(gè)子類中不能出現(xiàn)void B(){}這樣的方法。最終類:
final class A {},這樣定義的類就是最終類,最終類不能被繼承。abstract修飾抽象類。
答案:D
三、 有以下程序片段,下列哪個(gè)選項(xiàng)不能插入到行 1 。( )。
1.
2.public class A {
3. //do sth
4.}
A.
public class MainClass{ }
B.package mine;
C.class ANotherClass{ }
D.import java.util.*;
解析:
- Java的一個(gè)源程序只能有一個(gè)public類存在,且類名與文件名相同。java程序是從main方法開始執(zhí)行的,public為類加載器提供入口,然后找到public類中的main方法開始執(zhí)行。如果存在多個(gè)public類,程序?qū)⒉恢缽哪睦镩_始執(zhí)行。
- 注意:內(nèi)部類是可以public的,因?yàn)閮?nèi)部類是作為外部類的成員而存在。
答案:A

四、執(zhí)行如下程序,輸出結(jié)果是( )
public class Test_Thread {
public static void main(String[] args) {
Test mv = new Test();
Thread t1 = new ThreadExample(mv);
Thread t2 = new ThreadExample(mv);
Thread t3 = new ThreadExample(mv);
t1.start();
t2.start();
t3.start();
}
}
class Test{
private int data;
int result = 0;
public void m(){
result += 2;
data += 2;
System.out.print(result + " " + data);
}
}
class ThreadExample extends Thread{
private Test mv;
public ThreadExample(Test mv) {
this.mv = mv;
}
@Override
public void run() {
synchronized (mv) {
mv.m();
}
}
}
A.0 22 44 6
B.2 42 42 4
C.2 24 46 6
D.4 44 46 6
解析:
Test mv =newTest()聲明并初始化對(duì)data賦默認(rèn)值
使用synchronized關(guān)鍵字加同步鎖線程依次操作m()
t1.start();使得result=2,data=2,輸出即為2 2
t2.start();使得result=4,data=4,輸出即為4 4
t3.start();使得result=6,data=6,輸出即為6 6
System.out.print(result +" "+ data);是print()方法不會(huì)換行,輸出結(jié)果為2 24 46 6
答案:C
五、以下哪項(xiàng)不屬于java類加載過程?
A.生成java.lang.Class對(duì)象
B.int類型對(duì)象成員變量賦予默認(rèn)值
C.執(zhí)行static塊代碼
D.類方法解析
解析:
類加載過程 :
- 類從被加載到虛擬機(jī)內(nèi)存中開始,到卸載出內(nèi)存為止,它的整個(gè)生命周期包括:加載(Loading)、驗(yàn)證(Verification)、準(zhǔn)備(Preparation)、解析(Resolution)、初始化(Initialization)、使用(Using)和卸載(Unloading)7個(gè)階段。其中準(zhǔn)備、驗(yàn)證、解析3個(gè)部分統(tǒng)稱為連接(Linking)。
類加載過程
引用內(nèi)容鏈接:
http://blog.csdn.net/u013256816/article/details/50829596
選項(xiàng) :
生成java.lang.Class對(duì)象是在加載時(shí)進(jìn)行的。生成Class對(duì)象作為方法區(qū)這個(gè)類的各種數(shù)據(jù)的訪問入口。
既然是對(duì)象成員,那么肯定在實(shí)例化對(duì)象后才有。在類加載的時(shí)候會(huì)賦予初值的是類變量,而非對(duì)象成員。
類方法解析發(fā)生在解析過程。
答案:B
六、下面哪個(gè)語句是創(chuàng)建數(shù)組的正確語句?( )
A.
float f[][] = new float[6][6];
B.float []f[] = new float[6][6];
C.float f[][] = new float[][6];
D.float [][]f = new float[6][6];
E.float [][]f = new float[6][];
解析:
數(shù)組命名時(shí)名稱與
[]可以隨意排列,但聲明的二維數(shù)組中第一個(gè)中括號(hào)中必須要有值,它代表的是在該二維數(shù)組中有多少個(gè)一維數(shù)組。-
如果定義一個(gè)這樣的二維數(shù)組
int a[3][4]={{1,3,5,7},{9,11,13,15},{17,19,21,23}};則其在內(nèi)存中的表示可能下面這樣的。
001.png
答案:A B D E
引用內(nèi)容鏈接:
https://www.cnblogs.com/bewolf/p/4321642.html
七、下面哪些屬于JSP內(nèi)置對(duì)象及方法?
A.
request
B.out
C.application
D.config
解析:
JSP 有 9 個(gè)內(nèi)置對(duì)象:
- request:封裝客戶端的請求,其中包含來自 GET 或 POST 請求的參數(shù);
- response:封裝服務(wù)器對(duì)客戶端的響應(yīng);
- session:封裝用戶會(huì)話的對(duì)象;
- application:封裝服務(wù)器運(yùn)行環(huán)境的對(duì)象;
- out:輸出服務(wù)器響應(yīng)的輸出流對(duì)象;
- config:Web 應(yīng)用的配置對(duì)象;
- pageContext:通過該對(duì)象可以獲取其他對(duì)象;
- page:JSP 頁面本身(相當(dāng)于 Java 程序中的 this);
- exception:封裝頁面拋出異常的對(duì)象
答案:A B C D
八、final、finally和finalize的區(qū)別中,下述說法正確的有?
A.final用于聲明屬性,方法和類,分別表示屬性不可變,方法不可覆蓋,類不可繼承。
B.finally是異常處理語句結(jié)構(gòu)的一部分,表示總是執(zhí)行。
C.finalize是Object類的一個(gè)方法,在垃圾收集器執(zhí)行的時(shí)候會(huì)調(diào)用被回收對(duì)象的此方法,可以覆蓋此方法提供垃圾收集時(shí)的其他資源的回收,例如關(guān)閉文件等。
D.引用變量被final修飾之后,不能再指向其他對(duì)象,它指向的對(duì)象的內(nèi)容也是不可變的。
解析:
- B選項(xiàng)→
PS:finally 是無論是否有異常都會(huì)被處理的語句,除非在 finally 前存在被執(zhí)行的System.exit(int i)時(shí)除外。 - C選項(xiàng):JVM 不保證此方法總被調(diào)用
- D選項(xiàng):使用final修飾一個(gè)變量時(shí),是指引用變量不能變,引用變量所指向?qū)ο笾械膬?nèi)容可以改變。
答案:A B
九、下列方法中哪個(gè)是線程執(zhí)行的方法? ()
A.
run()
B.start()
C.sleep()
D.suspend()
解析:
- run()方法用來執(zhí)行線程體中具體的內(nèi)容;
start()方法用來啟動(dòng)線程對(duì)象,使其進(jìn)入就緒狀態(tài)
sleep()方法用來使線程進(jìn)入睡眠狀態(tài)
suspend()方法用來使線程掛起,需要通過resume()方法使其重新啟動(dòng),不推薦使用。
注:線程的生命周期及五種基本狀態(tài):
關(guān)于Java中線程的生命周期,首先看一下下面這張較為經(jīng)典的圖:

- Java線程具有五種基本狀態(tài):
新建狀態(tài)(New):當(dāng)線程對(duì)象創(chuàng)建后,即進(jìn)入了新建狀態(tài),如:
Thread t = new MyThread();就緒狀態(tài)(Runnable):當(dāng)調(diào)用線程對(duì)象的
start()方法(t.start();),線程即進(jìn)入就緒狀態(tài)。處于就緒狀態(tài)的線程,只是說明此線程已經(jīng)做好了準(zhǔn)備,隨時(shí)等待CPU調(diào)度執(zhí)行,并不是說執(zhí)行了t.start()此線程立即就會(huì)執(zhí)行;運(yùn)行狀態(tài)(Running):當(dāng)CPU開始調(diào)度處于就緒狀態(tài)的線程時(shí),此時(shí)線程才得以真正執(zhí)行,即進(jìn)入到運(yùn)行狀態(tài)。注:就 緒狀態(tài)是進(jìn)入到運(yùn)行狀態(tài)的唯一入口,也就是說,線程要想進(jìn)入運(yùn)行狀態(tài)執(zhí)行,首先必須處于就緒狀態(tài)中;
阻塞狀態(tài)(Blocked):處于運(yùn)行狀態(tài)中的線程由于某種原因,暫時(shí)放棄對(duì)CPU的使用權(quán),停止執(zhí)行,此時(shí)進(jìn)入阻塞狀態(tài),直到其進(jìn)入到就緒狀態(tài),才 有機(jī)會(huì)再次被CPU調(diào)用以進(jìn)入到運(yùn)行狀態(tài)。根據(jù)阻塞產(chǎn)生的原因不同,阻塞狀態(tài)又可以分為三種:
1.等待阻塞:運(yùn)行狀態(tài)中的線程執(zhí)行wait()方法,使本線程進(jìn)入到等待阻塞狀態(tài);
2.同步阻塞 -- 線程在獲取synchronized同步鎖失敗(因?yàn)殒i被其它線程所占用),它會(huì)進(jìn)入同步阻塞狀態(tài);
3.其他阻塞 -- 通過調(diào)用線程的sleep()或join()或發(fā)出了I/O請求時(shí),線程會(huì)進(jìn)入到阻塞狀態(tài)。當(dāng)sleep()狀態(tài)超時(shí)、join()等待線程終止或者超時(shí)、或者I/O處理完畢時(shí),線程重新轉(zhuǎn)入就緒狀態(tài)。死亡狀態(tài)(Dead):線程執(zhí)行完了或者因異常退出了
run()方法,該線程結(jié)束生命周期。
引用內(nèi)容鏈接:
https://www.cnblogs.com/lwbqqyumidi/p/3804883.html
答案:A
十、以下哪些類是線程安全的()
A
Vector
B.HashMap
C.ArrayList
D.StringBuffer
E.Properties
解析:
java中的線程安全是什么:
- 就是線程同步的意思,就是當(dāng)一個(gè)程序?qū)σ粋€(gè)線程安全的方法或者語句進(jìn)行訪問的時(shí)候,其他的不能再對(duì)他進(jìn)行操作了,必須等到這次訪問結(jié)束以后才能對(duì)這個(gè)線程安全的方法進(jìn)行訪問
線程安全一般會(huì)涉及到synchronized。
- 查看源代碼,可以發(fā)現(xiàn)Vector,StringBuffer,Properties許多操作都加了
synchronized修飾。
答案:A D E

