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