- 相關(guān)推薦
JAVA經(jīng)典筆試題目及答案(精選7套)
編程語言可以簡單的理解為一種計算機(jī)和人都能識別的語言。一種計算機(jī)語言讓程序員能夠準(zhǔn)確地定義計算機(jī)所需要使用的數(shù)據(jù),并精確地定義在不同情況下所應(yīng)當(dāng)采取的行動,下面是小編收集的JAVA經(jīng)典筆試題目及答案,歡迎大家閱讀和參考。
JAVA筆試題目及答案1
一、選擇題(共50題,每題1.5分,共75分。多選題選不全或選錯都不得分。)
1. 以下屬于面向?qū)ο蟮奶卣鞯氖?C,D)。(兩項)
A) 重載
B) 重寫
C) 封裝
D) 繼承
2. 以下代碼運(yùn)行輸出是(C)
public class Person{
private String name=”Person”;
int age=0;
}
public class Child extends Person{
public String grade;
public static void main(String[] args){
Person p = new Child();
System.out.println(p.name);
}
}
A) 輸出:Person
B) 沒有輸出
C) 編譯出錯
D) 運(yùn)行出錯
3. 在使用super 和this關(guān)鍵字時,以下描述正確的是(A)
A) 在子類構(gòu)造方法中使用super()顯示調(diào)用父類的構(gòu)造方法,super()必須寫在子類構(gòu)造方法的第一行,否則編譯不通過
B) super()和this()不一定要放在構(gòu)造方法內(nèi)第一行
C) this()和super()可以同時出現(xiàn)在一個構(gòu)造函數(shù)中
D) this()和super()可以在static環(huán)境中使用,包括static方法和static語句塊
4. 以下對封裝的描述正確的是(D)
A) 只能對一個類中的方法進(jìn)行封裝,不能對屬性進(jìn)行封裝
C) 封裝的意義不大,因此在編碼時盡量不要使用
D) 封裝的主要作用在于對外隱藏內(nèi)部實(shí)現(xiàn)細(xì)節(jié),增強(qiáng)程序的安全性
5. 以下對繼承的描述錯誤的是(A)
A) Java中的繼承允許一個子類繼承多個父類
B) 父類更具有通用性,子類更具體
C) Java中的繼承存在著傳遞性
D) 當(dāng)實(shí)例化子類時會遞歸調(diào)用父類中的構(gòu)造方法
6. 以下程序的運(yùn)行結(jié)果是(D)
class Person{
public Person(){
System.out.println(“this is a Person”);
}
}
public class Teacher extends Person{
private String name=”tom”;
public Teacher(){
System.out.println(“this is a teacher”);
super();
}
public static void main(String[] args){
Teacher teacher = new Teacher();
System.out.println(this.name);
}
}
A) this is a Person
this is a teacher
tom
B) this is a teacher
this is a Person
tom
C) 運(yùn)行出錯
D) 編譯有兩處錯誤
7. 以下說法錯誤的是()
A) super.方法()可以調(diào)用父類的所有非私有方法
B) super()可以調(diào)用父類的所有非私有構(gòu)造函數(shù)
C) super.屬性可以調(diào)用父類的所有非私有屬性
D) this和super關(guān)鍵字可以出現(xiàn)在同一個構(gòu)造函數(shù)中
8. 以下關(guān)于final關(guān)鍵字說法錯誤的是(A,C)(兩項)
A) final是java中的修飾符,可以修飾類、接口、抽象類、方法和屬性
B) final修飾的類肯定不能被繼承
C) final修飾的方法不能被重載
D) final修飾的變量不允許被再次賦值
9. 訪問修飾符作用范圍由大到小是(D)
A) private-default-protected-public
B) public-default-protected-private
C) private-protected-default-public
D) public-protected-default-private
10. 以下(D)不是Object類的方法
A) clone()
B) finalize()
C) toString()
D) hasNext()
11. 多態(tài)的表現(xiàn)形式有(A)
A) 重寫
B) 抽象
C) 繼承
D) 封裝
12. 以下對重載描述錯誤的是()
A) 方法重載只能發(fā)生在一個類的內(nèi)部
B) 構(gòu)造方法不能重載
C) 重載要求方法名相同,參數(shù)列表不同
D) 方法的返回值類型不是區(qū)分方法重載的條件
13. 以下(D)添加到ComputerBook中不會出錯
class Book{
protected int getPrice(){
return 30;
}
}
public class ComputerBook extends Book{
}
A) protected float getPrice(){}
B) protected int getPrice(int page){}
C) int getPrice(){}
D) public int getPrice(){return 10;}
14. 以下對抽象類的描述正確的是(C)
A) 抽象類沒有構(gòu)造方法
B) 抽象類必須提供抽象方法
C) 有抽象方法的類一定是抽象類
D) 抽象類可以通過new關(guān)鍵字直接實(shí)例化
15. 以下對接口描述錯誤的有(D)
A) 接口沒有提供構(gòu)造方法
B) 接口中的方法默認(rèn)使用public、abstract修飾
C) 接口中的屬性默認(rèn)使用public、static、final修飾
D) 接口不允許多繼承
16. 以下代碼,描述正確的有(A)
interface IDemo{
public static final String name;1
void print();2
public void getInfo();3
}
abstract class Person implements IDemo{4
public void print(){
}
}
A) 第1行錯誤,沒有給變量賦值
B) 第2行錯誤,方法沒有修飾符
C) 第4行錯誤,沒有實(shí)現(xiàn)接口的全部方法
D) 第3行錯誤,沒有方法的實(shí)現(xiàn)
17. 接口和抽象類描述正確的有(B,C)(兩項)
A) 抽象類沒有構(gòu)造函數(shù)
B) 接口沒有構(gòu)造函數(shù)
C) 抽象類不允許多繼承
D) 接口中的方法可以有方法體
18. 以下描述錯誤的有(C)
A) abstract 可以修飾類、接口、方法
B) abstract修飾的類主要用于被繼承
C) abstract 可以修飾變量
D) abstract修飾的類,其子類也可以是abstract修飾的
19. 以下描述正確的有(B)
A) 方法的重寫應(yīng)用在一個類的內(nèi)部
B) 方法的重載與返回值類型無關(guān)
C) 構(gòu)造方法不能重載
D) 構(gòu)造方法可以重寫
20. 以下程序運(yùn)行結(jié)果是(A)
public class Test extends Father{
private String name=”test”;
public static void main(String[] args){
Test test = new Test();
System.out.println(test.getName());
}
}
class Father{
private String name=”father”;
public String getName() {
return name;
}
}
A) father
B) test
C) 編譯出錯
D) 運(yùn)行出錯,無輸出
21. 以下對異常的描述不正確的有(C)
A) 異常分為Error和Exception
B) Throwable是所有異常類的父類
C) Exception是所有異常類父類
D) Exception包括RuntimeException和RuntimeException之外的異常
22. 在try-catch-finally語句塊中,以下可以單獨(dú)與finally一起使用的是(B)
A) catch
B) try
C) throws
D) throw
23. 下面代碼運(yùn)行結(jié)果是(B)
public class Demo{
public int add(int a,int b){
try{
return a+b;
}catch(Exception e){
System.out.println(“catch 語句塊”);
}finally{
System.out.println(“finally 語句塊”);
}
return 0;
}
public static void main(String[] args){
Demo demo = new Demo();
System.out.println(“和是:”+demo.add(9,34));
}
}
A) 編譯異常
B) finally語句塊 和是:43
C) 和是:43 finally語句塊
D) catch語句塊 和是:43
24. 以下描述不正確的有(D)
A) try塊不可以省略
B) 可以使用多重catch塊
C) finally塊可以省略
D) catch塊和finally塊可以同時省略
25. 以下對自定義異常描述正確的是(C)
A) 自定義異常必須繼承Exception
B) 自定義異?梢岳^承自Error
C) 自定義異?梢愿用鞔_定位異常出錯的位置和給出詳細(xì)出錯信息
D) 程序中已經(jīng)提供了豐富的異常類,使用自定義異常沒有意義
26. 以下程序運(yùn)行結(jié)果是(D)
public class Test {
public int div(int a, int b) {
try {
return a / b;
}catch(Exception e){
System.out.println(“Exception”);
}catch(NullPointerException e){
System.out.println(“ArithmeticException”);
}
catch (ArithmeticException e) {
System.out.println(“ArithmeticException”);
} finally {
System.out.println(“finally”);
}
return 0;
}
public static void main(String[] args) {
Test demo = new Test();
System.out.println(“商是:” + demo.div(9, 0));
}
}
A) Exception finally 商是:0
B) ArithmeticException finally 商是:0
C) finally商是:0
D) 編譯報錯
27. 以下對TCP和UDP描述正確的是(D)
A) TCP不能提供數(shù)據(jù)的可靠性
B) UDP能夠保證數(shù)據(jù)庫的可靠性
C) TCP數(shù)據(jù)傳輸效率高于UDP
D) UDP數(shù)據(jù)傳輸效率高于TCP
28. 在Java中,下面對于構(gòu)造函數(shù)的描述正確的是(D)。(選擇一項)
A) 類必須顯示定義構(gòu)造函數(shù)
B) 構(gòu)造函數(shù)的返回類型是void
C) 構(gòu)造函數(shù)和類有相同的名稱,并且不能帶任何參數(shù)
D) 一個類可以定義多個構(gòu)造函數(shù)
29. 根據(jù)下面的代碼,
String s = null;
會拋出NullPointerException異常的有(A,C)。[兩項]
A) if( (s!=null) & (s.length()>0) )
B) if( (s!=null) & & (s.length()>0) )
C) if( (s==null) | (s.length()==0) )
D) if( (s==null) || (s.length()==0) )
30. .在Java中,關(guān)于HashMap類的描述,以下廉潔錯誤的是( B )。
A) HashMap使用鍵/值得形式保存數(shù)據(jù)
B) HashMap 能夠保證其中元素的順序
C) HashMap允許將null用作鍵
D) HashMap允許將null用作值
31. 下列選項中關(guān)于java中super關(guān)鍵字的說法錯誤的是( B )
A) super關(guān)鍵字是在子類對象內(nèi)部指代其父類對象的引用
B) super關(guān)鍵字不僅可以指代子類的直接父類,還可以指代父類的父類
C) 子類可以通過super關(guān)鍵字調(diào)用父類的方法
D) 子類可以通過super關(guān)鍵字調(diào)用父類的屬性
32. 在Java中,以下代碼( A )正確地創(chuàng)建了一個InputStreamReader對象。
A) InuptStreamReader(new FileInputStream(“1.dat”));
B) InuptStreamReader(new FileReader(“1.dat”));
C) InuptStreamReader(new BufferReader(“1.dat”));
D) InuptStreamReader (“1.dat”);
33. 在Java中,( D )類提供定位本地文件系統(tǒng),對文件或目錄及其屬性進(jìn)行基本操作。
A) FileInputStream
B) FileReader
C) FileWriter
D) File
34. Java中的集合類包括ArrayList、LinkedList、HashMap等類,下列關(guān)于集合類描述錯誤的是(C)(選擇一項)
A) ArrayList和LinkedList均實(shí)現(xiàn)了List接口
B) ArrayList的訪問速度比LinkedList快
C) 添加和刪除元素時,ArrayList的表現(xiàn)更佳
D) HashMap實(shí)現(xiàn)Map接口,它允許任何類型的鍵和值對象,并允許將null用作鍵或值
35. 在Java中開發(fā)JDBC應(yīng)用程序時,使用DriverManager類的getConnection()方法
建立與數(shù)據(jù)源的連接語句為:
Connection con = DriverManager.getConnection(“jdbc:odbc:news”);
URL連接中的”n ews”表示的是(C)(選擇一項)
A) 數(shù)據(jù)庫中表的名稱
B) 數(shù)據(jù)庫服務(wù)器的機(jī)器名
C) 數(shù)據(jù)源的名稱
D) 用戶名
36. 在Java中,JDBCAPI定義了一組用于與數(shù)據(jù)庫進(jìn)行通信的接口和類,它們包括在(B)包中。
A) java.lang
B) java.sql
C) java.util
D) java.math
37. Java中,以下( B )接口以鍵_值對的方式存儲對象。
A) java.util.Collection
B) java.util.Map
C) java.util.List
D) java.util.Set
38. 以下關(guān)于對象序列化描述正確的是( C,D )[兩項]
A) 使用FileOutputStream可以將對象進(jìn)行傳輸
B) 使用PrintWriter可以將對象進(jìn)行傳輸
C) 使用ObjectOutputStream類完成對象存儲,使用ObjectInputStream類完成對象讀取
D) 對象序列化的所屬類需要實(shí)現(xiàn)Serializable接口
39. 在Java中,( A )類可用于創(chuàng)建鏈表數(shù)據(jù)結(jié)構(gòu)的對象。
A) LinkedList
B) ArrayList
C) Collection
D) HashMap
40. 分析下面這段Java代碼,它的運(yùn)行結(jié)果是( C )。
Import java.io.*;
Public class B{
Public static void main(string [] args){
int i=12;
System.out.println(i+=i-=i*=i);}}
A) 100
B) 0
C) -120
D) 程序無法編譯
41. 使用JDBC事務(wù)的步驟是(C,A,B,D)(多選)
A) 取消Connection的事務(wù)自動提交方式
B) 發(fā)生異;貪L事務(wù)
C) 獲取Connection對象
D) 操作完畢提交事務(wù)
42. 以下對JDBC事務(wù)描述錯誤的是( B )
A) JDBC事務(wù)屬于JAVA事務(wù)的一種
B) JDBC事務(wù)屬于容器事務(wù)類型
C) JDBC事務(wù)可以保證操作的完整性和一致性
D) JDBC事務(wù)是由Connection發(fā)起的,并由Connection控制
43. 要通過可滾動的結(jié)果集更新數(shù)據(jù),以下正確的是(A
A) pst=con.prepareStatement(sql, ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE)
B) pst=con.prepareStatement(sql, ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY)
C) pst=con.prepareStatement(sql, Resu ltSet.TYPE_SCROLL_SENSITIVE)
D) pst=con.prepareStatement(sql, ResultSet.CONCUR_UPDATABLE)
44. 存儲過程pro有兩個參數(shù),第一個為輸入?yún)?shù),第二個為輸出參數(shù),以下代碼正確的是(C)
A) CallableStatement cst=con.prepareCall(“(call pro(?,?))”);
B) CallableStatement cst=con.prepareCall(“(call pro(?))”);
C) CallableStatement cst=con.prepareCall(“{call pro(?,?)}”);
D) CallableStatement cst=con.prepareCall(“{call pro(?,?,?)}”);
45. 以下描述正確的是(B)
A) CallableStatement是PreparedStatement的父接口
B) PreparedStatement是CallableStatement的父接口
C) CallableStatement是Statement的子接口
D) PreparedStatement是Statement的父接口
46. 要刪除book表中書籍(bookName)是”java”的記錄,以下代碼正確的是(A
String sql=” from book where bookName=?”;
PreparedStatement pst=con.preparedStatement(sql);
______________________________
pst.execute();
A) pst.setString(1,”java”);
B) pst.setString(0,”java”);
C) pst.setInt(0,”java”);
D) 以上選項都不正確
47. 獲取ResutlSet對象rst的第一行數(shù)據(jù),以下正確的是(B)
A) rst.hashNext();
B) rst.next();
C) rst.first();
D) rst.nextRow();
48. 以下可以正確獲取結(jié)果集的有(AD)(多選)
A) Statement sta=con.createStatement();
ResultSet rst=sta.executeQuery(“select * from book”);
B) Statement sta=con.createStatement(“select * from book”);
ResultSet rst=sta.executeQuery();
C) PreparedStatement pst=con.preparedStatement();
ResultSet rst=pst.executeQuery(“select * from book”);
D) PreparedStatement pst=con.preparedStatement(“select * from book”);
ResultSet rst=pst.executeQuery();
49. 以下負(fù)責(zé)建立與數(shù)據(jù)庫連接的是(D)
A) Statement
B) PreparedStatement
C) ResultSet
D) DriverManager
50. 使用JDBC連接數(shù)據(jù)庫的順序是(B,A,D,C,E)(多選)
A) 加載驅(qū)動
B) 導(dǎo)入驅(qū)動包
C) 發(fā)送并處理SQL語句
D) 建立于數(shù)據(jù)庫的連接
E 關(guān)閉連接
二、簡答題(各5分,共25分)
1、在java中如果聲明一個類為final,表示什么意思? (不計分)
答:final是最終的意思,final可用于定義變量、方法和類但含義不同,聲明為final的類不能被繼承。
1、父類的構(gòu)造方法是否可以被子類覆蓋(重寫)?
答:父類的構(gòu)造方法不可以被子類覆蓋,因為父類和子類的類名是不可能一樣的。
2、請講述String 和StringBuffer的區(qū)別。
答:String 類所定義的對象是用于存放”長度固定”的字符串。
StringBuffer類所定義的對象是用于存放”長度可變動”的字符串。
3、如果有兩個類A、B(注意不是接口),你想同時使用這兩個類的功能,那么你會如何編寫這個C類呢?
答:因為類A、B不是接口,所以是不可以直接繼承的,但可以將A、B類定義成父子類,那么C類就能實(shí)現(xiàn)A、B類的功能了。假如A為B的父類,B為C的父類,此時C就能實(shí)現(xiàn)A、B的功能。
4、結(jié)合Java視頻Lesson5(多線程),分析sleep()和wait()方法的區(qū)別。
答: Sleeping睡眠的意思 : sleep() 方法用來暫時中止執(zhí)行的線程。在睡眠后,線程將進(jìn)入就緒狀態(tài)。
waiting等待的意思: 如果調(diào)用了 wait() 方法,線程將處于等待狀態(tài)。用于在兩個或多個線程并發(fā)運(yùn)行時。
5、談?wù)勀銓Τ橄箢惡徒涌诘睦斫狻?/p>
答:定義抽象類的目的是提供可由其子類共享的一般形式、子類可以根據(jù)自身需要擴(kuò)展抽象類、抽象類不能實(shí)例化、抽象方法沒有函數(shù)體、抽象方法必須在子類中給出具體實(shí)現(xiàn)。他使用extends來繼承。
接口:一個接口允許一個類從幾個接口繼承而來,Java 程序一次只能繼承一個類但可以實(shí)現(xiàn)幾個接口,接口不能有任何具體的方法,接口也可用來定義可由類使用的一組常量。其實(shí)現(xiàn)方式是interface來實(shí)現(xiàn)。
JAVA筆試題目及答案2
1. 下面哪些是Thread類的方法()
A start() B run() C exit() D getPriority()
答案:ABD
解析:看Java API docs吧:http://docs.oracle.com/javase/7/docs/api/,exit()是System類的方法,如System.exit(0)。
2. 下面關(guān)于java.lang.Exception類的說法正確的是()
A 繼承自Throwable B Serialable CD 不記得,反正不正確
答案:A
解析:Java異常的基類為java.lang.Throwable,java.lang.Error和java.lang.Exception繼承 Throwable,RuntimeException和其它的Exception等繼承Exception,具體的RuntimeException繼承RuntimeException。
擴(kuò)展:錯誤和異常的區(qū)別(Error vs Exception)
1)java.lang.Error: Throwable的子類,用于標(biāo)記嚴(yán)重錯誤。合理的應(yīng)用程序不應(yīng)該去try/catch這種錯誤。絕大多數(shù)的錯誤都是非正常的,就根本不該出現(xiàn)的。
java.lang.Exception: Throwable的子類,用于指示一種合理的程序想去catch的條件。即它僅僅是一種程序運(yùn)行條件,而非嚴(yán)重錯誤,并且鼓勵用戶程序去catch它。
2) Error和RuntimeException 及其子類都是未檢查的異常(unchecked exceptions),而所有其他的Exception類都是檢查了的異常(checked exceptions).
checked exceptions:通常是從一個可以恢復(fù)的程序中拋出來的,并且最好能夠從這種異常中使用程序恢復(fù)。比如FileNotFoundException, ParseException等。檢查了的異常發(fā)生在編譯階段,必須要使用try…catch(或者throws)否則編譯不通過。
unchecked exceptions:通常是如果一切正常的話本不該發(fā)生的異常,但是的確發(fā)生了。發(fā)生在運(yùn)行期,具有不確定性,主要是由于程序的邏輯問題所引起的。比如ArrayIndexOutOfBoundException, ClassCastException等。從語言本身的角度講,程序不該去catch這類異常,雖然能夠從諸如RuntimeException這樣的異常中catch并恢復(fù),但是并不鼓勵終端程序員這么做,因為完全沒要必要。因為這類錯誤本身就是bug,應(yīng)該被修復(fù),出現(xiàn)此類錯誤時程序就應(yīng)該立即停止執(zhí)行。因此,面對Errors和unchecked exceptions應(yīng)該讓程序自動終止執(zhí)行,程序員不該做諸如try/catch這樣的事情,而是應(yīng)該查明原因,修改代碼邏輯。
RuntimeException:RuntimeException體系包括錯誤的類型轉(zhuǎn)換、數(shù)組越界訪問和試圖訪問空指針等等。
處理RuntimeException的原則是:如果出現(xiàn) RuntimeException,那么一定是程序員的錯誤。例如,可以通過檢查數(shù)組下標(biāo)和數(shù)組邊界來避免數(shù)組越界訪問異常。其他(IOException等等)checked異常一般是外部錯誤,例如試圖從文件尾后讀取數(shù)據(jù)等,這并不是程序本身的錯誤,而是在應(yīng)用環(huán)境中出現(xiàn)的外部錯誤。
3. 下面程序的運(yùn)行結(jié)果是()
String str1 = "hello";
String str2 = "he" + new String("llo");
System.err.println(str1 == str2);
答案:false
解析:因為str2中的llo是新申請的內(nèi)存塊,而==判斷的是對象的地址而非值,所以不一樣。如果是String str2 = str1,那么就是true了。
4.下列說法正確的有()
A. class中的constructor不可省略
B. constructor必須與class同名,但方法不能與class同名
C.一個class只能定義一個constructor
D. constructor在一個對象被new時執(zhí)行
答案:D
解析:這里可能會有誤區(qū),其實(shí)普通的類方法是可以和類名同名的,和構(gòu)造方法唯一的區(qū)分就是,構(gòu)造方法沒有返回值。
5. 具體選項不記得,但用到的知識如下:
String []a = new String[10];
則:a[0]~a[9] = null
a.length = 10
如果是int []a = new int[10];
則:a[0]~a[9] = 0
a.length = 10
6. 下面程序的運(yùn)行結(jié)果:()
public static void main(String args[]) {
Thread t = new Thread() {
public void run() {
pong();
}
};
t.run();
System.out.print("ping");
}
static void pong() {
System.out.print("pong");
}
A pingpong B pongping C pingpong和pongping都有可能 D 都不輸出
答案:B
解析:這里考的是Thread類中start()和run()方法的區(qū)別了。start()用來啟動一個線程,當(dāng)調(diào)用start方法后,系統(tǒng)才會開啟一個新的線程,進(jìn)而調(diào)用run()方法來執(zhí)行任務(wù),而單獨(dú)的調(diào)用run()就跟調(diào)用普通方法是一樣的,已經(jīng)失去線程的特性了。因此在啟動一個線程的時候一定要使用start()而不是run()。
7. 下列屬于關(guān)系型數(shù)據(jù)庫的是()
A. Oracle B MySql C IMS D MongoDB
答案:AB
解答:IMS(Information Management System)數(shù)據(jù)庫是IBM公司開發(fā)的兩種數(shù)據(jù)庫類型之一;
一種是關(guān)系數(shù)據(jù)庫,典型代表產(chǎn)品:DB2;
另一種則是層次數(shù)據(jù)庫,代表產(chǎn)品:IMS層次數(shù)據(jù)庫。
非關(guān)系型數(shù)據(jù)庫有MongoDB、memcachedb、Redis等。
8. GC線程是否為守護(hù)線程?()
答案:是
解析:線程分為守護(hù)線程和非守護(hù)線程(即用戶線程)。
只要當(dāng)前JVM實(shí)例中尚存在任何一個非守護(hù)線程沒有結(jié)束,守護(hù)線程就全部工作;只有當(dāng)最后一個非守護(hù)線程結(jié)束時,守護(hù)線程隨著JVM一同結(jié)束工作。
守護(hù)線程最典型的應(yīng)用就是 GC (垃圾回收器)
9. volatile關(guān)鍵字是否能保證線程安全?()
答案:不能
解析:volatile關(guān)鍵字用在多線程同步中,可保證讀取的可見性,JVM只是保證從主內(nèi)存加載到線程工作內(nèi)存的值是最新的讀取值,而非cache中。但多個線程對
volatile的寫操作,無法保證線程安全。例如假如線程1,線程2 在進(jìn)行read,load 操作中,發(fā)現(xiàn)主內(nèi)存中count的值都是5,那么都會加載這個最新的值,在線程1堆count進(jìn)行修改之后,會write到主內(nèi)存中,主內(nèi)存中的count變量就會變?yōu)?;線程2由于已經(jīng)進(jìn)行read,load操作,在進(jìn)行運(yùn)算之后,也會更新主內(nèi)存count的變量值為6;導(dǎo)致兩個線程及時用volatile關(guān)鍵字修改之后,還是會存在并發(fā)的情況。
10. 下列說法正確的是()
A LinkedList繼承自List
B AbstractSet繼承自Set
C HashSet繼承自AbstractSet
D WeakMap繼承自HashMap
答案:AC
解析:下面是一張下載的Java中的集合類型的繼承關(guān)系圖,一目了然。
11. 存在使i + 1 < i的數(shù)嗎()
答案:存在
解析:如果i為int型,那么當(dāng)i為int能表示的最大整數(shù)時,i+1就溢出變成負(fù)數(shù)了,此時不就
擴(kuò)展:存在使i > j || i <= j不成立的數(shù)嗎()
答案:存在
解析:比如Double.NaN或Float.NaN,感謝@BuilderQiu網(wǎng)友指出。
12. 0.6332的數(shù)據(jù)類型是()
A float B double C Float D Double
答案:B
解析:默認(rèn)為double型,如果為float型需要加上f顯示說明,即0.6332f
13. 下面哪個流類屬于面向字符的輸入流( )
ABufferedWriter BFileInputStream CObjectInputStream D InputStreamReader
答案:D
解析:Java的IO操作中有面向字節(jié)(Byte)和面向字符(Character)兩種方式。
面向字節(jié)的操作為以8位為單位對二進(jìn)制的數(shù)據(jù)進(jìn)行操作,對數(shù)據(jù)不進(jìn)行轉(zhuǎn)換,這些類都是InputStream和OutputStream的子類。
面向字符的操作為以字符為單位對數(shù)據(jù)進(jìn)行操作,在讀的時候?qū)⒍M(jìn)制數(shù)據(jù)轉(zhuǎn)為字符,在寫的時候?qū)⒆址D(zhuǎn)為二進(jìn)制數(shù)據(jù),這些類都是Reader和Writer的子類。
總結(jié):以InputStream(輸入)/OutputStream(輸出)為后綴的是字節(jié)流;
以Reader(輸入)/Writer(輸出)為后綴的是字符流。
擴(kuò)展:Java流類圖結(jié)構(gòu),一目了然,解決大部分選擇題:
14. Java接口的修飾符可以為()
A private B protected C final D abstract
答案:CD
解析:接口很重要,為了說明情況,這里稍微啰嗦點(diǎn):
(1)接口用于描述系統(tǒng)對外提供的所有服務(wù),因此接口中的成員常量和方法都必須是公開(public)類型的,確保外部使用者能訪問它們;
(2)接口僅僅描述系統(tǒng)能做什么,但不指明如何去做,所以接口中的方法都是抽象(abstract)方法;
。3)接口不涉及和任何具體實(shí)例相關(guān)的細(xì)節(jié),因此接口沒有構(gòu)造方法,不能被實(shí)例化,沒有實(shí)例變量,只有靜態(tài)(static)變量;
。4)接口的中的變量是所有實(shí)現(xiàn)類共有的,既然共有,肯定是不變的東西,因為變化的東西也不能夠算共有。所以變量是不可變(final)類型,也就是常量了。
(5)接口中不可以定義變量?如果接口可以定義變量,但是接口中的方法又都是抽象的,在接口中無法通過行為來修改屬性。有的人會說了,沒有關(guān)系,可以通過 實(shí)現(xiàn)接口的對象的行為來修改接口中的屬性。這當(dāng)然沒有問題,但是考慮這樣的情況。如果接口 A 中有一個public 訪問權(quán)限的靜態(tài)變量 a。按照 Java 的語義,我們可以不通過實(shí)現(xiàn)接口的對象來訪問變量 a,通過 A.a = xxx; 就可以改變接口中的變量 a 的值了。正如抽象類中是可以這樣做的,那么實(shí)現(xiàn)接口 A 的所有對象也都會自動擁有這一改變后的 a 的值了,也就是說一個地方改變了 a,所有這些對象中 a 的值也都跟著變了。這和抽象類有什么區(qū)別呢,怎么體現(xiàn)接口更高的抽象級別呢,怎么體現(xiàn)接口提供的統(tǒng)一的協(xié)議呢,那還要接口這種抽象來做什么呢?所以接口中 不能出現(xiàn)變量,如果有變量,就和接口提供的統(tǒng)一的抽象這種思想是抵觸的。所以接口中的屬性必然是常量,只能讀不能改,這樣才能為實(shí)現(xiàn)接口的對象提供一個統(tǒng) 一的屬性。
通俗的講,你認(rèn)為是要變化的東西,就放在你自己的實(shí)現(xiàn)中,不能放在接口中去,接口只是對一類事物的屬性和行為更高層次的抽象。對修改關(guān)閉,對擴(kuò)展(不同的實(shí)現(xiàn) implements)開放,接口是對開閉原則的一種體現(xiàn)。
所以:
接口的方法默認(rèn)是public abstract;
接口中不可以定義變量即只能定義常量(加上final修飾就會變成常量)。所以接口的屬性默認(rèn)是public static final 常量,且必須賦初值。
注意:final和abstract不能同時出現(xiàn)。
15. 不通過構(gòu)造函數(shù)也能創(chuàng)建對象嗎()
A 是 B 否
答案:A
解析:Java創(chuàng)建對象的幾種方式(重要):
(1) 用new語句創(chuàng)建對象,這是最常見的創(chuàng)建對象的方法。
(2) 運(yùn)用反射手段,調(diào)用java.lang.Class或者java.lang.reflect.Constructor類的newInstance()實(shí)例方法。
(3) 調(diào)用對象的clone()方法。
(4) 運(yùn)用反序列化手段,調(diào)用java.io.ObjectInputStream對象的 readObject()方法。
(1)和(2)都會明確的顯式的調(diào)用構(gòu)造函數(shù) ;(3)是在內(nèi)存上對已有對象的影印,所以不會調(diào)用構(gòu)造函數(shù) ;(4)是從文件中還原類的對象,也不會調(diào)用構(gòu)造函數(shù)。
16. ArrayList list = new ArrayList(20);中的list擴(kuò)充幾次()
A 0 B 1 C 2 D 3
答案:A
解析:這里有點(diǎn)迷惑人,大家都知道默認(rèn)ArrayList的長度是10個,所以如果你要往list里添加20個元素肯定要擴(kuò)充一次(擴(kuò)充為原來的1.5倍),但是這里顯示指明了需要多少空間,所以就一次性為你分配這么多空間,也就是不需要擴(kuò)充了。
17. 下面哪些是對稱加密算法()
A DES B AES C DSA D RSA
答案:AB
解析:常用的對稱加密算法有:DES、3DES、RC2、RC4、AES
常用的非對稱加密算法有:RSA、DSA、ECC
使用單向散列函數(shù)的加密算法:MD5、SHA
18.新建一個流對象,下面哪個選項的代碼是錯誤的?()
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"));
答案:B
解析:請記得13題的那個圖嗎?Reader只能用FileReader進(jìn)行實(shí)例化。
19. 下面程序能正常運(yùn)行嗎()
public class NULL {
public static void haha(){
System.out.println("haha");
}
public static void main(String[] args) {
((NULL)null).haha();
}
}
答案:能正常運(yùn)行
解析:輸出為haha,因為null值可以強(qiáng)制轉(zhuǎn)換為任何java類類型,(String)null也是合法的。但null強(qiáng)制轉(zhuǎn)換后是無效對象,其返回值還是為null,而static方法的調(diào)用是和類名綁定的,不借助對象進(jìn)行訪問所以能正確輸出。反過來,沒有static修飾就只能用對象進(jìn)行訪問,使用null調(diào)用對象肯定會報空指針錯了。這里和C++很類似。這里感謝@Florian網(wǎng)友解答。
20. 下面程序的運(yùn)行結(jié)果是什么()
class HelloA {
public HelloA() {
System.out.println("HelloA");
}
{ System.out.println("Im A class"); }
static { System.out.println("static A"); }
}
public class HelloB extends HelloA {
public HelloB() {
System.out.println("HelloB");
}
{ System.out.println("Im B class"); }
static { System.out.println("static B"); }
public static void main(String[] args) {
new HelloB();
}
}
答案:
static A
static B
Im A class
HelloA
Im B class
HelloB
解析:說實(shí)話我覺得這題很好,考查靜態(tài)語句塊、構(gòu)造語句塊(就是只有大括號的那塊)以及構(gòu)造函數(shù)的執(zhí)行順序。
對象的初始化順序:(1)類加載之后,按從上到下(從父類到子類)執(zhí)行被static修飾的語句;(2)當(dāng)static語句執(zhí)行完之后,再執(zhí)行main方法;(3)如果有語句new了自身的對象,將從上到下執(zhí)行構(gòu)造代碼塊、構(gòu)造器(兩者可以說綁定在一起)。
下面稍微修改下上面的代碼,以便更清晰的說明情況:
View Code
此時輸出結(jié)果為:
static A
static B
-------main start-------
Im A class
HelloA
Im B class
HelloB
Im A class
HelloA
Im B class
HelloB
-------main end-------
21.getCustomerInfo()方法如下,try中可以捕獲三種類型的異常,如果在該方法運(yùn)行中產(chǎn)生了一個IOException,將會輸出什么結(jié)果()
public void getCustomerInfo() {
try {
// do something that may cause an Exception
} catch (java.io.FileNotFoundException ex) {
System.out.print("FileNotFoundException!");
} catch (java.io.IOException ex) {
System.out.print("IOException!");
} catch (java.lang.Exception ex) {
System.out.print("Exception!");
}
}
AIOException!
BIOException!Exception!
CFileNotFoundException!IOException!
DFileNotFoundException!IOException!Exception!
答案:A
解析:考察多個catch語句塊的執(zhí)行順序。當(dāng)用多個catch語句時,catch語句塊在次序上有先后之分。從最前面的catch語句塊依次先后進(jìn)行異常類型匹配,這樣如果父異常在子異常類之前,那么首先匹配的將是父異常類,子異常類將不會獲得匹配的機(jī)會,也即子異常類型所在的catch語句塊將是不可到達(dá)的語句。所以,一般將父類異常類即Exception老大放在catch語句塊的最后一個。
22. 下面代碼的運(yùn)行結(jié)果為:()
import java.io.*;
import java.util.*;
public class foo{
public static void main (String[] args){
String s;
System.out.println("s=" + s);
}
}
A代碼得到編譯,并輸出“s=”
B代碼得到編譯,并輸出“s=null”
C由于String s沒有初始化,代碼不能編譯通過
D代碼得到編譯,但捕獲到NullPointException異常
答案:C
解析:開始以為會輸出null什么的,運(yùn)行后才發(fā)現(xiàn)Java中所有定義的基本類型或?qū)ο蠖急仨毘跏蓟拍茌敵鲋怠?/p>
23. System.out.println("5" + 2);的輸出結(jié)果應(yīng)該是()。
A52 B7 C2 D5
答案:A
解析:沒啥好說的,Java會自動將2轉(zhuǎn)換為字符串。
24.指出下列程序運(yùn)行的結(jié)果()
public class Example {
String str = new String("good");
char[] ch = { a, b, c };
public static void main(String args[]) {
Example ex = new Example();
ex.change(ex.str, ex.ch);
System.out.print(ex.str + " and ");
System.out.print(ex.ch);
}
public void change(String str, char ch[]) {
str = "test ok";
ch[0] = g;
}
}
A、good and abc
B、good and gbc
C、test ok and abc
D、test ok and gbc
答案:B
解析:大家可能以為Java中String和數(shù)組都是對象所以肯定是對象引用,然后就會選D,其實(shí)這是個很大的誤區(qū):因為在java里沒有引用傳遞,只有值傳遞
這個值指的是實(shí)參的地址的拷貝,得到這個拷貝地址后,你可以通過它修改這個地址的內(nèi)容(引用不變),因為此時這個內(nèi)容的地址和原地址是同一地址,
但是你不能改變這個地址本身使其重新引用其它的對象,也就是值傳遞,可能說的不是很清楚,下面給出一個完整的能說明情況的例子吧:
View Code
程序有些啰嗦,但能反映問題,該程序運(yùn)行結(jié)果為:
對象交換前:p1 = Alexia female
對象交換前:p2 = Edward male
對象交換后:p1 = Alexia female
對象交換后:p2 = Edward male
對象數(shù)組交換前:arraya[0] = Alexia female, arraya[1] = Edward male
對象數(shù)組交換前:arrayb[0] = jmwang female, arrayb[1] = hwu male
對象數(shù)組交換后:arraya[0] = Alexia female, arraya[1] = Edward male
對象數(shù)組交換后:arrayb[0] = jmwang female, arrayb[1] = hwu male
基本類型數(shù)組交換前:a[0] = 0, a[1] = 1
基本類型數(shù)組交換前:b[0] = 1, b[1] = 2
基本類型數(shù)組交換后:a[0] = 0, a[1] = 1
基本類型數(shù)組交換后:b[0] = 1, b[1] = 2
對象數(shù)組內(nèi)容交換并改變后:arraya[1] = wjl male
對象數(shù)組內(nèi)容交換并改變后:arrayb[1] = Edward male
基本類型數(shù)組內(nèi)容交換并改變后:a[1] = 5
基本類型數(shù)組內(nèi)容交換并改變后:b[1] = 1
說明:不管是對象、基本類型還是對象數(shù)組、基本類型數(shù)組,在函數(shù)中都不能改變其實(shí)際地址但能改變其中的內(nèi)容。
25.要從文件"file.dat"中讀出第10個字節(jié)到變量c中,下列哪個方法適合?()
AFileInputStream in=new FileInputStream("file.dat"); in.skip(9); int c=in.read();
BFileInputStream in=new FileInputStream("file.dat"); in.skip(10); int c=in.read();
CFileInputStream in=new FileInputStream("file.dat"); int c=in.read();
DRandomAccessFile in=new RandomAccessFile("file.dat"); in.skip(9); int c=in.readByte();
答案:A?D?
解析:long skip(long n)作用是跳過n個字節(jié)不讀,主要用在包裝流中的,因為一般流(如FileInputStream)只能順序一個一個的讀不能跳躍讀,但是包裝流可以用skip方法跳躍讀取。那么什么是包裝流呢?各種字節(jié)節(jié)點(diǎn)流類,它們都只具有讀寫字節(jié)內(nèi)容的方法,以FileInputStream與FileOutputStream為例,它們只能在文件中讀取或者向文件中寫入字節(jié),在實(shí)際應(yīng)用中我們往往需要在文件中讀取或者寫入各種類型的數(shù)據(jù),就必須先將其他類型的數(shù)據(jù)轉(zhuǎn)換成字節(jié)數(shù)組后寫入文件,或者從文件中讀取到的字節(jié)數(shù)組轉(zhuǎn)換成其他數(shù)據(jù)類型,想想都很麻煩!因此想通過FileOutputStream將一個浮點(diǎn)小數(shù)寫入到文件中或?qū)⒁粋整數(shù)寫入到文件時是非常困難的。這時就需要包裝類DataInputStream/DataOutputStream,它提供了往各種輸入輸出流對象中讀入或?qū)懭敫鞣N類型的數(shù)據(jù)的方法。
DataInputStream/DataOutputStream并沒有對應(yīng)到任何具體的流設(shè)備,一定要給它傳遞一個對應(yīng)具體流設(shè)備的輸入或輸出流對象,完成類似DataInputStream/DataOutputStream功能的類就是一個包裝類,也叫過濾流類或處理流類。它對InputOutStream/OutputStream流類進(jìn)行了包裝,使編程人員使用起來更方便。其中DataInputStream包裝類的構(gòu)造函數(shù)語法:public DataInputStream(InputStream in)。包裝類也可以包裝另外一個包裝類。
首先BC肯定 是錯的,那A正確嗎?按上面的解析應(yīng)該也不對,但我試了下,發(fā)現(xiàn)A也是正確的,與網(wǎng)上解析的資料有些出入,下面是我的code:
View Code
那么D呢,RandomAccessFile是IO包的類,但是其自成一派,從Object直接繼承而來?梢詫ξ募M(jìn)行讀取和寫入。支持文件的隨機(jī)訪問,即可以隨機(jī)讀取文件中的某個位置內(nèi)容,這么說RandomAccessFile肯定可以達(dá)到題目的要求,但是選項有些錯誤,比如RandomAccessFile的初始化是兩個參數(shù)而非一個參數(shù),采用的跳躍讀取方法是skipBytes()而非skip(),即正確的寫法是:
RandomAccessFile in = new RandomAccessFile("file.dat", "r");
in.skipBytes(9);
int c = in.readByte();
這樣也能讀到第十個字節(jié),也就是A和D都能讀到第十個字節(jié),那么到底該選哪個呢?A和D有啥不同嗎?求大神解答~~~
26.下列哪種異 常是檢查型異常,需要在編寫程序時聲明()
ANullPointerException BClassCastException CFileNotFoundException D IndexOutOfBoundsException
答案:C
解析:看第2題的解析。
27. 下面的方法,當(dāng)輸入為2的時候返回值是多少?()
public static int getValue(int i) {
int result = 0;
switch (i) {
case 1:
result = result + i;
case 2:
result = result + i * 2;
case 3:
result = result + i * 3;
}
return result;
}
A0 B2 C4 D10
答案:D
解析:注意這里case后面沒有加break,所以從case 2開始一直往下運(yùn)行。
28.選項中哪一行代碼可以替換題目中//add code here而不產(chǎn)生編譯錯誤?()
public abstract class MyClass {
public int constInt = 5;
//add code here
public void method() {
}
}
Apublic abstract void method(int a);
B constInt = constInt + 5;
Cpublic int method();
Dpublic abstract void anotherMethod() {}
答案:A
解析:考察抽象類的使用。
抽象類遵循的原則:
。1)abstract關(guān)鍵字只能修飾類和方法,不能修飾字段。
。2)抽象類不能被實(shí)例化(無法使用new關(guān)鍵字創(chuàng)建對象實(shí)例),只能被繼承。
(3)抽象類可以包含屬性,方法,構(gòu)造方法,初始化塊,內(nèi)部類,枚舉類,和普通類一樣,普通方法一定要實(shí)現(xiàn),變量可以初始化或不初始化但不能初始化后在抽象類中重新賦值或操作該變量(只能在子類中改變該變量)。
。4)抽象類中的抽象方法(加了abstract關(guān)鍵字的方法)不能實(shí)現(xiàn)。
。5)含有抽象方法的類必須定義成抽象類。
擴(kuò)展:抽象類和接口的區(qū)別,做個總結(jié)吧:
。1)接口是公開的,里面不能有私有的方法或變量,是用于讓別人使用的,而抽象類是可以有私有方法或私有變量的。
(2)abstract class 在 Java 語言中表示的是一種繼承關(guān)系,一個類只能使用一次繼承關(guān)系。但是,一個類卻可以實(shí)現(xiàn)多個interface,實(shí)現(xiàn)多重繼承。接口還有標(biāo)識(里面沒有任何方法,如Remote接口)和數(shù)據(jù)共享(里面的變量全是常量)的作用。
。3)在abstract class 中可以有自己的數(shù)據(jù)成員,也可以有非abstarct的成員方法,而在interface中,只能夠有靜態(tài)的不能被修改的數(shù)據(jù)成員(也就是必須是 static final的,不過在 interface中一般不定義數(shù)據(jù)成員),所有的成員方法默認(rèn)都是 public abstract 類型的。
(4)abstract class和interface所反映出的設(shè)計理念不同。其實(shí)abstract class表示的是"is-a"關(guān)系,interface表示的是"has-a"關(guān)系。
。5)實(shí)現(xiàn)接口的一定要實(shí)現(xiàn)接口里定義的所有方法,而實(shí)現(xiàn)抽象類可以有選擇地重寫需要用到的方法,一般的應(yīng)用里,最頂級的是接口,然后是抽象類實(shí)現(xiàn)接口,最后才到具體類實(shí)現(xiàn)。抽象類中可以有非抽象方法。接口中則不能有實(shí)現(xiàn)方法。
。6)接口中定義的變量默認(rèn)是public static final 型,且必須給其初值,所以實(shí)現(xiàn)類中不能重新定義,也不能改變其值。抽象類中的變量默認(rèn)是 friendly 型,其值可以在子類中重新定義,也可以在子類中重新賦值。
29. 閱讀Shape和Circle兩個類的定義。在序列化一個Circle的對象circle到文件時,下面哪個字段會被保存到文件中?( )
class Shape {
public String name;
}
class Circle extends Shape implements Serializable{
private float radius;
transient int color;
public static String type = "Circle";
}
Aname
Bradius
Ccolor
Dtype
答案:B
解析:這里有詳細(xì)的解釋:http://www.cnblogs.com/lanxuezaipiao/p/3369962.html
30.下面是People和Child類的定義和構(gòu)造方法,每個構(gòu)造方法都輸出編號。在執(zhí)行new Child("mike")的時候都有哪些構(gòu)造方法被順序調(diào)用?請選擇輸出結(jié)果( )
class People {
String name;
public People() {
System.out.print(1);
}
public People(String name) {
System.out.print(2);
this.name = name;
}
}
class Child extends People {
People father;
public Child(String name) {
System.out.print(3);
this.name = name;
father = new People(name + ":F");
}
public Child() {
System.out.print(4);
}
}
A312 B 32 C 432 D 132
答案:D
解析:考察的又是父類與子類的構(gòu)造函數(shù)調(diào)用次序。在Java中,子類的構(gòu)造過程中必須調(diào)用其父類的構(gòu)造函數(shù),是因為有繼承關(guān)系存在時,子類要把父類的內(nèi)容繼承下來。但如果父類有多個構(gòu)造函數(shù)時,該如何選擇調(diào)用呢?
第一個規(guī)則:子類的構(gòu)造過程中,必須調(diào)用其父類的構(gòu)造方法。一個類,如果我們不寫構(gòu)造方法,那么編譯器會幫我們加上一個默認(rèn)的構(gòu)造方法(就是沒有參數(shù)的構(gòu)造方法),但是如果你自己寫了構(gòu)造方法,那么編譯器就不會給你添加了,所以有時候當(dāng)你new一個子類對象的時候,肯定調(diào)用了子類的構(gòu)造方法,但是如果在子類構(gòu)造方法中我們并沒有顯示的調(diào)用基類的構(gòu)造方法,如:super();這樣就會調(diào)用父類沒有參數(shù)的構(gòu)造方法。
第二個規(guī)則:如果子類的構(gòu)造方法中既沒有顯示的調(diào)用基類構(gòu)造方法,而基類中又沒有無參的構(gòu)造方法,則編譯出錯,所以,通常我們需要顯示的:super(參數(shù)列表),來調(diào)用父類有參數(shù)的構(gòu)造函數(shù),此時無參的構(gòu)造函數(shù)就不會被調(diào)用。
JAVA筆試題目及答案3
一、單選題
1.下列哪一種敘述是正確的(D)
A.a(chǎn)bstract修飾符可修飾字段、方法和類
B. 抽象方法的body部分必須用一對大括號{ }包住
C. 聲明抽象方法,大括號可有可無
D.聲明抽象方法不可寫出大括號
2.如下代碼
public class Test {
public int aMethod() {
static int i = 0;
i++;
return i;
}
public static void main (String args[]) {
Test test = new Test();
test.aMethod();
int j = test.aMethod();
System.out.println(j);
}
}
輸出結(jié)果是什么?D
A. 0 B. 1 C. 2 D.編譯失敗
附:static用來修飾全局變量,不能修飾局部變量
3.下列哪種說法是正確的(D)
A. 實(shí)例方法可直接調(diào)用超類的實(shí)例方法
B. 實(shí)例方法可直接調(diào)用超類的類方法
C. 實(shí)例方法可直接調(diào)用其他類的實(shí)例方法
D.實(shí)例方法可直接調(diào)用本類的類方法
4.如下代碼:
class Super {
publicIntegergetLenght() { return new Integer(4); }
}
public class Sub extends Super {
publicLonggetLenght() { return new Long(5); }
public static void main(String[] args) {
Super sooper = new Super();
Sub sub = new Sub();
System.out.println(sooper.getLenght().toString() + “,” +
sub.getLenght().toString() );
}
}
輸出是什么E
A. 4,4 B. 4,5 C. 5,4 D. 5,5 E.編譯失敗.
附:方法重寫不能改變返回值類型
5.在Servlet處理請求的方式為:C
A.以進(jìn)程的方式 B.以程序的方式 C.以線程的方式 D.以響應(yīng)的方式
6.JDBC中,用于表示數(shù)據(jù)庫連接的對象是:B
A.Statement B.Connection C.DriverManager D.PreparedStatement
7.用于調(diào)用存儲過程的對象是:C
A.ResultSet B.DriverManager C.CallableStatemet D.PreparedStatement
8.按照MVC設(shè)計模式,JSP用于實(shí)現(xiàn):B
A.Model B.View C.Controller D.容器
9.如下代碼
10. public Object m() {
11. Object o = new Float(3.14F);
12. Object [] oa = new Object[1];
13. oa[0] = o;
14. o = null;
15. oa[0] = null;
16. print ‘return 0’;
17. }
當(dāng)Float對象在第11行被創(chuàng)建后, 什么時候能夠被垃圾回收C
A. 13行以后. B. 14行以后. C. 15行以后. D. 16行以后.
附:當(dāng)引用變量置為null時,它將變得無法訪問,因此符合垃圾回收條件
10.如下代碼:
class Base {
Base() { System.out.print(“Base”); }
}
public class Alpha extends Base {
public static void main( String[] args ) {
new Alpha();-----調(diào)用父類無參的構(gòu)造方法
new Base();
}
}
結(jié)果是什么B
A. Base B. BaseBase C. 編譯失敗. D. 代碼運(yùn)行但沒有輸出. E. 運(yùn)行時拋出異常
附:對象初始化會先走父類構(gòu)造方法,在走自己的構(gòu)造方法
11.在J2EE中屬于Web層的組件有:A
A.Servlet B.EJB C.Applet D.HTML
12.在Servlet的生命周期中,容器只調(diào)用一次的方法是:C
A.service B.getServletConfig C.init D.destroy
13.以下關(guān)于異常的說法正確的是:D
A.一旦出現(xiàn)異常,程序運(yùn)行就終止了
B.如果一個方法申明將拋出某個異常,它就必須真的拋出那個異常
。.在catch子句中匹配特別是一種精確匹配
。.可能拋出系統(tǒng)異常的方法是不需要申明異常的
14.如下代碼:
public class Foo {
public static void main(String[] args) {
try {
return;
} finally {
System.out.println( “Finally” );
}
}
}
輸出結(jié)果是什么A
A. Finally B.編譯失敗 C. 代碼正常運(yùn)行但沒有任何輸出. D. 運(yùn)行時拋出異常
附:無論是否拋出異常,finally代碼塊總是會被執(zhí)行,主要用于java一些后續(xù)處理
15.jsp指令中isELIgnored="boolean"的意思是(C)
A.決定是否實(shí)現(xiàn)Servler的單線程模式,
B.決定改頁面是否是一個錯誤處理頁面,
C.決定是否支持EL表示,
D.沒有具體的含義。
附:在isELIgnored="true"時輸出為${2000 % 20},而isELIgnored="false"時輸出為100。Web容器默認(rèn)isELIgnored="false"。
16.下面關(guān)于Java的引用,說法正確的是:B
。.應(yīng)用實(shí)際上就是指針
B.應(yīng)用本身是Primitive
。.引用就是對象本身
D.一個對象只能被一個引用所指引
附:primitive主數(shù)據(jù)類型,也稱之其為基本數(shù)據(jù)類型,
還有一種為引用數(shù)據(jù)類型:引用數(shù)據(jù)類型,顧名思義就是:“引用”,當(dāng)一個對象賦值給一個引用變量時,那么,則表明這個引用變量是指向這個對象的;一個對象可以有多個引用;一個引用同一時刻,則只能指向一個對象;
17.對于import java.util包,以下那種說法是錯誤的**?C**
。. Vector類屬于java.util包
。. Vector類放在…/java/util/目錄下
C. Vector類放在java.util文件中
。. Vector類是Sun公司的產(chǎn)品
18.在一個線程中Sleep(1000)方法,將使得該線程在多少時間后獲得對CPU的控制(假設(shè)睡眠過程中不會有其他事件喚醒該線程)?C
A.正好1000毫秒。. 1000毫秒不到。. >=1000毫秒 D.不一定
附:在程序sleep之后線程進(jìn)入就緒態(tài),在這種狀態(tài)下,需要檢查現(xiàn)在是否有資源允許現(xiàn)在的線程繼續(xù)運(yùn)行,如果條件不滿足,則需要等待。如果是現(xiàn)在有資源則立即執(zhí)行。
19.在WEB-INF目錄下,必須存放的文件為:B
A.class文件 B.web.xml C.jar文件 D.html文件
20.下面關(guān)于垃圾收集的說法正確的是:D
。.一旦一個對象成為垃圾,就立刻被收集掉。
。.對象空間被收集掉之后,會執(zhí)行該對象的finalize方法
。. finalize方法和C++的析構(gòu)函數(shù)是完全一回事情
D.一個對象成為垃圾是因為不再有引用指著它,但是線程并非如此。
21.下面的語句會產(chǎn)生什么樣的輸出A
System.out.println(4&7);
A.4 B.5 C.6 D.7 E.0
附:& 既是位運(yùn)算符又是邏輯運(yùn)算符,&的兩側(cè)可以是int,也可以是boolean表達(dá)式,當(dāng)&兩側(cè)是int時,要先把運(yùn)算符兩側(cè)的數(shù)轉(zhuǎn)化為二進(jìn)制數(shù)再進(jìn)行運(yùn)算,4的二進(jìn)制為100(前面的0省略),7的二進(jìn)制為111,即100 & 111 = 100,在計算機(jī)中1表示真,0表示假,最左邊一位1&1=1,最右邊一位0&1=0,所以輸出4
22.下面的程序中,temp的最終值是什么?B
long temp=(int)3.9;
temp%=2;
A .0 B .1 C .2 D .3 E .4
附:浮點(diǎn)型強(qiáng)轉(zhuǎn)int會丟失精度,所以前面的(int)3.9 會等于3,后面的temp%=2后temp=1;
23.下面哪個不是JAVA關(guān)鍵字A
Ainteger B double C float D default
24.Which method is used by aServletto place its session ID in a URL that is written to the servlet’s response output streamB
A. The encodeURL method of the HttpServletRequest interface.
B. The encodeURL method of the HttpServletResponse interface.
C. The rewriteURL method of the HttpServletRequest interface.
D. The rewriteURL method of the HttpServletResponse interface.
25.每個使用Swing構(gòu)件的程序必須有一個**( ). D**
A.按鈕 B.標(biāo)簽 C.菜單 D.容器
26.下列標(biāo)識符(名字)命名原則中,正確的是**( ) D**
A.類名的首字母小寫 B.變量和方法名的首寫字母大寫 C.接口名的首寫字母小寫 D.常量完全大寫
27.類Test1定義如下:
1.public class Test1{
2.public float aMethod(float a,float b){return 0;}
3.
4.}
將以下哪種方法插入行3是不合法的。(B)
A、public float aMethod(float a,float b,float c){return 0;}
B、public float aMethod(float c,float d){return 0;}
C、public int aMethod(int a,int b){return 0;}
D、private float aMethod(int a,int b,int c){return 0;}
28.哪個語句創(chuàng)建了一個數(shù)組實(shí)例**?A**
A. int[] ia = new int [15];
B. float fa = new float [20];
C. char[] ca = “Some String”;
D. int ia [][] = {4, 5, 6} {1, 2, 3};
附:B不是一個數(shù)租,應(yīng)該返回float[] ,C中是字符串應(yīng)該返回String,D是二維數(shù)租,正確寫法int[][] ia = {{4, 5, 6}, {1, 2, 3}};
29.以public修飾的類如:public class Car{…}則Car() A
A、可被其它程序包中的類使用
B、僅能被本程序包中的類使用
C、不能被任意其它類使用
D、不能被其它類繼承
30.下列哪個屬于容器型構(gòu)件() C
A .JEditB.JButton C.JPanel D.JTextField
31.Java程序的執(zhí)行過程中用到一套JDK工具,其中java.exe是指( )B
A.Java文檔生成器 B.Java解釋器 C.Java編譯器 D.Java類分解器
32.下列關(guān)于構(gòu)造方法的敘述中,錯誤的是**( ) C**
A. Java語言規(guī)定構(gòu)造方法名與類名必須相同
B. Java語言規(guī)定構(gòu)造方法沒有返回值,但不用vold聲明
C. Java語言規(guī)定構(gòu)造方法不可以重載
D. Java語言規(guī)定構(gòu)造方法只能通過new自動調(diào)用
33.構(gòu)造函數(shù)何時被調(diào)用() B
A.類定義時 B.創(chuàng)建對象時 C.調(diào)用對象方法時 D.使用對象的變量時
34.break語句**( ) D**
A、只中斷最內(nèi)層的循環(huán)B、只中斷最外層的循環(huán)
C、借助于標(biāo)號,可以實(shí)現(xiàn)任何外層循環(huán)中斷D、只中斷某一層的循環(huán)
35.Java語言中下面哪個可以用作正確的變量名稱**()B**
A、3DB、nameC、extendsD、implements
附:Java 中的變量名不能以數(shù)字開頭。不能是關(guān)鍵字
36.在JavaScript中如何驗證一個數(shù)據(jù)是否是數(shù)字(D)
A.如果用Integer.parseInt(value)有誤就不是數(shù)字
B.int I = value若報錯就不是數(shù)字,
C.沒有方法驗證
D.利用isNaN(value)返回的boolean進(jìn)行判斷
附:返回一個Boolean 值,指明提供的值是否是保留值NaN(不是數(shù)字)。
37.下面哪一個不能作JSP的服務(wù)器(D)
A. IBM WebSphereB. BEA WebLogic C. TomcatD. pws
38.下面哪項不是JSP操作指令(D)
A. getPropertyB. forward
C. includeD. import
39.如果希望控件在界面上按表格行分列排列,應(yīng)使用下列那種布局管理器?( B)
A、BoxLayoutB、GridLayoutC、BorderLayoutD、FlowLouLayout
40.下面哪一項不是Java類訪問控制關(guān)鍵字(C)
A. public B. protected C. this D. private
41.在配置tomcat虛擬目錄時,需要打開哪個文件?(C )
A. index.jsp B. web.xml C.server.xml D.以上都不是
42.下面哪個不是表單標(biāo)記(D)
A. INPUT B.RADIO C.CHECKBOX D. TR
43.下面哪項不是response對象的方法(C)
A. setContentType(String contentTypestr)
B. setHeader(String headername,String headervalue)
C. getParameter(String str)
D. sendError(int errorcode)
44.以下(B)是編寫Servlet必須導(dǎo)入的包.
A.java.sql.* B.java.servlet.* C.java.util.* D.java.lang.*
45.下面哪項不屬于SQL語句的子類(D)
A.數(shù)據(jù)定義語言(DDL)
B.數(shù)據(jù)查詢語言(DQL)
C.事務(wù)控制語言(TCL)
D.數(shù)據(jù)插入語言(DIL)
46.選出所有正確的答案
public class Outer{
public void someOuterMethod() {
// Line 3
}
public class Inner{}
public static void main( String[]argv ) {
Outer o = new Outer();
// Line 8
}
}
Which instantiates an instance of InnerA
A. new Inner(); // At line 3
B. new Inner(); // At line 8
C. new o.Inner(); // At line 8
D. new Outer.Inner(); // At line 8
二、多選題
1.下列屬于jsp中注釋的有(AD)
A.<%–與--%>
B./
C./**與**/
D.
2.按照學(xué)生平均成績(avg_grade) 將students表中的數(shù)據(jù)檢索出來,下面SQL語句正確的是(ACD)
A) SELECT * FROM students ORDER BY avg_grade
B) SELECT * FROM students GROUP BY avg_grade ASC
C) SELECT * FROM students ORDER BY avg_grade DESC
D) SELECT * FROM students ORDER by avg_grade asc
3.下列是jsp作用域的通信對象的有(ABC)
A.Session
B.application
C.pageContext
D.cookie
4.在接口中以下哪條定義是正確的 (AB)
A. void methoda();
B. public double methoda();
C. public final double methoda();
D. static void methoda(double d1);
E. protected void methoda(double d1);
附:接口中的方法會被隱式的指定為public abstract(只能是 public abstract,其他修飾符都會報錯)。
接口中的變量會被隱式的指定為public static final變量(并且只能是 public,用 private 修飾會報編譯錯誤。)
5.下面哪個語句正確地聲明一個整型的二維數(shù)組?CDE
A.int a[][] = new int[][];
B.int a[10][10] = new int[][];
C.int a[][] = new int[10][10];
D.int [][]a = new int[10][10];
E.int []a[] = new int[10][10];
6.下面哪些不是java的簡單數(shù)據(jù)類型BC
A. short B. Boolean C. Double D. float
7.下面哪些語句能夠正確地生成5個空字符串?AB
A.String a[]=new String[5];for(int i=0;i<5;a[i++]=“”);
B.String a[]={“”,“”,“”,“”,“”};
C.String a[5];
D.String[5]a;
E.String []a=new String[5];for(int i=0;i<5;a[i++]=null);
8.下列說法錯誤的有(BCD)
A. 數(shù)組是一種對象
B. 數(shù)組屬于一種原生類
C.int number=[]={31,23,33,43,35,63}
D. 數(shù)組的大小可以任意改變
9.不能用來修飾interface的有(ACD)
A.privateB.publicC.protectedD.static
10.下列說法錯誤的有(ACD)
A. 在類方法中可用this來調(diào)用本類的類方法
B. 在類方法中調(diào)用本類的類方法時可直接調(diào)用
C. 在類方法中只能調(diào)用本類中的類方法
D. 在類方法中絕對不能調(diào)用實(shí)例方法
11.如下代碼
class A {
A() { }
}
class B extends A {
}
哪兩個說明是正確的?BD
A. B類的構(gòu)造器應(yīng)該是public.
B. B類的構(gòu)造器應(yīng)該是沒有參數(shù)
C. B類的構(gòu)造器應(yīng)該調(diào)用this().
D. B類的構(gòu)造器應(yīng)該調(diào)用super().
附:默認(rèn)構(gòu)造器的修飾符只跟當(dāng)前類的修飾符有關(guān)
12.下列標(biāo)識符不合法的有(ACD)
A.new B.$Usdollars C.1234 D.car.taxi
13.以下哪四個能使用throw拋出ADEF
A. Error
B. Event
C. Object
D. Throwable
E. Exception
F. RuntimeException
14.javax.Servlet的包中,屬于類的是:BC
A.Servlet
B.GenericServlet
C.ServletException
D.ServletContext
15.如下代碼:
public class X {
public X aMethod() { return this;}
}
public class Y extends X {
}
哪兩個方法能加到Y(jié)類的定義中CE
A. public void aMethod() {}
B. private void aMethod() {}
C. public void aMethod(String s) {
D. private Y aMethod() { return null; }
E. public X aMethod() { return new Y(); }
16.對該段代碼描述正確的有<% int="" i="Integer.parseInt(request.getParemeter(“value”))">(BDC)
B. <%=>
C. <%=>
D.
E.
F.
G.
18.下面哪三個描述是正確的?BCE
A. 默認(rèn)構(gòu)造器初始化方法變量
B. 默認(rèn)構(gòu)造器有和它所在類相同的訪問修飾詞.
C. 默認(rèn)構(gòu)造器調(diào)用其父類的無參構(gòu)造器.
D. 如果一個類沒有無參構(gòu)造器,編譯器會它創(chuàng)建一個默認(rèn)構(gòu)造器.
E. 只有當(dāng)一個類沒有任何構(gòu)造器時,編譯器會為它創(chuàng)建一個默認(rèn)構(gòu)造器
19.哪二種聲明防止方法覆蓋?AD
A、final void methoda() {}
B、void final methoda() {}
C、static void methoda() {}
D、static final void methoda() {}
E、final abstract void methoda() {}
JAVA筆試題目及答案4
一、單選題
以下哪個不是SpringBoot默認(rèn)支持自動裝配的?(A)
A.spring-boot-starter-web
Bspring-boot-starter-data-redis
C spring-boot-starter-security
D mybatis spring-boot-starter
Spring中Bean的作用域不包括(D)
A、singleton
B、prototype
C、session
D. application
關(guān)系數(shù)據(jù)庫中,實(shí)現(xiàn)表與表之間的聯(lián)系是通過。(B)
A、實(shí)體完整性規(guī)
B、參照完整性規(guī)則
C.用戶自定義的完整性
D、值域
當(dāng)Redis作為數(shù)據(jù)庫時,與Spring Boot整合使用的相關(guān)說明,正確的是(A)
A. @RedisHash("persons )用于指定操作實(shí)體類對象在Redis數(shù)據(jù)庫中的存儲空間
B. @ld用于標(biāo)識實(shí)體類主鍵,需要手動指定id生成策略
C.使用Redis數(shù)據(jù)庫,必須為實(shí)體類屬性添加@Indexed屬性生成二級索引
D編寫操作Redis數(shù)據(jù)庫的Repostory接口文件時,需要繼承JpaRepository 接口
哪個關(guān)鍵字可以對對象加互斥鎖。(B)
A, serialize
B, synichronized
C, transient
D, static
算法的確定性特征,以下不符合算法確定性的是:(D)
A. D- (B*B-4*A*C)
B. S- (L*H)/ 10
C.輸入:X
D.輸出: L/正整數(shù)
下列SpringMVC中用到的注解錯誤的一項。(A)
A @RequestMapping來指定請求的url,只能寫在方法上
B @GetMappgin表示只能接收GET方式提交的請求
C @PostMapping表示只能接收POST方式提交的請求
D @RestController是個組合注解, 包括@Controller和@ResponseBody
Spring支持的事務(wù)功能包括(C)
A,事務(wù)的傳播行為
B,事務(wù)回滾
C,全部選項
D,事務(wù)的隔離級別
下列哪種操作,最容易產(chǎn)生MySQL數(shù)據(jù)庫的鎖等待(C)
A、.執(zhí)行 fromtwhere id> n (刪除數(shù)百萬行)
B、執(zhí)行alter table對一個1000萬行記錄的表刪除索引
C、執(zhí)行alter table對一個1000萬行記錄的表增加列
D、執(zhí)行alter table對一個1000萬行記錄的表增加索引
下列( B) 不屬于MyBatis全局配置文件中的標(biāo)簽
A. settings
B. select
C. plugins
D. properties
以下數(shù)據(jù)庫事務(wù)的隔離級別中哪一個有不可重復(fù)讀,幻讀(D)
A,讀取未提交內(nèi)容(Read Uncommited)
B,讀取提交內(nèi)容(Read Committed)
C,可重復(fù)讀(Repeatable Read)
D,可串行化(Serializable)
以下哪個不是SpringBoot默認(rèn)支持自動裝配的? (B )
A spring-boot starter-web
B spring -boot starter-data-redis
C spring-boot- starter-security
D mybatis spring boot starter
下列語句哪一個正確(B )
A. Java程序經(jīng)編譯后會產(chǎn)生machine code
B、Java程序經(jīng)編譯后會產(chǎn)生byte code
C. Java程序經(jīng)編譯后會產(chǎn)生DLL
D.以上都不正確
下面對Spring框架的持久化支持說法錯誤的是(C)
A Spring沒有自己的持久化方案,它集合了現(xiàn)有的流行持久化框架
B Spring采用JDBC模板封裝了JDBC的數(shù)據(jù)庫操作
C Spring對各種持久化技術(shù)提供了統(tǒng)一的編程方式
D Spring將數(shù)據(jù)庫訪問的checked異常轉(zhuǎn)換為運(yùn)行時異常
標(biāo)記關(guān)于Spring核心容器,說法錯誤的是?(A)
A: Spring框架的所有功能都是通過其核心容器來實(shí)現(xiàn)的。
B:創(chuàng)建BeanFactory實(shí)例時,需要提供Spring所管理容器的詳細(xì)配置信息,這些信息通常采用XML文件形式來管理。
C: ApplicationContext不僅包含了BeanFactory的所有功能,還添加了對國際化、資源訪問、事件傳播等方面的支持。
D:通常在Java項目中,會采用通過ClassPathXmlApplicationContex類來實(shí)例化ApplicationContext容器的方式, 而在Web項目中,ApplicationContext容器的實(shí)例化工作會交由Web服務(wù)器來完成。
下列說話錯誤的一項是:(D)
A SpringBoot項目啟動本質(zhì)上就是Spring的初始化操作
B. SpringBoot項目啟動會加載所有的在spring factories中配置的監(jiān) 聽器
C SpringBoot項目啟動的時候會發(fā)布相關(guān)事件,從而會觸發(fā)對應(yīng)的監(jiān) 聽器來完成對應(yīng)的操作
D. SpringBoot項目啟動就會加載bootstrap properties文件
下列關(guān)于Spring Boot自動配置原理的說法,錯誤的是(D)
A @SpringBootApplication只包含@SpringBooConfiguration、@EnableAutoConfiguration、 @ComponentScan 3個注解
B. @SpringBootConfiguration注解表示當(dāng)前類為-一一個配置類并可以被組件掃描器掃描
C. @EnableAutoConfiguration的作用是啟動自動配置,向容器中導(dǎo)入所有選中的自動配置類
D. @ComponentScan注解的主要作用是掃描指定包及其子包下所有注解類文件作為Spring容器的組件使用
描述Spring MVC正確的選項。(D)
A,在Spring MVC中,可以配置多個DispatcherServlet
B, DispatcherServlet在 Spring MVC中是核心servlet,它負(fù)責(zé)接收請求并將請求分發(fā)給適合的控制器
C,要使Spring MVC可用,DispatcherServlet需要在web xml中配置
D,全部選項
看程序進(jìn)行分析: Public UserselectUser(String name ,String area).
select”fromuser user t whereuser name = #{0} anduser _area #(1)
#{0)表示哪一個參數(shù)?(B)
A.程序報錯
B. name
C. area
D. 0
二、多選題
在關(guān)于依賴注入,描述正確的是。(BC)
A.依賴注入可以增強(qiáng)系統(tǒng)各組件的依賴關(guān)系
B.所謂依賴注入,就是明確地定義組件接口,獨(dú)立開發(fā)各個組件,然后根據(jù)組件件依賴關(guān)系組裝運(yùn)行的設(shè)計模式
C依賴注入能多降低系統(tǒng)各組件的依賴關(guān)系,提倡面向接口編程
D Spring的依賴注入和控制反轉(zhuǎn)是完全不同的兩個概念
下列哪種說法是錯誤的。(A,B )
A.實(shí)例方法可直接調(diào)用超類的實(shí)例方法
B.實(shí)例方法可直接調(diào)用超類的類方法
C.實(shí)例方法可直接調(diào)用其他類的實(shí)例方法
D.實(shí)例方法可直接調(diào)用本類的類方法
對mysql支持的復(fù)制類型描述正確的是? (ABC)
A,基于語句的復(fù)制
B,基于行的復(fù)制
C,混合類型的復(fù)制
D,單類型的復(fù)制
SpringMVC用什么對象從后臺向前臺傳遞數(shù)據(jù)的? (CB)
A將數(shù)據(jù)綁定到request
B返回ModelAndView
C通過ModelMap對象,可以在這個對象里面調(diào)用put方法,把對象加到里面,前端就可以通過el表達(dá)式拿到
D綁定數(shù)據(jù)到Session中
下列描述有誤的是? (CD)
A MyBatis是一個可以自定義SQL、存儲過程和高級映射的持久層框架
B. MyBatis的緩存分為級緩存和二級緩存,一級緩存放在 session里面
C. Mybatis是個全ORM (對象關(guān)系映射)框架,它內(nèi)部封裝了JDBC
D. MyBatis只可以使用XML來配置和映射原生信息
三、判斷題
SpringMvc的控制器是單例模式。(對 )
在Java的方法中定義一個常量要用const關(guān)鍵字。(錯)
在sq|語句比較復(fù)雜的時候,使用注解綁定比使用xml!綁定會更好。(錯)
Spring是輕量的,基本的版本大約3MB。(對)
Spring Boot為整合MyBatis技術(shù)框架提供了版本管理。(對)
如果對象的引用被置為null,垃圾收集器會立即釋放對象占用的內(nèi)存?(錯)
主鍵被強(qiáng)制定義成NOT NULL和UNIQUE。(對)
SpringMVC我們可以直接在Controller的相關(guān)的方法的形參中獲取HttpServletResponse對象(對 )
JSP頁面是一種包含 了靜態(tài)數(shù)據(jù)和JSP元素兩種類型的文本的文本文檔。(對)
在Java中,程序員是不需要顯示的去釋放一個對象的內(nèi)存的, 而是由虛擬機(jī)自行執(zhí)行。(對)
四、填空題
#{}和${}的含義是什么? #{}是(表示一個占位符,防止sql注入) ${}是(sql的拼接,以字符串方式替換)
SpringMVC常用注解中獲取URL中路徑變量中的值是(RequestParam)注解。
。‥NUM)是一個字符串對象,用于指定一組預(yù)定義的值,并可在創(chuàng)建表時使用。
讓控件按相同大小排列用(GridLayout)布局管理器;一次只有一個控件可見的布局管理器是(CardLayout)
(@Repository)注解用于將數(shù)據(jù)訪問層(DAO層)的類標(biāo)識為Spring中的Bean,其功能與@Component相同。
在Spring Boot項目啟動類上添加了注解,(@MapperScan("xxx"))來替代@Mapper注解。
默認(rèn)情況下,Spring Boot生成的全局配置文件是(application.properties)
JAVA筆試題目及答案5
1.什么是Java虛擬機(jī)?為什么Java被稱作是“平臺無關(guān)的編程語言”?
Java虛擬機(jī)是一個可以執(zhí)行Java字節(jié)碼的虛擬機(jī)進(jìn)程。Java源文件被編譯成能被Java虛擬機(jī)執(zhí)行的字節(jié)碼文件。
Java被設(shè)計成允許應(yīng)用程序可以運(yùn)行在任意的平臺,而不需要程序員為每一個平臺單獨(dú)重寫或者是重新編譯。Java虛擬機(jī)讓這個變?yōu)榭赡,因為它知道底層硬件平臺的指令長度和其他特性。
2.JDK和JRE的區(qū)別是什么?
Java運(yùn)行時環(huán)境(JRE)是將要執(zhí)行Java程序的Java虛擬機(jī)。它同時也包含了執(zhí)行applet需要的瀏覽器插件。Java開發(fā)工具包(JDK)是完整的Java軟件開發(fā)包,包含了JRE,編譯器和其他的工具(比如:JavaDoc,Java調(diào)試器),可以讓開發(fā)者開發(fā)、編譯、執(zhí)行Java應(yīng)用程序。
3.”static”關(guān)鍵字是什么意思?Java中是否可以覆蓋(override)一個private或者是static的方法?
“static”關(guān)鍵字表明一個成員變量或者是成員方法可以在沒有所屬的類的實(shí)例變量的情況下被訪問。
Java中static方法不能被覆蓋,因為方法覆蓋是基于運(yùn)行時動態(tài)綁定的,而static方法是編譯時靜態(tài)綁定的。static方法跟類的任何實(shí)例都不相關(guān),所以概念上不適用。
4.是否可以在static環(huán)境中訪問非static變量?
static變量在Java中是屬于類的,它在所有的實(shí)例中的值是一樣的。當(dāng)類被Java虛擬機(jī)載入的時候,會對static變量進(jìn)行初始化。如果你的代碼嘗試不用實(shí)例來訪問非static的變量,編譯器會報錯,因為這些變量還沒有被創(chuàng)建出來,還沒有跟任何實(shí)例關(guān)聯(lián)上。
5.Java支持的數(shù)據(jù)類型有哪些?什么是自動拆裝箱?
Java語言支持的8中基本數(shù)據(jù)類型是:byte short int long float double boolean char
自動裝箱是Java編譯器在基本數(shù)據(jù)類型和對應(yīng)的對象包裝類型之間做的一個轉(zhuǎn)化。比如:把int轉(zhuǎn)化成Integer,double轉(zhuǎn)化成double,等等。反之就是自動拆箱。
6.Java中的方法覆蓋(Overriding)和方法重載(Overloading)是什么意思?
Java中的方法重載發(fā)生在同一個類里面兩個或者是多個方法的方法名相同但是參數(shù)不同的情況。與此相對,方法覆蓋是說子類重新定義了父類的方法。方法覆蓋必須有相同的方法名,參數(shù)列表和返回類型。覆蓋者可能不會限制它所覆蓋的方法的訪問。
7.Java中,什么是構(gòu)造函數(shù)?什么是構(gòu)造函數(shù)重載?什么是復(fù)制構(gòu)造函數(shù)?
當(dāng)新對象被創(chuàng)建的時候,構(gòu)造函數(shù)會被調(diào)用。每一個類都有構(gòu)造函數(shù)。在程序員沒有給類提供構(gòu)造函數(shù)的情況下,Java編譯器會為這個類創(chuàng)建一個默認(rèn)的構(gòu)造函數(shù)。
Java中構(gòu)造函數(shù)重載和方法重載很相似?梢詾橐粋類創(chuàng)建多個構(gòu)造函數(shù)。每一個構(gòu)造函數(shù)必須有它自己唯一的參數(shù)列表。
Java不支持像C++中那樣的復(fù)制構(gòu)造函數(shù),這個不同點(diǎn)是因為如果你不自己寫構(gòu)造函數(shù)的情況下,Java不會創(chuàng)建默認(rèn)的復(fù)制構(gòu)造函數(shù)。
8.Java支持多繼承么?
不支持,Java不支持多繼承。每個類都只能繼承一個類,但是可以實(shí)現(xiàn)多個接口。
9.接口和抽象類的區(qū)別是什么?
Java提供和支持創(chuàng)建抽象類和接口。它們的實(shí)現(xiàn)有共同點(diǎn),不同點(diǎn)在于:
接口中所有的方法隱含的都是抽象的。而抽象類則可以同時包含抽象和非抽象的方法。 類可以實(shí)現(xiàn)很多個接口,但是只能繼承一個抽象類 類如果要實(shí)現(xiàn)一個接口,它必須要實(shí)現(xiàn)接口聲明的所有方法。但是,類可以不實(shí)現(xiàn)抽象類聲明的所有方法,當(dāng)然,在這種情況下,類也必須得聲明成是抽象的。 抽象類可以在不提供接口方法實(shí)現(xiàn)的情況下實(shí)現(xiàn)接口。 Java接口中聲明的變量默認(rèn)都是final的。抽象類可以包含非final的變量。 Java接口中的成員函數(shù)默認(rèn)是public的。抽象類的成員函數(shù)可以是private,protected或者是public。 接口是絕對抽象的,不可以被實(shí)例化。抽象類也不可以被實(shí)例化,但是,如果它包含main方法的話是可以被調(diào)用的。也可以參考JDK8中抽象類和接口的區(qū)別
10.什么是值傳遞和引用傳遞?
對象被值傳遞,意味著傳遞了對象的一個副本。因此,就算是改變了對象副本,也不會影響源對象的值。
對象被引用傳遞,意味著傳遞的并不是實(shí)際的對象,而是對象的引用。因此,外部對引用對象所做的改變會反映到所有的對象上。
11.進(jìn)程和線程的區(qū)別是什么?
進(jìn)程是執(zhí)行著的應(yīng)用程序,而線程是進(jìn)程內(nèi)部的一個執(zhí)行序列。一個進(jìn)程可以有多個線程。線程又叫做輕量級進(jìn)程。
12.創(chuàng)建線程有幾種不同的方式?你喜歡哪一種?為什么?
有三種方式可以用來創(chuàng)建線程:
繼承Thread類 實(shí)現(xiàn)Runnable接口 應(yīng)用程序可以使用Executor框架來創(chuàng)建線程池。
實(shí)現(xiàn)Runnable接口這種方式更受歡迎,因為這不需要繼承Thread類。在應(yīng)用設(shè)計中已經(jīng)繼承了別的對象的情況下,這需要多繼承(而Java不支持多繼承),只能實(shí)現(xiàn)接口。同時,線程池也是非常高效的,很容易實(shí)現(xiàn)和使用。
13.概括的解釋下線程的幾種可用狀態(tài)。
線程在執(zhí)行過程中,可以處于下面幾種狀態(tài):
就緒(Runnable):線程準(zhǔn)備運(yùn)行,不一定立馬就能開始執(zhí)行。 運(yùn)行中(Running):進(jìn)程正在執(zhí)行線程的代碼。 等待中(Waiting):線程處于阻塞的狀態(tài),等待外部的處理結(jié)束。 睡眠中(Sleeping):線程被強(qiáng)制睡眠。 I/O阻塞(Blocked on I/O):等待I/O操作完成。 同步阻塞(Blocked on Synchronization):等待獲取鎖。 死亡(Dead):線程完成了執(zhí)行。
14.同步方法和同步代碼塊的區(qū)別是什么?
在Java語言中,每一個對象有一把鎖。線程可以使用synchronized關(guān)鍵字來獲取對象上的鎖。synchronized關(guān)鍵字可應(yīng)用在方法級別(粗粒度鎖)或者是代碼塊級別(細(xì)粒度鎖)。
15.在監(jiān)視器(Monitor)內(nèi)部,是如何做線程同步的?程序應(yīng)該做哪種級別的同步?
監(jiān)視器和鎖在Java虛擬機(jī)中是一塊使用的。監(jiān)視器監(jiān)視一塊同步代碼塊,確保一次只有一個線程執(zhí)行同步代碼塊。每一個監(jiān)視器都和一個對象引用相關(guān)聯(lián)。線程在獲取鎖之前不允許執(zhí)行同步代碼。
16.什么是死鎖(deadlock)?
兩個進(jìn)程都在等待對方執(zhí)行完畢才能繼續(xù)往下執(zhí)行的時候就發(fā)生了死鎖。結(jié)果就是兩個進(jìn)程都陷入了無限的等待中。
17.如何確保N個線程可以訪問N個資源同時又不導(dǎo)致死鎖?
使用多線程的時候,一種非常簡單的避免死鎖的方式就是:指定獲取鎖的順序,并強(qiáng)制線程按照指定的順序獲取鎖。因此,如果所有的線程都是以同樣的順序加鎖和釋放鎖,就不會出現(xiàn)死鎖了。
18.Java集合類框架的基本接口有哪些?
Java集合類提供了一套設(shè)計良好的支持對一組對象進(jìn)行操作的接口和類。Java集合類里面最基本的接口有:
Collection:代表一組對象,每一個對象都是它的子元素。 Set:不包含重復(fù)元素的Collection。 List:有順序的collection,并且可以包含重復(fù)元素。 Map:可以把鍵(key)映射到值(value)的對象,鍵不能重復(fù)。
19.為什么集合類沒有實(shí)現(xiàn)Cloneable和Serializable接口?
集合類接口指定了一組叫做元素的對象。集合類接口的每一種具體的實(shí)現(xiàn)類都可以選擇以它自己的方式對元素進(jìn)行保存和排序。有的集合類允許重復(fù)的鍵,有些不允許。
20.什么是迭代器(Iterator)?
Iterator接口提供了很多對集合元素進(jìn)行迭代的方法。每一個集合類都包含了可以返回迭代器實(shí)例的
迭代方法。迭代器可以在迭代的過程中刪除底層集合的元素。
克隆(cloning)或者是序列化(serialization)的語義和含義是跟具體的實(shí)現(xiàn)相關(guān)的。因此,應(yīng)該由集合類的具體實(shí)現(xiàn)來決定如何被克隆或者是序列化。
21.Iterator和ListIterator的區(qū)別是什么?
下面列出了他們的區(qū)別:
Iterator可用來遍歷Set和List集合,但是ListIterator只能用來遍歷List。 Iterator對集合只能是前向遍歷,ListIterator既可以前向也可以后向。 ListIterator實(shí)現(xiàn)了Iterator接口,并包含其他的功能,比如:增加元素,替換元素,獲取前一個和后一個元素的索引,等等。
22.快速失敗(fail-fast)和安全失敗(fail-safe)的區(qū)別是什么?
Iterator的安全失敗是基于對底層集合做拷貝,因此,它不受源集合上修改的影響。java.util包下面的所有的集合類都是快速失敗的,而java.util.concurrent包下面的所有的類都是安全失敗的?焖偈〉牡鲿䲣伋鯟oncurrentModificationException異常,而安全失敗的迭代器永遠(yuǎn)不會拋出這樣的異常。
23.Java中的HashMap的工作原理是什么?
Java中的HashMap是以鍵值對(key-value)的形式存儲元素的。HashMap需要一個hash函數(shù),它使用hashCode()和equals()方法來向集合/從集合添加和檢索元素。當(dāng)調(diào)用put()方法的時候,HashMap會計算key的hash值,然后把鍵值對存儲在集合中合適的索引上。如果key已經(jīng)存在了,value會被更新成新值。HashMap的一些重要的特性是它的容量(capacity),負(fù)載因子(load factor)和擴(kuò)容極限(threshold resizing)。
24.hashCode()和equals()方法的重要性體現(xiàn)在什么地方?
Java中的HashMap使用hashCode()和equals()方法來確定鍵值對的索引,當(dāng)根據(jù)鍵獲取值的時候也會用到這兩個方法。如果沒有正確的實(shí)現(xiàn)這兩個方法,兩個不同的鍵可能會有相同的hash值,因此,可能會被集合認(rèn)為是相等的。而且,這兩個方法也用來發(fā)現(xiàn)重復(fù)元素。所以這兩個方法的實(shí)現(xiàn)對HashMap的精確性和正確性是至關(guān)重要的。
25.HashMap和Hashtable有什么區(qū)別?
HashMap和Hashtable都實(shí)現(xiàn)了Map接口,因此很多特性非常相似。但是,他們有以下不同點(diǎn): HashMap允許鍵和值是null,而Hashtable不允許鍵或者值是null。 Hashtable是同步的,而HashMap不是。因此,HashMap更適合于單線程環(huán)境,而Hashtable適合于多線程環(huán)境。 HashMap提供了可供應(yīng)用迭代的鍵的集合,因此,HashMap是快速失敗的。另一方面,Hashtable提供了對鍵的列舉(Enumeration)。 一般認(rèn)為Hashtable是一個遺留的類。
26.數(shù)組(Array)和列表(ArrayList)有什么區(qū)別?什么時候應(yīng)該使用Array而不是ArrayList?
下面列出了Array和ArrayList的不同點(diǎn):
Array可以包含基本類型和對象類型,ArrayList只能包含對象類型。 Array大小是固定的,ArrayList的大小是動態(tài)變化的。 ArrayList提供了更多的方法和特性,比如:addAll(),removeAll(),iterator()等等。 對于基本類型數(shù)據(jù),集合使用自動裝箱來減少編碼工作量。但是,當(dāng)處理固定大小的基本數(shù)據(jù)類型的時候,這種方式相對比較慢。
27.ArrayList和LinkedList有什么區(qū)別?
ArrayList和LinkedList都實(shí)現(xiàn)了List接口,他們有以下的不同點(diǎn):
ArrayList是基于索引的數(shù)據(jù)接口,它的底層是數(shù)組。它可以以O(shè)(1)時間復(fù)雜度對元素進(jìn)行隨機(jī)訪問。與此對應(yīng),LinkedList是以元素列表的形式存儲它的數(shù)據(jù),每一個元素都和它的前一個和后一個元素鏈接在一起,在這種情況下,查找某個元素的時間復(fù)雜度是O(n)。
相對于ArrayList,LinkedList的插入,添加,刪除操作速度更快,因為當(dāng)元素被添加到集合任意位置的時候,不需要像數(shù)組那樣重新計算大小或者是更新索引。
LinkedList比ArrayList更占內(nèi)存,因為LinkedList為每一個節(jié)點(diǎn)存儲了兩個引用,一個指向前一個元素,一個指向下一個元素也可以參考ArrayList vs. LinkedList。
28.Comparable和Comparator接口是干什么的?列出它們的區(qū)別。
Java提供了只包含一個compareTo()方法的Comparable接口。這個方法可以個給兩個對象排序。具體來說,它返回負(fù)數(shù),0,正數(shù)來表明輸入對象小于,等于,大于已經(jīng)存在的對象。
Java提供了包含compare()和equals()兩個方法的Comparator接口。compare()方法用來給兩個輸入?yún)?shù)排序,返回負(fù)數(shù),0,正數(shù)表明第一個參數(shù)是小于,等于,大于第二個參數(shù)。equals()方法需要一個對象作為參數(shù),它用來決定輸入?yún)?shù)是否和comparator相等。只有當(dāng)輸入?yún)?shù)也是一個comparator并且輸入?yún)?shù)和當(dāng)前comparator的排序結(jié)果是相同的時候,這個方法才返回true。
29.什么是Java優(yōu)先級隊列(Priority Queue)?
PriorityQueue是一個基于優(yōu)先級堆的無界隊列,它的元素是按照自然順序(natural order)排序的。在創(chuàng)建的時候,我們可以給它提供一個負(fù)責(zé)給元素排序的比較器。PriorityQueue不允許null值,因為他們沒有自然順序,或者說他們沒有任何的相關(guān)聯(lián)的比較器。最后,PriorityQueue不是線程安全的,入隊和出隊的時間復(fù)雜度是O(log(n))。
30.你了解大O符號(big-O notation)么?你能給出不同數(shù)據(jù)結(jié)構(gòu)的例子么?
大O符號描述了當(dāng)數(shù)據(jù)結(jié)構(gòu)里面的元素增加的時候,算法的規(guī);蛘呤切阅茉谧顗牡膱鼍跋掠卸嗝春谩
大O符號也可用來描述其他的行為,比如:內(nèi)存消耗。因為集合類實(shí)際上是數(shù)據(jù)結(jié)構(gòu),我們一般使用大O符號基于時間,內(nèi)存和性能來選擇最好的實(shí)現(xiàn)。大O符號可以對大量數(shù)據(jù)的性能給出一個很好的說明。
31.如何權(quán)衡是使用無序的數(shù)組還是有序的數(shù)組?
有序數(shù)組最大的好處在于查找的時間復(fù)雜度是O(log n),而無序數(shù)組是O(n)。有序數(shù)組的缺點(diǎn)是插入操作的時間復(fù)雜度是O(n),因為值大的元素需要往后移動來給新元素騰位置。相反,無序數(shù)組的插入時間復(fù)雜度是常量O(1)。
32.Java集合類框架的最佳實(shí)踐有哪些?
根據(jù)應(yīng)用的需要正確選擇要使用的集合的類型對性能非常重要,比如:假如元素的大小是固定的,而且能事先知道,我們就應(yīng)該用Array而不是ArrayList。
有些集合類允許指定初始容量。因此,如果我們能估計出存儲的元素的數(shù)目,我們可以設(shè)置初始容量來避免重新計算hash值或者是擴(kuò)容。
為了類型安全,可讀性和健壯性的原因總是要使用泛型。同時,使用泛型還可以避免運(yùn)行時的ClassCastException。
使用JDK提供的不變類(immutable class)作為Map的鍵可以避免為我們自己的類實(shí)現(xiàn)hashCode()和equals()方法。
編程的時候接口優(yōu)于實(shí)現(xiàn)。
底層的集合實(shí)際上是空的情況下,返回長度是0的集合或者是數(shù)組,不要返回null。
33.Enumeration接口和Iterator接口的區(qū)別有哪些?
Enumeration速度是Iterator的2倍,同時占用更少的內(nèi)存。但是,Iterator遠(yuǎn)遠(yuǎn)比Enumeration安全,因為其他線程不能夠修改正在被iterator遍歷的集合里面的對象。同時,Iterator允許調(diào)用者刪除底層集合里面的元素,這對Enumeration來說是不可能的。
34.HashSet和TreeSet有什么區(qū)別?
HashSet是由一個hash表來實(shí)現(xiàn)的,因此,它的元素是無序的。add(),remove(),contains()方法的時間復(fù)雜度是O(1)。
另一方面,TreeSet是由一個樹形的結(jié)構(gòu)來實(shí)現(xiàn)的,它里面的元素是有序的。因此,add(),remove(),contains()方法的時間復(fù)雜度是O(logn)。
35.Java中垃圾回收有什么目的?什么時候進(jìn)行垃圾回收?
垃圾回收的目的是識別并且丟棄應(yīng)用不再使用的對象來釋放和重用資源。
36.System.gc()和Runtime.gc()會做什么事情?
這兩個方法用來提示JVM要進(jìn)行垃圾回收。但是,立即開始還是延遲進(jìn)行垃圾回收是取決于JVM的。
37.finalize()方法什么時候被調(diào)用?析構(gòu)函數(shù)(finalization)的目的是什么?
在釋放對象占用的內(nèi)存之前,垃圾收集器會調(diào)用對象的finalize()方法。一般建議在該方法中釋放對象持有的資源。
38.如果對象的引用被置為null,垃圾收集器是否會立即釋放對象占用的內(nèi)存?
不會,在下一個垃圾回收周期中,這個對象將是可被回收的。
39.Java堆的結(jié)構(gòu)是什么樣子的?什么是堆中的永久代(Perm Gen space)?
JVM的堆是運(yùn)行時數(shù)據(jù)區(qū),所有類的實(shí)例和數(shù)組都是在堆上分配內(nèi)存。它在JVM啟動的時候被創(chuàng)建。對象所占的堆內(nèi)存是由自動內(nèi)存管理系統(tǒng)也就是垃圾收集器回收。
堆內(nèi)存是由存活和死亡的對象組成的。存活的對象是應(yīng)用可以訪問的,不會被垃圾回收。死亡的對象是應(yīng)用不可訪問尚且還沒有被垃圾收集器回收掉的對象。一直到垃圾收集器把這些對象回收掉之前,他們會一直占據(jù)堆內(nèi)存空間。
40.串行(serial)收集器和吞吐量(throughput)收集器的區(qū)別是什么?
吞吐量收集器使用并行版本的新生代垃圾收集器,它用于中等規(guī)模和大規(guī)模數(shù)據(jù)的應(yīng)用程序。而串行收集器對大多數(shù)的小應(yīng)用(在現(xiàn)代處理器上需要大概100M左右的內(nèi)存)就足夠了。
41.在Java中,對象什么時候可以被垃圾回收?
當(dāng)對象對當(dāng)前使用這個對象的應(yīng)用程序變得不可觸及的時候,這個對象就可以被回收了。
42.JVM的永久代中會發(fā)生垃圾回收么?
垃圾回收不會發(fā)生在永久代,如果永久代滿了或者是超過了臨界值,會觸發(fā)完全垃圾回收(Full GC)。如果你仔細(xì)查看垃圾收集器的輸出信息,就會發(fā)現(xiàn)永久代也是被回收的。這就是為什么正確的永久代大小對避免Full GC是非常重要的原因。
JAVA筆試題目及答案6
一、面向?qū)ο蟮奶卣饔心男┓矫?/strong>
1.抽象:
抽象就是忽略一個主題中與當(dāng)前目標(biāo)無關(guān)的那些方面,以便更充分地注意與當(dāng)前目標(biāo)有關(guān)的方面。抽象并不打算了解全部問題,而只是選擇其中的一部分,暫時不用部分細(xì)節(jié)。抽象包括兩個方面,一是過程抽象,二是數(shù)據(jù)抽象。
2.繼承:
繼承是一種聯(lián)結(jié)類的層次模型,并且允許和鼓勵類的重用,它提供了一種明確表述共性的方法。對象的一個新類可以從現(xiàn)有的類中派生,這個過程稱為類繼承。新類繼承了原始類的特性,新類稱為原始類的派生類(子類),而原始類稱為新類的基類(父類)。派生類可以從它的基類那里繼承方法和實(shí)例變量,并且類可以修改或增加新的方法使之更適合特殊的需要。
3.封裝:
封裝是把過程和數(shù)據(jù)包圍起來,對數(shù)據(jù)的訪問只能通過已定義的界面。面向?qū)ο笥嬎闶加谶@個基本概念,即現(xiàn)實(shí)世界可以被描繪成一系列完全自治、封裝的對象,這些對象通過一個受保護(hù)的接口訪問其他對象。
4.多態(tài)性:
多態(tài)性是指允許不同類的對象對同一消息作出響應(yīng)。多態(tài)性包括參數(shù)化多態(tài)性和包含多態(tài)性。多態(tài)性語言具有靈活、抽象、行為共享、代碼共享的優(yōu)勢,很好的解決了應(yīng)用程序函數(shù)同名問題。
二、String是最基本的數(shù)據(jù)類型嗎?
基本數(shù)據(jù)類型包括byte、int、char、long、float、double、boolean和short. java.lang.String類是final類型的,因此不可以繼承這個類、不能修改這個類。為了提高效率節(jié)省空間,我們應(yīng)該用 StringBuffer類。
三、int 和 Integer 有什么區(qū)別?
Java 提供兩種不同的類型:引用類型和原始類型(或內(nèi)置類型)。int是Java的原始數(shù)據(jù)類型,Integer是Java為int提供的封裝類。Java為每個原始類型提供了封裝類。
引用類型和原始類型的行為完全不同,并且它們具有不同的語義。引用類型和原始類型具有不同的特征和用法,它們包括:大小和速度問題,這種類型以哪種類型的數(shù)據(jù)結(jié)構(gòu)存儲,當(dāng)引用類型和原始類型用作某個類的實(shí)例數(shù)據(jù)時所指定的缺省值。對象引用實(shí)例變量的缺省值為 null,而原始類型實(shí)例變量的缺省值與它們的類型有關(guān)。
四、String 和StringBuffer的區(qū)別?
Java平臺提供了兩個類:String和StringBuffer,它們可以儲存和操作字符串,即包含多個字符的字符數(shù)據(jù)。這個String類提供了數(shù)值不可改變的字符串。而這個StringBuffer類提供的字符串進(jìn)行修改。當(dāng)你知道字符數(shù)據(jù)要改變的時候你就可以使用StringBuffer.典型地,你可以使用StringBuffer來動態(tài)構(gòu)造字符數(shù)據(jù)。
五、運(yùn)行時異常與一般異常有何異同?
異常表示程序運(yùn)行過程中可能出現(xiàn)的非正常狀態(tài),運(yùn)行時異常表示虛擬機(jī)的通常操作中可能遇到的異常,是一種常見運(yùn)行錯誤。Java編譯器要求方法必須聲明拋出可能發(fā)生的非運(yùn)行時異常,但是并不要求必須聲明拋出未被捕獲的運(yùn)行時異常。
六、說出Servlet的生命周期,并說出Servlet和CGI的區(qū)別。
Servlet被服務(wù)器實(shí)例化后,容器運(yùn)行其init方法,請求到達(dá)時運(yùn)行其service方法,service方法自動派遣運(yùn)行與請求對應(yīng)的doXXX方法(doGet,doPost)等,當(dāng)服務(wù)器決定將實(shí)例銷毀的時候調(diào)用其destroy方法。
與CGI的區(qū)別在于Servlet處于服務(wù)器進(jìn)程中,它通過多線程方式運(yùn)行其service方法,一個實(shí)例可以服務(wù)于多個請求,并且其實(shí)例一般不會銷毀,而CGI對每個請求都產(chǎn)生新的進(jìn)程,服務(wù)完成后就銷毀,所以效率上低于CGI.
七、說出ArrayList,Vector, LinkedList的存儲性能和特性
ArrayList和Vector都是使用數(shù)組方式存儲數(shù)據(jù),此數(shù)組元素數(shù)大于實(shí)際存儲的數(shù)據(jù)以便增加和插入元素,它們都允許直接按序號索引元素,但是插入元素要涉及數(shù)組元素移動等內(nèi)存操作,所以索引數(shù)據(jù)快而插入數(shù)據(jù)慢,Vector由于使用了synchronized方法(線程安全),通常性能上較ArrayList差,而LinkedList使用雙向鏈表實(shí)現(xiàn)存儲,按序號索引數(shù)據(jù)需要進(jìn)行前向或后向遍歷,但是插入數(shù)據(jù)時只需要記錄本項的前后項即可,所以插入速度較快。
八、EJB是基于哪些技術(shù)實(shí)現(xiàn)的?并說出SessionBean和EntityBean的區(qū)別,StatefulBean和StatelessBean的區(qū)別。
EJB包括Session Bean、Entity Bean、Message Driven Bean,基于JNDI、RMI、JAT等技術(shù)實(shí)現(xiàn)。
SessionBean在J2EE應(yīng)用程序中被用來完成一些服務(wù)器端的業(yè)務(wù)操作,例如訪問數(shù)據(jù)庫、調(diào)用其他EJB組件。EntityBean被用來代表應(yīng)用系統(tǒng)中用到的數(shù)據(jù)。
對于客戶機(jī),SessionBean是一種非持久性對象,它實(shí)現(xiàn)某些在服務(wù)器上運(yùn)行的業(yè)務(wù)邏輯。
對于客戶機(jī),EntityBean是一種持久性對象,它代表一個存儲在持久性存儲器中的實(shí)體的對象視圖,或是一個由現(xiàn)有企業(yè)應(yīng)用程序?qū)崿F(xiàn)的實(shí)體。
九、Collection 和 Collections的區(qū)別。
Collection是集合類的上級接口,繼承與他的接口主要有Set 和List.
Collections是針對集合類的一個幫助類,他提供一系列靜態(tài)方法實(shí)現(xiàn)對各種集合的搜索、排序、線程安全化等操作。
十、&和&&的區(qū)別。
&是位運(yùn)算符,表示按位與運(yùn)算,&&是邏輯運(yùn)算符,表示邏輯與(and)。
JAVA筆試題目及答案7
一、單項選擇題(共10題,每題2分,共20分)
1. 下列說法哪一個是正確的。( B )
A.Java程序經(jīng)編譯后會產(chǎn)生machine code
B.Java程序經(jīng)編譯后會產(chǎn)生byte code
C.Java程序經(jīng)編譯后會產(chǎn)生DLL
D.以上都不正確
2. 提供Java存取數(shù)據(jù)庫能力的包是。( A )
A.java.sql B.java.awt C.java.lang D.java.swing
3. 執(zhí)行如下程序代碼后,C的值是。( C )
a=0;c=0;
do{
--c;
a=a-1;
}while(a>0);
A.0 B.1 C.-1 D.死循環(huán)
4. 下面的語句中正確的表達(dá)式為。( C )
A.byte b = 128;
B.boolean n = null;
C.double d = 0.9239d;
D.float f = 0.9239;
5. 將一個十六進(jìn)制值賦給一個long型變量的正確寫法為。( D )
A.long number = 345L;
B.long number = 0345;
C.long number = 0345L;
D.long number = 0x345L;
6. 以下程序代碼的輸出是。( B )
public class test (
public static void main (String args[]) (
System.out.printIn (6 ^ 3);
)
)
A.3 B.5 C.6 D.11
7. 以下程序代碼的輸出是。(E )
public class test (
private static int j = 0;
private static boolean methodB(int k) (
j += k;
return true;
)
public static void methodA(int i) {
boolean b:
b = i < 10 | methodB (4);
b = i < 10 || methodB (8);
)
public static void main (String args[] } (
methodA (0);
system.out.printIn(j);
)
)
A.0 B.4 C.8 D.12 E.不能編譯通過
8. 以下程序代碼的輸出是。( A)
public class test {
public static void add3 (Integer i) }
int val = i.intValue ( );
val += 3;
i = new Integer (val);
}
public static void main (String args [ ] ) {
Integer i = new Integer (0);
add3 (i);
system.out.printIn (i.intValue ( ) );
}
)
A.編譯失敗 B.編譯成功但在第三行會出現(xiàn)異常 C.0 D.3
9. 以下程序代碼執(zhí)行后,哪個說法正確?( B )
int index = 1;
boolean[] test = new Boolean[3];
boolean foo= test [index];
A.有異常拋出。
B.無法編譯。
C.foo的值是0。
D.foo的值是null。
E.foo的值是true。
F.foo的值是false。
10. 以下哪個類是swt包中的。( D )
A.MessageBox B.MessageDialog C.JDialog D.DisplayMode
二、多項選擇題(共5題,每題4分,共20分)
1. 在下面的選項中合法的標(biāo)識符有。( ADEF )
A._ok
B.*point
C.this
D.$byte
E.const
F.ILikeJLCSS
2. 下面的選項中哪些不是java的關(guān)鍵字。( AB D )
A.TRUE
B.sizeof
C.goto
D.const
E.super
F.void
3. 下面的敘述中正確的有。( AC )
A. 環(huán)境變量可在編譯source code時指定。
B. 在編譯程序時,所能指定的環(huán)境變量不包括class path。
C. javac一次可同時編譯數(shù)個Java源文件。
D. javac.exe能指定編譯結(jié)果要置于哪個目錄(directory)。
4. 下面的敘述中正確的有。( C )
A.equals()方法判定引用值是否指向同一對象。
B.= = 操作符判定兩個分立的對象的內(nèi)容和類型是否一致。
C.equals()方法只有在兩個對象的內(nèi)容一致時返回true。
D.類File重寫方法equals()在兩個分立的對象的內(nèi)容和類型一致時返回true。
5. 下面有關(guān)變量及其作用域的陳述哪些是對的。( A C )
A. 在方法里面定義的局部變量在方法退出的時候被撤銷。
B. 局部變量也叫自動變量。
C. 在方法外面定義的變量(譯注:即實(shí)例變量)在對象被構(gòu)造時創(chuàng)建。
D. 在方法中定義的方法的參變量只要該對象被需要就一直存在。
三、簡答題(共7題,共40分)
1. 請寫出一個輸出“Hello World!” 的程序。(3分)
答:public Class Hello World
{
Public static void main(String[]args)
{
System.out.println(“HELLO WOTLD”);
}
}
2. char型變量中能不能存貯一個中文漢字? 為什么? (3分)
答:能存儲一個漢字;因為它能存儲四個字節(jié)而每個漢字只占兩個字節(jié)。
3. 常見的兩種xml解析技術(shù)是什么? 區(qū)別是什么? (4分)
答:常見的兩種有:SAX和DOM。
區(qū)別:SAX 是一種事件驅(qū)動的xml解析方式。每次訪問一個xml文件中的某個節(jié)點(diǎn)的時候,sax就會搜索一遍xml文件,在找到相應(yīng)的節(jié)點(diǎn)后就會觸發(fā)一個事件來處理請求。只讀
DOM是一種基于樹狀的查找方式。DOM會將xml解析成一棵樹,存在內(nèi)存中。開發(fā)者可以通過查找樹的節(jié)點(diǎn)來取得文件的內(nèi)容或者修改內(nèi)容?勺x寫
4. MVC是什么,如何實(shí)現(xiàn)? (5分)
答:MVC是一個是一個設(shè)計模式,它強(qiáng)制性的使應(yīng)用程序的輸入,處理和輸出分開。使用MVC應(yīng)用程序被分為三個核心部件:M----------MODO模型,V ----------VIEW 試圖,C --------- Contral控制
實(shí)現(xiàn):首先有頁面(jsp)發(fā)送請求給控制器(servlet),然后由控制器接收用戶的請求,并決定應(yīng)該調(diào)用哪個模型(javabean)來進(jìn)行處理,然后模型用業(yè)務(wù)邏輯來處理用戶的請求并返回數(shù)據(jù),最后控制器用相應(yīng)的視圖格式化模型返回的數(shù)據(jù),并通過表示層顯示給用戶。
5. .J2EE是什么?(6分)
答:J2EE 是Sun公司提出的多層(multi-diered),分布式(distributed),基于組件(component-base)的企業(yè)級應(yīng)用模型 (enterpriese application model).在這樣的一個應(yīng)用系統(tǒng)中,可按照功能劃分為不同的組件,這些組件又可在不同計算機(jī)上,并且處于相應(yīng)的層次(tier)中。所屬層次包括客戶層(clietn tier)組件,web層和組件,Business層和組件,企業(yè)信息系統(tǒng)(EIS)層。
6. jsp有哪些內(nèi)置對象?作用分別是什么? (9分)
答:1.request 用戶端請求,此請求會包含來自GET/POST請求的參數(shù);2.response 網(wǎng)頁傳回用戶端的回應(yīng);3.pageContext 網(wǎng)頁的屬性是在這里管理;4.session 與請求有關(guān)的會話期;5.application servlet 正在執(zhí)行的內(nèi)容;6.out 用來傳送回應(yīng)的輸出;7.config servlet的構(gòu)架部件;8.page JSP網(wǎng)頁本身;9.exception 針對錯誤網(wǎng)頁,未捕捉的例外
7. 作用域public,private,protected,以及不寫時的區(qū)別 ?(10分)
答:作用域 當(dāng)前類 同一package 子孫類 其他package
public √ √ √ √
protected √ √ √ ×
friendly √ √ × ×
private √ × × ×
不寫時默認(rèn)為friendly
四、編碼及論述題(共2題,每題10分,共20分)
1. 什么是Singleton,它的作用是什么,它有幾種形式?請用代碼寫出一個Singleton類。
答:Java Singleton 模式用來保證在運(yùn)行的應(yīng)用程序中,一個Class只是實(shí)例化一次,也就是只有一個相應(yīng)的對象存在。
它有三種形式
public class Singleton
{
private static Singleton instance = null;
public static synchronized Singleton getInstance()
{
if (instance==null)
instance=new Singleton();
return instance;
}
}
2. 在Struts + Spring + Hibernate的組合框架模式中,三者各自的特點(diǎn)都是什么?
答:Strtus WEB層 Spring是業(yè)務(wù)層 Hiebenate是持久化層。
【JAVA筆試題目及答案】相關(guān)文章:
2017年Java筆試題及答案08-27
最新中興Java語言筆試真題及答案08-24
Java中級開發(fā)工程師筆試題及答案201608-21
excel選擇題目及答案11-08
EMBA面試常見題目及答案06-22
java認(rèn)證考試試題及答案08-20