一、 以下的變量定義語句中,合法的是()
A.byte=128
B.boolean=null
C.long a=123L
D.double=0.9239d
解析:
- byte表示的范圍為[-128,127];
- boolean的取值只能是true或false
- D選項缺少變量名
答案:C
二、若在某一個類定義中定義有如下的方法: abstract void performDial( );
該方法屬于()
A.本地方法
B.最終方法
C.解態方法
D.抽象方法
解析:
本地方法:簡單地講,一個
native Method
就是一個java調用非java代碼的接口;native方法表示該方法要用另外一種依賴平臺的編程語言實現。最終方法:
final void B(){}
,這樣定義的方法就是最終方法,最終方法在子類中不可以被重寫,也就是說,如果有個子類繼承了這個最終方法所在的類,那么這個子類中不能出現void B(){}
這樣的方法。最終類:
final class A {}
,這樣定義的類就是最終類,最終類不能被繼承。abstract
修飾抽象類。
答案:D
三、 有以下程序片段,下列哪個選項不能插入到行 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的一個源程序只能有一個public類存在,且類名與文件名相同。java程序是從main方法開始執行的,public為類加載器提供入口,然后找到public類中的main方法開始執行。如果存在多個public類,程序將不知道從哪里開始執行。
- 注意:內部類是可以public的,因為內部類是作為外部類的成員而存在。
答案:A
四、執行如下程序,輸出結果是( )
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()
聲明并初始化對data賦默認值
使用synchronized
關鍵字加同步鎖線程依次操作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()方法不會換行,輸出結果為2 24 46 6
答案:C
五、以下哪項不屬于java類加載過程?
A.生成java.lang.Class對象
B.int類型對象成員變量賦予默認值
C.執行static塊代碼
D.類方法解析
解析:
類加載過程 :
- 類從被加載到虛擬機內存中開始,到卸載出內存為止,它的整個生命周期包括:加載(Loading)、驗證(Verification)、準備(Preparation)、解析(Resolution)、初始化(Initialization)、使用(Using)和卸載(Unloading)7個階段。其中準備、驗證、解析3個部分統稱為連接(Linking)。
類加載過程
引用內容鏈接:
http://blog.csdn.net/u013256816/article/details/50829596
選項 :
生成java.lang.Class對象是在加載時進行的。生成Class對象作為方法區這個類的各種數據的訪問入口。
既然是對象成員,那么肯定在實例化對象后才有。在類加載的時候會賦予初值的是類變量,而非對象成員。
類方法解析發生在解析過程。
答案:B
六、下面哪個語句是創建數組的正確語句?( )
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][];
解析:
數組命名時名稱與
[]
可以隨意排列,但聲明的二維數組中第一個中括號中必須要有值,它代表的是在該二維數組中有多少個一維數組。-
如果定義一個這樣的二維數組
int a[3][4]={{1,3,5,7},{9,11,13,15},{17,19,21,23}};
則其在內存中的表示可能下面這樣的。
001.png
答案:A B D E
引用內容鏈接:
https://www.cnblogs.com/bewolf/p/4321642.html
七、下面哪些屬于JSP內置對象及方法?
A.
request
B.out
C.application
D.config
解析:
JSP 有 9 個內置對象:
- request:封裝客戶端的請求,其中包含來自 GET 或 POST 請求的參數;
- response:封裝服務器對客戶端的響應;
- session:封裝用戶會話的對象;
- application:封裝服務器運行環境的對象;
- out:輸出服務器響應的輸出流對象;
- config:Web 應用的配置對象;
- pageContext:通過該對象可以獲取其他對象;
- page:JSP 頁面本身(相當于 Java 程序中的 this);
- exception:封裝頁面拋出異常的對象
答案:A B C D
八、final、finally和finalize的區別中,下述說法正確的有?
A.final用于聲明屬性,方法和類,分別表示屬性不可變,方法不可覆蓋,類不可繼承。
B.finally是異常處理語句結構的一部分,表示總是執行。
C.finalize是Object類的一個方法,在垃圾收集器執行的時候會調用被回收對象的此方法,可以覆蓋此方法提供垃圾收集時的其他資源的回收,例如關閉文件等。
D.引用變量被final修飾之后,不能再指向其他對象,它指向的對象的內容也是不可變的。
解析:
- B選項→
PS:finally 是無論是否有異常都會被處理的語句,除非在 finally 前存在被執行的System.exit(int i)時除外。 - C選項:JVM 不保證此方法總被調用
- D選項:使用final修飾一個變量時,是指引用變量不能變,引用變量所指向對象中的內容可以改變。
答案:A B
九、下列方法中哪個是線程執行的方法? ()
A.
run()
B.start()
C.sleep()
D.suspend()
解析:
- run()方法用來執行線程體中具體的內容;
start()方法用來啟動線程對象,使其進入就緒狀態
sleep()方法用來使線程進入睡眠狀態
suspend()方法用來使線程掛起,需要通過resume()方法使其重新啟動,不推薦使用。
注:線程的生命周期及五種基本狀態:
關于Java中線程的生命周期,首先看一下下面這張較為經典的圖:
- Java線程具有五種基本狀態:
新建狀態(New):當線程對象創建后,即進入了新建狀態,如:
Thread t = new MyThread();
就緒狀態(Runnable):當調用線程對象的
start()
方法(t.start();
),線程即進入就緒狀態。處于就緒狀態的線程,只是說明此線程已經做好了準備,隨時等待CPU調度執行,并不是說執行了t.start()
此線程立即就會執行;運行狀態(Running):當CPU開始調度處于就緒狀態的線程時,此時線程才得以真正執行,即進入到運行狀態。注:就 緒狀態是進入到運行狀態的唯一入口,也就是說,線程要想進入運行狀態執行,首先必須處于就緒狀態中;
阻塞狀態(Blocked):處于運行狀態中的線程由于某種原因,暫時放棄對CPU的使用權,停止執行,此時進入阻塞狀態,直到其進入到就緒狀態,才 有機會再次被CPU調用以進入到運行狀態。根據阻塞產生的原因不同,阻塞狀態又可以分為三種:
1.等待阻塞:運行狀態中的線程執行wait()
方法,使本線程進入到等待阻塞狀態;
2.同步阻塞 -- 線程在獲取synchronized
同步鎖失敗(因為鎖被其它線程所占用),它會進入同步阻塞狀態;
3.其他阻塞 -- 通過調用線程的sleep()
或join()
或發出了I/O請求時,線程會進入到阻塞狀態。當sleep()
狀態超時、join()
等待線程終止或者超時、或者I/O處理完畢時,線程重新轉入就緒狀態。死亡狀態(Dead):線程執行完了或者因異常退出了
run()
方法,該線程結束生命周期。
引用內容鏈接:
https://www.cnblogs.com/lwbqqyumidi/p/3804883.html
答案:A
十、以下哪些類是線程安全的()
A
Vector
B.HashMap
C.ArrayList
D.StringBuffer
E.Properties
解析:
java中的線程安全是什么:
- 就是線程同步的意思,就是當一個程序對一個線程安全的方法或者語句進行訪問的時候,其他的不能再對他進行操作了,必須等到這次訪問結束以后才能對這個線程安全的方法進行訪問
線程安全一般會涉及到synchronized
。
- 查看源代碼,可以發現Vector,StringBuffer,Properties許多操作都加了
synchronized
修飾。
答案:A D E