久久九九国产无码高清_人人做人人澡人人人爽_日本一区二区三区中文字幕_日韩无码性爱免费

JAVA筆試題目及答案

時(shí)間:2023-08-03 19:31:29 玉華 JAVA認(rèn)證 我要投稿
  • 相關(guān)推薦

JAVA經(jīng)典筆試題目及答案(精選7套)

  編程語(yǔ)言可以簡(jiǎn)單的理解為一種計(jì)算機(jī)和人都能識(shí)別的語(yǔ)言。一種計(jì)算機(jī)語(yǔ)言讓程序員能夠準(zhǔn)確地定義計(jì)算機(jī)所需要使用的數(shù)據(jù),并精確地定義在不同情況下所應(yīng)當(dāng)采取的行動(dòng),下面是小編收集的JAVA經(jīng)典筆試題目及答案,歡迎大家閱讀和參考。

JAVA經(jīng)典筆試題目及答案(精選7套)

  JAVA筆試題目及答案1

  一、選擇題(共50題,每題1.5分,共75分。多選題選不全或選錯(cuò)都不得分。)

  1. 以下屬于面向?qū)ο蟮奶卣鞯氖?C,D)。(兩項(xiàng))

  A) 重載

  B) 重寫(xiě)

  C) 封裝

  D) 繼承

  2. 以下代碼運(yùn)行輸出是(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) 編譯出錯(cuò)

  D) 運(yùn)行出錯(cuò)

  3. 在使用super 和this關(guān)鍵字時(shí),以下描述正確的是(A)

  A) 在子類構(gòu)造方法中使用super()顯示調(diào)用父類的構(gòu)造方法,super()必須寫(xiě)在子類構(gòu)造方法的第一行,否則編譯不通過(guò)

  B) super()和this()不一定要放在構(gòu)造方法內(nèi)第一行

  C) this()和super()可以同時(shí)出現(xiàn)在一個(gè)構(gòu)造函數(shù)中

  D) this()和super()可以在static環(huán)境中使用,包括static方法和static語(yǔ)句塊

  4. 以下對(duì)封裝的描述正確的是(D)

  A) 只能對(duì)一個(gè)類中的方法進(jìn)行封裝,不能對(duì)屬性進(jìn)行封裝

  C) 封裝的意義不大,因此在編碼時(shí)盡量不要使用

  D) 封裝的主要作用在于對(duì)外隱藏內(nèi)部實(shí)現(xiàn)細(xì)節(jié),增強(qiáng)程序的安全性

  5. 以下對(duì)繼承的描述錯(cuò)誤的是(A)

  A) Java中的繼承允許一個(gè)子類繼承多個(gè)父類

  B) 父類更具有通用性,子類更具體

  C) Java中的繼承存在著傳遞性

  D) 當(dāng)實(shí)例化子類時(shí)會(huì)遞歸調(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)行出錯(cuò)

  D) 編譯有兩處錯(cuò)誤

  7. 以下說(shuō)法錯(cuò)誤的是()

  A) super.方法()可以調(diào)用父類的所有非私有方法

  B) super()可以調(diào)用父類的所有非私有構(gòu)造函數(shù)

  C) super.屬性可以調(diào)用父類的所有非私有屬性

  D) this和super關(guān)鍵字可以出現(xiàn)在同一個(gè)構(gòu)造函數(shù)中

  8. 以下關(guān)于final關(guān)鍵字說(shuō)法錯(cuò)誤的是(A,C)(兩項(xiàng))

  A) final是java中的修飾符,可以修飾類、接口、抽象類、方法和屬性

  B) final修飾的類肯定不能被繼承

  C) final修飾的方法不能被重載

  D) final修飾的變量不允許被再次賦值

  9. 訪問(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類的方法

  A) clone()

  B) finalize()

  C) toString()

  D) hasNext()

  11. 多態(tài)的表現(xiàn)形式有(A)

  A) 重寫(xiě)

  B) 抽象

  C) 繼承

  D) 封裝

  12. 以下對(duì)重載描述錯(cuò)誤的是()

  A) 方法重載只能發(fā)生在一個(gè)類的內(nèi)部

  B) 構(gòu)造方法不能重載

  C) 重載要求方法名相同,參數(shù)列表不同

  D) 方法的返回值類型不是區(qū)分方法重載的條件

  13. 以下(D)添加到ComputerBook中不會(huì)出錯(cuò)

  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. 以下對(duì)抽象類的描述正確的是(C)

  A) 抽象類沒(méi)有構(gòu)造方法

  B) 抽象類必須提供抽象方法

  C) 有抽象方法的類一定是抽象類

  D) 抽象類可以通過(guò)new關(guān)鍵字直接實(shí)例化

  15. 以下對(duì)接口描述錯(cuò)誤的有(D)

  A) 接口沒(méi)有提供構(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行錯(cuò)誤,沒(méi)有給變量賦值

  B) 第2行錯(cuò)誤,方法沒(méi)有修飾符

  C) 第4行錯(cuò)誤,沒(méi)有實(shí)現(xiàn)接口的全部方法

  D) 第3行錯(cuò)誤,沒(méi)有方法的實(shí)現(xiàn)

  17. 接口和抽象類描述正確的有(B,C)(兩項(xiàng))

  A) 抽象類沒(méi)有構(gòu)造函數(shù)

  B) 接口沒(méi)有構(gòu)造函數(shù)

  C) 抽象類不允許多繼承

  D) 接口中的方法可以有方法體

  18. 以下描述錯(cuò)誤的有(C)

  A) abstract 可以修飾類、接口、方法

  B) abstract修飾的類主要用于被繼承

  C) abstract 可以修飾變量

  D) abstract修飾的類,其子類也可以是abstract修飾的

  19. 以下描述正確的有(B)

  A) 方法的重寫(xiě)應(yīng)用在一個(gè)類的內(nèi)部

  B) 方法的重載與返回值類型無(wú)關(guān)

  C) 構(gòu)造方法不能重載

  D) 構(gòu)造方法可以重寫(xiě)

  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) 編譯出錯(cuò)

  D) 運(yùn)行出錯(cuò),無(wú)輸出

  21. 以下對(duì)異常的描述不正確的有(C)

  A) 異常分為Error和Exception

  B) Throwable是所有異常類的父類

  C) Exception是所有異常類父類

  D) Exception包括RuntimeException和RuntimeException之外的異常

  22. 在try-catch-finally語(yǔ)句塊中,以下可以單獨(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 語(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. 以下對(duì)自定義異常描述正確的是(C)

  A) 自定義異常必須繼承Exception

  B) 自定義異?梢岳^承自Error

  C) 自定義異?梢愿用鞔_定位異常出錯(cuò)的位置和給出詳細(xì)出錯(cuò)信息

  D) 程序中已經(jīng)提供了豐富的異常類,使用自定義異常沒(méi)有意義

  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) 編譯報(bào)錯(cuò)

  27. 以下對(duì)TCP和UDP描述正確的是(D)

  A) TCP不能提供數(shù)據(jù)的可靠性

  B) UDP能夠保證數(shù)據(jù)庫(kù)的可靠性

  C) TCP數(shù)據(jù)傳輸效率高于UDP

  D) UDP數(shù)據(jù)傳輸效率高于TCP

  28. 在Java中,下面對(duì)于構(gòu)造函數(shù)的描述正確的是(D)。(選擇一項(xiàng))

  A) 類必須顯示定義構(gòu)造函數(shù)

  B) 構(gòu)造函數(shù)的返回類型是void

  C) 構(gòu)造函數(shù)和類有相同的名稱,并且不能帶任何參數(shù)

  D) 一個(gè)類可以定義多個(gè)構(gòu)造函數(shù)

  29. 根據(jù)下面的代碼,

  String s = null;

  會(huì)拋出NullPointerException異常的有(A,C)。[兩項(xiàng)]

  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類的描述,以下廉潔錯(cuò)誤的是( B )。

  A) HashMap使用鍵/值得形式保存數(shù)據(jù)

  B) HashMap 能夠保證其中元素的順序

  C) HashMap允許將null用作鍵

  D) HashMap允許將null用作值

  31. 下列選項(xiàng)中關(guān)于java中super關(guān)鍵字的說(shuō)法錯(cuò)誤的是( B )

  A) super關(guān)鍵字是在子類對(duì)象內(nèi)部指代其父類對(duì)象的引用

  B) super關(guān)鍵字不僅可以指代子類的直接父類,還可以指代父類的父類

  C) 子類可以通過(guò)super關(guān)鍵字調(diào)用父類的方法

  D) 子類可以通過(guò)super關(guān)鍵字調(diào)用父類的屬性

  32. 在Java中,以下代碼( A )正確地創(chuàng)建了一個(gè)InputStreamReader對(duì)象。

  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),對(duì)文件或目錄及其屬性進(jìn)行基本操作。

  A) FileInputStream

  B) FileReader

  C) FileWriter

  D) File

  34. Java中的集合類包括ArrayList、LinkedList、HashMap等類,下列關(guān)于集合類描述錯(cuò)誤的是(C)(選擇一項(xiàng))

  A) ArrayList和LinkedList均實(shí)現(xiàn)了List接口

  B) ArrayList的訪問(wèn)速度比LinkedList快

  C) 添加和刪除元素時(shí),ArrayList的表現(xiàn)更佳

  D) HashMap實(shí)現(xiàn)Map接口,它允許任何類型的鍵和值對(duì)象,并允許將null用作鍵或值

  35. 在Java中開(kāi)發(fā)JDBC應(yīng)用程序時(shí),使用DriverManager類的getConnection()方法

  建立與數(shù)據(jù)源的連接語(yǔ)句為:

  Connection con = DriverManager.getConnection(“jdbc:odbc:news”);

  URL連接中的”n ews”表示的是(C)(選擇一項(xiàng))

  A) 數(shù)據(jù)庫(kù)中表的名稱

  B) 數(shù)據(jù)庫(kù)服務(wù)器的機(jī)器名

  C) 數(shù)據(jù)源的名稱

  D) 用戶名

  36. 在Java中,JDBCAPI定義了一組用于與數(shù)據(jù)庫(kù)進(jìn)行通信的接口和類,它們包括在(B)包中。

  A) java.lang

  B) java.sql

  C) java.util

  D) java.math

  37. Java中,以下( B )接口以鍵_值對(duì)的方式存儲(chǔ)對(duì)象。

  A) java.util.Collection

  B) java.util.Map

  C) java.util.List

  D) java.util.Set

  38. 以下關(guān)于對(duì)象序列化描述正確的是( C,D )[兩項(xiàng)]

  A) 使用FileOutputStream可以將對(duì)象進(jìn)行傳輸

  B) 使用PrintWriter可以將對(duì)象進(jìn)行傳輸

  C) 使用ObjectOutputStream類完成對(duì)象存儲(chǔ),使用ObjectInputStream類完成對(duì)象讀取

  D) 對(duì)象序列化的所屬類需要實(shí)現(xiàn)Serializable接口

  39. 在Java中,( A )類可用于創(chuàng)建鏈表數(shù)據(jù)結(jié)構(gòu)的對(duì)象。

  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) 程序無(wú)法編譯

  41. 使用JDBC事務(wù)的步驟是(C,A,B,D)(多選)

  A) 取消Connection的事務(wù)自動(dòng)提交方式

  B) 發(fā)生異;貪L事務(wù)

  C) 獲取Connection對(duì)象

  D) 操作完畢提交事務(wù)

  42. 以下對(duì)JDBC事務(wù)描述錯(cuò)誤的是( B )

  A) JDBC事務(wù)屬于JAVA事務(wù)的一種

  B) JDBC事務(wù)屬于容器事務(wù)類型

  C) JDBC事務(wù)可以保證操作的完整性和一致性

  D) JDBC事務(wù)是由Connection發(fā)起的,并由Connection控制

  43. 要通過(guò)可滾動(dòng)的結(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. 存儲(chǔ)過(guò)程pro有兩個(gè)參數(shù),第一個(gè)為輸入?yún)?shù),第二個(gè)為輸出參數(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. 要?jiǎng)h除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) 以上選項(xiàng)都不正確

  47. 獲取ResutlSet對(duì)象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ù)庫(kù)連接的是(D)

  A) Statement

  B) PreparedStatement

  C) ResultSet

  D) DriverManager

  50. 使用JDBC連接數(shù)據(jù)庫(kù)的順序是(B,A,D,C,E)(多選)

  A) 加載驅(qū)動(dòng)

  B) 導(dǎo)入驅(qū)動(dòng)包

  C) 發(fā)送并處理SQL語(yǔ)句

  D) 建立于數(shù)據(jù)庫(kù)的連接

  E 關(guān)閉連接

  二、簡(jiǎn)答題(各5分,共25分)

  1、在java中如果聲明一個(gè)類為final,表示什么意思? (不計(jì)分)

  答:final是最終的意思,final可用于定義變量、方法和類但含義不同,聲明為final的類不能被繼承。

  1、父類的構(gòu)造方法是否可以被子類覆蓋(重寫(xiě))?

  答:父類的構(gòu)造方法不可以被子類覆蓋,因?yàn)楦割惡妥宇惖念惷遣豢赡芤粯拥摹?/p>

  2、請(qǐng)講述String 和StringBuffer的區(qū)別。

  答:String 類所定義的對(duì)象是用于存放”長(zhǎng)度固定”的字符串。

  StringBuffer類所定義的對(duì)象是用于存放”長(zhǎng)度可變動(dòng)”的字符串。

  3、如果有兩個(gè)類A、B(注意不是接口),你想同時(shí)使用這兩個(gè)類的功能,那么你會(huì)如何編寫(xiě)這個(gè)C類呢?

  答:因?yàn)轭怉、B不是接口,所以是不可以直接繼承的,但可以將A、B類定義成父子類,那么C類就能實(shí)現(xiàn)A、B類的功能了。假如A為B的父類,B為C的父類,此時(shí)C就能實(shí)現(xiàn)A、B的功能。

  4、結(jié)合Java視頻Lesson5(多線程),分析sleep()和wait()方法的區(qū)別。

  答: Sleeping睡眠的意思 : sleep() 方法用來(lái)暫時(shí)中止執(zhí)行的線程。在睡眠后,線程將進(jìn)入就緒狀態(tài)。

  waiting等待的意思: 如果調(diào)用了 wait() 方法,線程將處于等待狀態(tài)。用于在兩個(gè)或多個(gè)線程并發(fā)運(yùn)行時(shí)。

  5、談?wù)勀銓?duì)抽象類和接口的理解。

  答:定義抽象類的目的是提供可由其子類共享的一般形式、子類可以根據(jù)自身需要擴(kuò)展抽象類、抽象類不能實(shí)例化、抽象方法沒(méi)有函數(shù)體、抽象方法必須在子類中給出具體實(shí)現(xiàn)。他使用extends來(lái)繼承。

  接口:一個(gè)接口允許一個(gè)類從幾個(gè)接口繼承而來(lái),Java 程序一次只能繼承一個(gè)類但可以實(shí)現(xiàn)幾個(gè)接口,接口不能有任何具體的方法,接口也可用來(lái)定義可由類使用的一組常量。其實(shí)現(xiàn)方式是interface來(lái)實(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類的說(shuō)法正確的是()

  A 繼承自Throwable B Serialable CD 不記得,反正不正確

  答案:A

  解析:Java異常的基類為java.lang.Throwable,java.lang.Error和java.lang.Exception繼承 Throwable,RuntimeException和其它的Exception等繼承Exception,具體的RuntimeException繼承RuntimeException。

  擴(kuò)展:錯(cuò)誤和異常的區(qū)別(Error vs Exception)

  1)java.lang.Error: Throwable的子類,用于標(biāo)記嚴(yán)重錯(cuò)誤。合理的應(yīng)用程序不應(yīng)該去try/catch這種錯(cuò)誤。絕大多數(shù)的錯(cuò)誤都是非正常的,就根本不該出現(xiàn)的。

  java.lang.Exception: Throwable的子類,用于指示一種合理的程序想去catch的條件。即它僅僅是一種程序運(yùn)行條件,而非嚴(yán)重錯(cuò)誤,并且鼓勵(lì)用戶程序去catch它。

  2) Error和RuntimeException 及其子類都是未檢查的異常(unchecked exceptions),而所有其他的Exception類都是檢查了的異常(checked exceptions).

  checked exceptions:通常是從一個(gè)可以恢復(fù)的程序中拋出來(lái)的,并且最好能夠從這種異常中使用程序恢復(fù)。比如FileNotFoundException, ParseException等。檢查了的異常發(fā)生在編譯階段,必須要使用try…catch(或者throws)否則編譯不通過(guò)。

  unchecked exceptions:通常是如果一切正常的話本不該發(fā)生的異常,但是的確發(fā)生了。發(fā)生在運(yùn)行期,具有不確定性,主要是由于程序的邏輯問(wèn)題所引起的。比如ArrayIndexOutOfBoundException, ClassCastException等。從語(yǔ)言本身的角度講,程序不該去catch這類異常,雖然能夠從諸如RuntimeException這樣的異常中catch并恢復(fù),但是并不鼓勵(lì)終端程序員這么做,因?yàn)橥耆珱](méi)要必要。因?yàn)檫@類錯(cuò)誤本身就是bug,應(yīng)該被修復(fù),出現(xiàn)此類錯(cuò)誤時(shí)程序就應(yīng)該立即停止執(zhí)行。因此,面對(duì)Errors和unchecked exceptions應(yīng)該讓程序自動(dòng)終止執(zhí)行,程序員不該做諸如try/catch這樣的事情,而是應(yīng)該查明原因,修改代碼邏輯。

  RuntimeException:RuntimeException體系包括錯(cuò)誤的類型轉(zhuǎn)換、數(shù)組越界訪問(wèn)和試圖訪問(wèn)空指針等等。

  處理RuntimeException的原則是:如果出現(xiàn) RuntimeException,那么一定是程序員的錯(cuò)誤。例如,可以通過(guò)檢查數(shù)組下標(biāo)和數(shù)組邊界來(lái)避免數(shù)組越界訪問(wèn)異常。其他(IOException等等)checked異常一般是外部錯(cuò)誤,例如試圖從文件尾后讀取數(shù)據(jù)等,這并不是程序本身的錯(cuò)誤,而是在應(yīng)用環(huán)境中出現(xiàn)的外部錯(cuò)誤。

  3. 下面程序的運(yùn)行結(jié)果是()

  String str1 = "hello";

  String str2 = "he" + new String("llo");

  System.err.println(str1 == str2);

  答案:false

  解析:因?yàn)閟tr2中的llo是新申請(qǐng)的內(nèi)存塊,而==判斷的是對(duì)象的地址而非值,所以不一樣。如果是String str2 = str1,那么就是true了。

  4.下列說(shuō)法正確的有()

  A. class中的constructor不可省略

  B. constructor必須與class同名,但方法不能與class同名

  C.一個(gè)class只能定義一個(gè)constructor

  D. constructor在一個(gè)對(duì)象被new時(shí)執(zhí)行

  答案:D

  解析:這里可能會(huì)有誤區(qū),其實(shí)普通的類方法是可以和類名同名的,和構(gòu)造方法唯一的區(qū)分就是,構(gòu)造方法沒(méi)有返回值。

  5. 具體選項(xiàng)不記得,但用到的知識(shí)如下:

  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()用來(lái)啟動(dòng)一個(gè)線程,當(dāng)調(diào)用start方法后,系統(tǒng)才會(huì)開(kāi)啟一個(gè)新的線程,進(jìn)而調(diào)用run()方法來(lái)執(zhí)行任務(wù),而單獨(dú)的調(diào)用run()就跟調(diào)用普通方法是一樣的,已經(jīng)失去線程的特性了。因此在啟動(dòng)一個(gè)線程的時(shí)候一定要使用start()而不是run()。

  7. 下列屬于關(guān)系型數(shù)據(jù)庫(kù)的是()

  A. Oracle B MySql C IMS D MongoDB

  答案:AB

  解答:IMS(Information Management System)數(shù)據(jù)庫(kù)是IBM公司開(kāi)發(fā)的兩種數(shù)據(jù)庫(kù)類型之一;

  一種是關(guān)系數(shù)據(jù)庫(kù),典型代表產(chǎn)品:DB2;

  另一種則是層次數(shù)據(jù)庫(kù),代表產(chǎn)品:IMS層次數(shù)據(jù)庫(kù)。

  非關(guān)系型數(shù)據(jù)庫(kù)有MongoDB、memcachedb、Redis等。

  8. GC線程是否為守護(hù)線程?()

  答案:是

  解析:線程分為守護(hù)線程和非守護(hù)線程(即用戶線程)。

  只要當(dāng)前JVM實(shí)例中尚存在任何一個(gè)非守護(hù)線程沒(méi)有結(jié)束,守護(hù)線程就全部工作;只有當(dāng)最后一個(gè)非守護(hù)線程結(jié)束時(shí),守護(hù)線程隨著JVM一同結(jié)束工作。

  守護(hù)線程最典型的應(yīng)用就是 GC (垃圾回收器)

  9. volatile關(guān)鍵字是否能保證線程安全?()

  答案:不能

  解析:volatile關(guān)鍵字用在多線程同步中,可保證讀取的可見(jiàn)性,JVM只是保證從主內(nèi)存加載到線程工作內(nèi)存的值是最新的讀取值,而非cache中。但多個(gè)線程對(duì)

  volatile的寫(xiě)操作,無(wú)法保證線程安全。例如假如線程1,線程2 在進(jìn)行read,load 操作中,發(fā)現(xiàn)主內(nèi)存中count的值都是5,那么都會(huì)加載這個(gè)最新的值,在線程1堆count進(jìn)行修改之后,會(huì)write到主內(nèi)存中,主內(nèi)存中的count變量就會(huì)變?yōu)?;線程2由于已經(jīng)進(jìn)行read,load操作,在進(jìn)行運(yùn)算之后,也會(huì)更新主內(nèi)存count的變量值為6;導(dǎo)致兩個(gè)線程及時(shí)用volatile關(guān)鍵字修改之后,還是會(huì)存在并發(fā)的情況。

  10. 下列說(shuō)法正確的是()

  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ù)時(shí),i+1就溢出變成負(fù)數(shù)了,此時(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顯示說(shuō)明,即0.6332f

  13. 下面哪個(gè)流類屬于面向字符的輸入流( )

  ABufferedWriter BFileInputStream CObjectInputStream D InputStreamReader

  答案:D

  解析:Java的IO操作中有面向字節(jié)(Byte)和面向字符(Character)兩種方式。

  面向字節(jié)的操作為以8位為單位對(duì)二進(jìn)制的數(shù)據(jù)進(jìn)行操作,對(duì)數(shù)據(jù)不進(jìn)行轉(zhuǎn)換,這些類都是InputStream和OutputStream的子類。

  面向字符的操作為以字符為單位對(duì)數(shù)據(jù)進(jìn)行操作,在讀的時(shí)候?qū)⒍M(jìn)制數(shù)據(jù)轉(zhuǎn)為字符,在寫(xiě)的時(shí)候?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

  解析:接口很重要,為了說(shuō)明情況,這里稍微啰嗦點(diǎn):

 。1)接口用于描述系統(tǒng)對(duì)外提供的所有服務(wù),因此接口中的成員常量和方法都必須是公開(kāi)(public)類型的,確保外部使用者能訪問(wèn)它們;

 。2)接口僅僅描述系統(tǒng)能做什么,但不指明如何去做,所以接口中的方法都是抽象(abstract)方法;

  (3)接口不涉及和任何具體實(shí)例相關(guān)的細(xì)節(jié),因此接口沒(méi)有構(gòu)造方法,不能被實(shí)例化,沒(méi)有實(shí)例變量,只有靜態(tài)(static)變量;

 。4)接口的中的變量是所有實(shí)現(xiàn)類共有的,既然共有,肯定是不變的東西,因?yàn)樽兓臇|西也不能夠算共有。所以變量是不可變(final)類型,也就是常量了。

 。5)接口中不可以定義變量?如果接口可以定義變量,但是接口中的方法又都是抽象的,在接口中無(wú)法通過(guò)行為來(lái)修改屬性。有的人會(huì)說(shuō)了,沒(méi)有關(guān)系,可以通過(guò) 實(shí)現(xiàn)接口的對(duì)象的行為來(lái)修改接口中的屬性。這當(dāng)然沒(méi)有問(wèn)題,但是考慮這樣的情況。如果接口 A 中有一個(gè)public 訪問(wèn)權(quán)限的靜態(tài)變量 a。按照 Java 的語(yǔ)義,我們可以不通過(guò)實(shí)現(xiàn)接口的對(duì)象來(lái)訪問(wèn)變量 a,通過(guò) A.a = xxx; 就可以改變接口中的變量 a 的值了。正如抽象類中是可以這樣做的,那么實(shí)現(xiàn)接口 A 的所有對(duì)象也都會(huì)自動(dòng)擁有這一改變后的 a 的值了,也就是說(shuō)一個(gè)地方改變了 a,所有這些對(duì)象中 a 的值也都跟著變了。這和抽象類有什么區(qū)別呢,怎么體現(xiàn)接口更高的抽象級(jí)別呢,怎么體現(xiàn)接口提供的統(tǒng)一的協(xié)議呢,那還要接口這種抽象來(lái)做什么呢?所以接口中 不能出現(xiàn)變量,如果有變量,就和接口提供的統(tǒng)一的抽象這種思想是抵觸的。所以接口中的屬性必然是常量,只能讀不能改,這樣才能為實(shí)現(xiàn)接口的對(duì)象提供一個(gè)統(tǒng) 一的屬性。

  通俗的講,你認(rèn)為是要變化的東西,就放在你自己的實(shí)現(xiàn)中,不能放在接口中去,接口只是對(duì)一類事物的屬性和行為更高層次的抽象。對(duì)修改關(guān)閉,對(duì)擴(kuò)展(不同的實(shí)現(xiàn) implements)開(kāi)放,接口是對(duì)開(kāi)閉原則的一種體現(xiàn)。

  所以:

  接口的方法默認(rèn)是public abstract;

  接口中不可以定義變量即只能定義常量(加上final修飾就會(huì)變成常量)。所以接口的屬性默認(rèn)是public static final 常量,且必須賦初值。

  注意:final和abstract不能同時(shí)出現(xiàn)。

  15. 不通過(guò)構(gòu)造函數(shù)也能創(chuàng)建對(duì)象嗎()

  A 是 B 否

  答案:A

  解析:Java創(chuàng)建對(duì)象的幾種方式(重要):

  (1) 用new語(yǔ)句創(chuàng)建對(duì)象,這是最常見(jiàn)的創(chuàng)建對(duì)象的方法。

  (2) 運(yùn)用反射手段,調(diào)用java.lang.Class或者java.lang.reflect.Constructor類的newInstance()實(shí)例方法。

  (3) 調(diào)用對(duì)象的clone()方法。

  (4) 運(yùn)用反序列化手段,調(diào)用java.io.ObjectInputStream對(duì)象的 readObject()方法。

  (1)和(2)都會(huì)明確的顯式的調(diào)用構(gòu)造函數(shù) ;(3)是在內(nèi)存上對(duì)已有對(duì)象的影印,所以不會(huì)調(diào)用構(gòu)造函數(shù) ;(4)是從文件中還原類的對(duì)象,也不會(huì)調(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的長(zhǎng)度是10個(gè),所以如果你要往list里添加20個(gè)元素肯定要擴(kuò)充一次(擴(kuò)充為原來(lái)的1.5倍),但是這里顯示指明了需要多少空間,所以就一次性為你分配這么多空間,也就是不需要擴(kuò)充了。

  17. 下面哪些是對(duì)稱加密算法()

  A DES B AES C DSA D RSA

  答案:AB

  解析:常用的對(duì)稱加密算法有:DES、3DES、RC2、RC4、AES

  常用的非對(duì)稱加密算法有:RSA、DSA、ECC

  使用單向散列函數(shù)的加密算法:MD5、SHA

  18.新建一個(gè)流對(duì)象,下面哪個(gè)選項(xiàng)的代碼是錯(cuò)誤的?()

  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

  解析:請(qǐng)記得13題的那個(gè)圖嗎?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,因?yàn)閚ull值可以強(qiáng)制轉(zhuǎn)換為任何java類類型,(String)null也是合法的。但null強(qiáng)制轉(zhuǎn)換后是無(wú)效對(duì)象,其返回值還是為null,而static方法的調(diào)用是和類名綁定的,不借助對(duì)象進(jìn)行訪問(wèn)所以能正確輸出。反過(guò)來(lái),沒(méi)有static修飾就只能用對(duì)象進(jìn)行訪問(wèn),使用null調(diào)用對(duì)象肯定會(huì)報(bào)空指針錯(cuò)了。這里和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

  解析:說(shuō)實(shí)話我覺(jué)得這題很好,考查靜態(tài)語(yǔ)句塊、構(gòu)造語(yǔ)句塊(就是只有大括號(hào)的那塊)以及構(gòu)造函數(shù)的執(zhí)行順序。

  對(duì)象的初始化順序:(1)類加載之后,按從上到下(從父類到子類)執(zhí)行被static修飾的語(yǔ)句;(2)當(dāng)static語(yǔ)句執(zhí)行完之后,再執(zhí)行main方法;(3)如果有語(yǔ)句new了自身的對(duì)象,將從上到下執(zhí)行構(gòu)造代碼塊、構(gòu)造器(兩者可以說(shuō)綁定在一起)。

  下面稍微修改下上面的代碼,以便更清晰的說(shuō)明情況:

  View Code

  此時(shí)輸出結(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)生了一個(gè)IOException,將會(huì)輸出什么結(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

  解析:考察多個(gè)catch語(yǔ)句塊的執(zhí)行順序。當(dāng)用多個(gè)catch語(yǔ)句時(shí),catch語(yǔ)句塊在次序上有先后之分。從最前面的catch語(yǔ)句塊依次先后進(jìn)行異常類型匹配,這樣如果父異常在子異常類之前,那么首先匹配的將是父異常類,子異常類將不會(huì)獲得匹配的機(jī)會(huì),也即子異常類型所在的catch語(yǔ)句塊將是不可到達(dá)的語(yǔ)句。所以,一般將父類異常類即Exception老大放在catch語(yǔ)句塊的最后一個(gè)。

  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沒(méi)有初始化,代碼不能編譯通過(guò)

  D代碼得到編譯,但捕獲到NullPointException異常

  答案:C

  解析:開(kāi)始以為會(huì)輸出null什么的,運(yùn)行后才發(fā)現(xiàn)Java中所有定義的基本類型或?qū)ο蠖急仨毘跏蓟拍茌敵鲋怠?/p>

  23. System.out.println("5" + 2);的輸出結(jié)果應(yīng)該是()。

  A52 B7 C2 D5

  答案:A

  解析:沒(méi)啥好說(shuō)的,Java會(huì)自動(dòng)將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ù)組都是對(duì)象所以肯定是對(duì)象引用,然后就會(huì)選D,其實(shí)這是個(gè)很大的誤區(qū):因?yàn)樵趈ava里沒(méi)有引用傳遞,只有值傳遞

  這個(gè)值指的是實(shí)參的地址的拷貝,得到這個(gè)拷貝地址后,你可以通過(guò)它修改這個(gè)地址的內(nèi)容(引用不變),因?yàn)榇藭r(shí)這個(gè)內(nèi)容的地址和原地址是同一地址,

  但是你不能改變這個(gè)地址本身使其重新引用其它的對(duì)象,也就是值傳遞,可能說(shuō)的不是很清楚,下面給出一個(gè)完整的能說(shuō)明情況的例子吧:

  View Code

  程序有些啰嗦,但能反映問(wèn)題,該程序運(yùn)行結(jié)果為:

  對(duì)象交換前:p1 = Alexia female

  對(duì)象交換前:p2 = Edward male

  對(duì)象交換后:p1 = Alexia female

  對(duì)象交換后:p2 = Edward male

  對(duì)象數(shù)組交換前:arraya[0] = Alexia female, arraya[1] = Edward male

  對(duì)象數(shù)組交換前:arrayb[0] = jmwang female, arrayb[1] = hwu male

  對(duì)象數(shù)組交換后:arraya[0] = Alexia female, arraya[1] = Edward male

  對(duì)象數(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

  對(duì)象數(shù)組內(nèi)容交換并改變后:arraya[1] = wjl male

  對(duì)象數(shù)組內(nèi)容交換并改變后:arrayb[1] = Edward male

  基本類型數(shù)組內(nèi)容交換并改變后:a[1] = 5

  基本類型數(shù)組內(nèi)容交換并改變后:b[1] = 1

  說(shuō)明:不管是對(duì)象、基本類型還是對(duì)象數(shù)組、基本類型數(shù)組,在函數(shù)中都不能改變其實(shí)際地址但能改變其中的內(nèi)容。

  25.要從文件"file.dat"中讀出第10個(gè)字節(jié)到變量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è)字節(jié)不讀,主要用在包裝流中的,因?yàn)橐话懔鳎ㄈ鏔ileInputStream)只能順序一個(gè)一個(gè)的讀不能跳躍讀,但是包裝流可以用skip方法跳躍讀取。那么什么是包裝流呢?各種字節(jié)節(jié)點(diǎn)流類,它們都只具有讀寫(xiě)字節(jié)內(nèi)容的方法,以FileInputStream與FileOutputStream為例,它們只能在文件中讀取或者向文件中寫(xiě)入字節(jié),在實(shí)際應(yīng)用中我們往往需要在文件中讀取或者寫(xiě)入各種類型的數(shù)據(jù),就必須先將其他類型的數(shù)據(jù)轉(zhuǎn)換成字節(jié)數(shù)組后寫(xiě)入文件,或者從文件中讀取到的字節(jié)數(shù)組轉(zhuǎn)換成其他數(shù)據(jù)類型,想想都很麻煩!因此想通過(guò)FileOutputStream將一個(gè)浮點(diǎn)小數(shù)寫(xiě)入到文件中或?qū)⒁粋(gè)整數(shù)寫(xiě)入到文件時(shí)是非常困難的。這時(shí)就需要包裝類DataInputStream/DataOutputStream,它提供了往各種輸入輸出流對(duì)象中讀入或?qū)懭敫鞣N類型的數(shù)據(jù)的方法。

  DataInputStream/DataOutputStream并沒(méi)有對(duì)應(yīng)到任何具體的流設(shè)備,一定要給它傳遞一個(gè)對(duì)應(yīng)具體流設(shè)備的輸入或輸出流對(duì)象,完成類似DataInputStream/DataOutputStream功能的類就是一個(gè)包裝類,也叫過(guò)濾流類或處理流類。它對(duì)InputOutStream/OutputStream流類進(jìn)行了包裝,使編程人員使用起來(lái)更方便。其中DataInputStream包裝類的構(gòu)造函數(shù)語(yǔ)法:public DataInputStream(InputStream in)。包裝類也可以包裝另外一個(gè)包裝類。

  首先BC肯定 是錯(cuò)的,那A正確嗎?按上面的解析應(yīng)該也不對(duì),但我試了下,發(fā)現(xiàn)A也是正確的,與網(wǎng)上解析的資料有些出入,下面是我的code:

  View Code

  那么D呢,RandomAccessFile是IO包的類,但是其自成一派,從Object直接繼承而來(lái)?梢詫(duì)文件進(jìn)行讀取和寫(xiě)入。支持文件的隨機(jī)訪問(wèn),即可以隨機(jī)讀取文件中的某個(gè)位置內(nèi)容,這么說(shuō)RandomAccessFile肯定可以達(dá)到題目的要求,但是選項(xiàng)有些錯(cuò)誤,比如RandomAccessFile的初始化是兩個(gè)參數(shù)而非一個(gè)參數(shù),采用的跳躍讀取方法是skipBytes()而非skip(),即正確的寫(xiě)法是:

  RandomAccessFile in = new RandomAccessFile("file.dat", "r");

  in.skipBytes(9);

  int c = in.readByte();

  這樣也能讀到第十個(gè)字節(jié),也就是A和D都能讀到第十個(gè)字節(jié),那么到底該選哪個(gè)呢?A和D有啥不同嗎?求大神解答~~~

  26.下列哪種異 常是檢查型異常,需要在編寫(xiě)程序時(shí)聲明()

  ANullPointerException BClassCastException CFileNotFoundException D IndexOutOfBoundsException

  答案:C

  解析:看第2題的解析。

  27. 下面的方法,當(dāng)輸入為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)始一直往下運(yùn)行。

  28.選項(xiàng)中哪一行代碼可以替換題目中//add code here而不產(chǎn)生編譯錯(cuò)誤?()

  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í)例化(無(wú)法使用new關(guān)鍵字創(chuàng)建對(duì)象實(shí)例),只能被繼承。

  (3)抽象類可以包含屬性,方法,構(gòu)造方法,初始化塊,內(nèi)部類,枚舉類,和普通類一樣,普通方法一定要實(shí)現(xiàn),變量可以初始化或不初始化但不能初始化后在抽象類中重新賦值或操作該變量(只能在子類中改變?cè)撟兞浚?/p>

 。4)抽象類中的抽象方法(加了abstract關(guān)鍵字的方法)不能實(shí)現(xiàn)。

  (5)含有抽象方法的類必須定義成抽象類。

  擴(kuò)展:抽象類和接口的區(qū)別,做個(gè)總結(jié)吧:

  (1)接口是公開(kāi)的,里面不能有私有的方法或變量,是用于讓別人使用的,而抽象類是可以有私有方法或私有變量的。

 。2)abstract class 在 Java 語(yǔ)言中表示的是一種繼承關(guān)系,一個(gè)類只能使用一次繼承關(guān)系。但是,一個(gè)類卻可以實(shí)現(xiàn)多個(gè)interface,實(shí)現(xiàn)多重繼承。接口還有標(biāo)識(shí)(里面沒(méi)有任何方法,如Remote接口)和數(shù)據(jù)共享(里面的變量全是常量)的作用。

 。3)在abstract class 中可以有自己的數(shù)據(jù)成員,也可以有非abstarct的成員方法,而在interface中,只能夠有靜態(tài)的不能被修改的數(shù)據(jù)成員(也就是必須是 static final的,不過(guò)在 interface中一般不定義數(shù)據(jù)成員),所有的成員方法默認(rèn)都是 public abstract 類型的。

  (4)abstract class和interface所反映出的設(shè)計(jì)理念不同。其實(shí)abstract class表示的是"is-a"關(guān)系,interface表示的是"has-a"關(guān)系。

 。5)實(shí)現(xiàn)接口的一定要實(shí)現(xiàn)接口里定義的所有方法,而實(shí)現(xiàn)抽象類可以有選擇地重寫(xiě)需要用到的方法,一般的應(yīng)用里,最頂級(jí)的是接口,然后是抽象類實(shí)現(xiàn)接口,最后才到具體類實(shí)現(xiàn)。抽象類中可以有非抽象方法。接口中則不能有實(shí)現(xiàn)方法。

 。6)接口中定義的變量默認(rèn)是public static final 型,且必須給其初值,所以實(shí)現(xiàn)類中不能重新定義,也不能改變其值。抽象類中的變量默認(rèn)是 friendly 型,其值可以在子類中重新定義,也可以在子類中重新賦值。

  29. 閱讀Shape和Circle兩個(gè)類的定義。在序列化一個(gè)Circle的對(duì)象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

  解析:這里有詳細(xì)的解釋:http://www.cnblogs.com/lanxuezaipiao/p/3369962.html

  30.下面是People和Child類的定義和構(gòu)造方法,每個(gè)構(gòu)造方法都輸出編號(hào)。在執(zhí)行new Child("mike")的時(shí)候都有哪些構(gòu)造方法被順序調(diào)用?請(qǐng)選擇輸出結(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)造過(guò)程中必須調(diào)用其父類的構(gòu)造函數(shù),是因?yàn)橛欣^承關(guān)系存在時(shí),子類要把父類的內(nèi)容繼承下來(lái)。但如果父類有多個(gè)構(gòu)造函數(shù)時(shí),該如何選擇調(diào)用呢?

  第一個(gè)規(guī)則:子類的構(gòu)造過(guò)程中,必須調(diào)用其父類的構(gòu)造方法。一個(gè)類,如果我們不寫(xiě)構(gòu)造方法,那么編譯器會(huì)幫我們加上一個(gè)默認(rèn)的構(gòu)造方法(就是沒(méi)有參數(shù)的構(gòu)造方法),但是如果你自己寫(xiě)了構(gòu)造方法,那么編譯器就不會(huì)給你添加了,所以有時(shí)候當(dāng)你new一個(gè)子類對(duì)象的時(shí)候,肯定調(diào)用了子類的構(gòu)造方法,但是如果在子類構(gòu)造方法中我們并沒(méi)有顯示的調(diào)用基類的構(gòu)造方法,如:super();這樣就會(huì)調(diào)用父類沒(méi)有參數(shù)的構(gòu)造方法。

  第二個(gè)規(guī)則:如果子類的構(gòu)造方法中既沒(méi)有顯示的調(diào)用基類構(gòu)造方法,而基類中又沒(méi)有無(wú)參的構(gòu)造方法,則編譯出錯(cuò),所以,通常我們需要顯示的:super(參數(shù)列表),來(lái)調(diào)用父類有參數(shù)的構(gòu)造函數(shù),此時(shí)無(wú)參的構(gòu)造函數(shù)就不會(huì)被調(diào)用。

  JAVA筆試題目及答案3

  一、單選題

  1.下列哪一種敘述是正確的(D)

  A.a(chǎn)bstract修飾符可修飾字段、方法和類

  B. 抽象方法的body部分必須用一對(duì)大括號(hào){ }包住

  C. 聲明抽象方法,大括號(hào)可有可無(wú)

  D.聲明抽象方法不可寫(xiě)出大括號(hào)

  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用來(lái)修飾全局變量,不能修飾局部變量

  3.下列哪種說(shuō)法是正確的(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.編譯失敗.

  附:方法重寫(xiě)不能改變返回值類型

  5.在Servlet處理請(qǐng)求的方式為:C

  A.以進(jìn)程的方式 B.以程序的方式 C.以線程的方式 D.以響應(yīng)的方式

  6.JDBC中,用于表示數(shù)據(jù)庫(kù)連接的對(duì)象是:B

  A.Statement B.Connection C.DriverManager D.PreparedStatement

  7.用于調(diào)用存儲(chǔ)過(guò)程的對(duì)象是:C

  A.ResultSet B.DriverManager C.CallableStatemet D.PreparedStatement

  8.按照MVC設(shè)計(jì)模式,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對(duì)象在第11行被創(chuàng)建后, 什么時(shí)候能夠被垃圾回收C

  A. 13行以后. B. 14行以后. C. 15行以后. D. 16行以后.

  附:當(dāng)引用變量置為null時(shí),它將變得無(wú)法訪問(wèn),因此符合垃圾回收條件

  10.如下代碼:

  class Base {

  Base() { System.out.print(“Base”); }

  }

  public class Alpha extends Base {

  public static void main( String[] args ) {

  new Alpha();-----調(diào)用父類無(wú)參的構(gòu)造方法

  new Base();

  }

  }

  結(jié)果是什么B

  A. Base B. BaseBase C. 編譯失敗. D. 代碼運(yùn)行但沒(méi)有輸出. E. 運(yùn)行時(shí)拋出異常

  附:對(duì)象初始化會(huì)先走父類構(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)于異常的說(shuō)法正確的是:D

 。.一旦出現(xiàn)異常,程序運(yùn)行就終止了

 。.如果一個(gè)方法申明將拋出某個(gè)異常,它就必須真的拋出那個(gè)異常

 。.在catch子句中匹配特別是一種精確匹配

  D.可能拋出系統(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)行但沒(méi)有任何輸出. D. 運(yùn)行時(shí)拋出異常

  附:無(wú)論是否拋出異常,finally代碼塊總是會(huì)被執(zhí)行,主要用于java一些后續(xù)處理

  15.jsp指令中isELIgnored="boolean"的意思是(C)

  A.決定是否實(shí)現(xiàn)Servler的單線程模式,

  B.決定改頁(yè)面是否是一個(gè)錯(cuò)誤處理頁(yè)面,

  C.決定是否支持EL表示,

  D.沒(méi)有具體的含義。

  附:在isELIgnored="true"時(shí)輸出為${2000 % 20},而isELIgnored="false"時(shí)輸出為100。Web容器默認(rèn)isELIgnored="false"。

  16.下面關(guān)于Java的引用,說(shuō)法正確的是:B

 。.應(yīng)用實(shí)際上就是指針

 。.應(yīng)用本身是Primitive

  C.引用就是對(duì)象本身

 。.一個(gè)對(duì)象只能被一個(gè)引用所指引

  附:primitive主數(shù)據(jù)類型,也稱之其為基本數(shù)據(jù)類型,

  還有一種為引用數(shù)據(jù)類型:引用數(shù)據(jù)類型,顧名思義就是:“引用”,當(dāng)一個(gè)對(duì)象賦值給一個(gè)引用變量時(shí),那么,則表明這個(gè)引用變量是指向這個(gè)對(duì)象的;一個(gè)對(duì)象可以有多個(gè)引用;一個(gè)引用同一時(shí)刻,則只能指向一個(gè)對(duì)象;

  17.對(duì)于import java.util包,以下那種說(shuō)法是錯(cuò)誤的**?C**

  A. Vector類屬于java.util包

 。. Vector類放在…/java/util/目錄下

 。. Vector類放在java.util文件中

  D. Vector類是Sun公司的產(chǎn)品

  18.在一個(gè)線程中Sleep(1000)方法,將使得該線程在多少時(shí)間后獲得對(duì)CPU的控制(假設(shè)睡眠過(guò)程中不會(huì)有其他事件喚醒該線程)?C

 。.正好1000毫秒。. 1000毫秒不到 C. >=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)于垃圾收集的說(shuō)法正確的是:D

 。.一旦一個(gè)對(duì)象成為垃圾,就立刻被收集掉。

 。.對(duì)象空間被收集掉之后,會(huì)執(zhí)行該對(duì)象的finalize方法

 。. finalize方法和C++的析構(gòu)函數(shù)是完全一回事情

 。.一個(gè)對(duì)象成為垃圾是因?yàn)椴辉儆幸弥钢蔷程并非如此。

  21.下面的語(yǔ)句會(huì)產(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時(shí),要先把運(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ì)算機(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會(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òu)件的程序必須有一個(gè)**( ). D**

  A.按鈕 B.標(biāo)簽 C.菜單 D.容器

  26.下列標(biāo)識(shí)符(名字)命名原則中,正確的是**( ) D**

  A.類名的首字母小寫(xiě) B.變量和方法名的首寫(xiě)字母大寫(xiě) C.接口名的首寫(xiě)字母小寫(xiě) D.常量完全大寫(xiě)

  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.哪個(gè)語(yǔ)句創(chuàng)建了一個(gè)數(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不是一個(gè)數(shù)租,應(yīng)該返回float[] ,C中是字符串應(yīng)該返回String,D是二維數(shù)租,正確寫(xiě)法int[][] ia = {{4, 5, 6}, {1, 2, 3}};

  29.以public修飾的類如:public class Car{…}則Car() A

  A、可被其它程序包中的類使用

  B、僅能被本程序包中的類使用

  C、不能被任意其它類使用

  D、不能被其它類繼承

  30.下列哪個(gè)屬于容器型構(gòu)件() C

  A .JEditB.JButton C.JPanel D.JTextField

  31.Java程序的執(zhí)行過(guò)程中用到一套JDK工具,其中java.exe是指( )B

  A.Java文檔生成器 B.Java解釋器 C.Java編譯器 D.Java類分解器

  32.下列關(guān)于構(gòu)造方法的敘述中,錯(cuò)誤的是**( ) C**

  A. Java語(yǔ)言規(guī)定構(gòu)造方法名與類名必須相同

  B. Java語(yǔ)言規(guī)定構(gòu)造方法沒(méi)有返回值,但不用vold聲明

  C. Java語(yǔ)言規(guī)定構(gòu)造方法不可以重載

  D. Java語(yǔ)言規(guī)定構(gòu)造方法只能通過(guò)new自動(dòng)調(diào)用

  33.構(gòu)造函數(shù)何時(shí)被調(diào)用() B

  A.類定義時(shí) B.創(chuàng)建對(duì)象時(shí) C.調(diào)用對(duì)象方法時(shí) D.使用對(duì)象的變量時(shí)

  34.break語(yǔ)句**( ) D**

  A、只中斷最內(nèi)層的循環(huán)B、只中斷最外層的循環(huán)

  C、借助于標(biāo)號(hào),可以實(shí)現(xiàn)任何外層循環(huán)中斷D、只中斷某一層的循環(huán)

  35.Java語(yǔ)言中下面哪個(gè)可以用作正確的變量名稱**()B**

  A、3DB、nameC、extendsD、implements

  附:Java 中的變量名不能以數(shù)字開(kāi)頭。不能是關(guān)鍵字

  36.在JavaScript中如何驗(yàn)證一個(gè)數(shù)據(jù)是否是數(shù)字(D)

  A.如果用Integer.parseInt(value)有誤就不是數(shù)字

  B.int I = value若報(bào)錯(cuò)就不是數(shù)字,

  C.沒(méi)有方法驗(yàn)證

  D.利用isNaN(value)返回的boolean進(jìn)行判斷

  附:返回一個(gè)Boolean 值,指明提供的值是否是保留值NaN(不是數(shù)字)。

  37.下面哪一個(gè)不能作JSP的服務(wù)器(D)

  A. IBM WebSphereB. BEA WebLogic C. TomcatD. pws

  38.下面哪項(xiàng)不是JSP操作指令(D)

  A. getPropertyB. forward

  C. includeD. import

  39.如果希望控件在界面上按表格行分列排列,應(yīng)使用下列那種布局管理器?( B)

  A、BoxLayoutB、GridLayoutC、BorderLayoutD、FlowLouLayout

  40.下面哪一項(xiàng)不是Java類訪問(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è)不是表單標(biāo)記(D)

  A. INPUT B.RADIO C.CHECKBOX D. TR

  43.下面哪項(xiàng)不是response對(duì)象的方法(C)

  A. setContentType(String contentTypestr)

  B. setHeader(String headername,String headervalue)

  C. getParameter(String str)

  D. sendError(int errorcode)

  44.以下(B)是編寫(xiě)Servlet必須導(dǎo)入的包.

  A.java.sql.* B.java.servlet.* C.java.util.* D.java.lang.*

  45.下面哪項(xiàng)不屬于SQL語(yǔ)句的子類(D)

  A.數(shù)據(jù)定義語(yǔ)言(DDL)

  B.數(shù)據(jù)查詢語(yǔ)言(DQL)

  C.事務(wù)控制語(yǔ)言(TCL)

  D.數(shù)據(jù)插入語(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表中的數(shù)據(jù)檢索出來(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作用域的通信對(duì)象的有(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ì)報(bào)錯(cuò))。

  接口中的變量會(huì)被隱式的指定為public static final變量(并且只能是 public,用 private 修飾會(huì)報(bào)編譯錯(cuò)誤。)

  5.下面哪個(gè)語(yǔ)句正確地聲明一個(gè)整型的二維數(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的簡(jiǎn)單數(shù)據(jù)類型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ō)法錯(cuò)誤的有(BCD)

  A. 數(shù)組是一種對(duì)象

  B. 數(shù)組屬于一種原生類

  C.int number=[]={31,23,33,43,35,63}

  D. 數(shù)組的大小可以任意改變

  9.不能用來(lái)修飾interface的有(ACD)

  A.privateB.publicC.protectedD.static

  10.下列說(shuō)法錯(cuò)誤的有(ACD)

  A. 在類方法中可用this來(lái)調(diào)用本類的類方法

  B. 在類方法中調(diào)用本類的類方法時(shí)可直接調(diào)用

  C. 在類方法中只能調(diào)用本類中的類方法

  D. 在類方法中絕對(duì)不能調(diào)用實(shí)例方法

  11.如下代碼

  class A {

  A() { }

  }

  class B extends A {

  }

  哪兩個(gè)說(shuō)明是正確的?BD

  A. B類的構(gòu)造器應(yīng)該是public.

  B. B類的構(gòu)造器應(yīng)該是沒(méi)有參數(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)識(shí)符不合法的有(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的包中,屬于類的是: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(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.對(duì)該段代碼描述正確的有<% int="" i="Integer.parseInt(request.getParemeter(“value”))">(BDC)

  B. <%=>

  C. <%=>

  D.

  E.

  F.

  G.

  18.下面哪三個(gè)描述是正確的?BCE

  A. 默認(rèn)構(gòu)造器初始化方法變量

  B. 默認(rèn)構(gòu)造器有和它所在類相同的訪問(wèn)修飾詞.

  C. 默認(rèn)構(gòu)造器調(diào)用其父類的無(wú)參構(gòu)造器.

  D. 如果一個(gè)類沒(méi)有無(wú)參構(gòu)造器,編譯器會(huì)它創(chuàng)建一個(gè)默認(rèn)構(gòu)造器.

  E. 只有當(dāng)一個(gè)類沒(méi)有任何構(gòu)造器時(shí),編譯器會(huì)為它創(chuàng)建一個(gè)默認(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

  一、單選題

  以下哪個(gè)不是SpringBoot默認(rèn)支持自動(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ù)據(jù)庫(kù)中,實(shí)現(xiàn)表與表之間的聯(lián)系是通過(guò)。(B)

  A、實(shí)體完整性規(guī)

  B、參照完整性規(guī)則

  C.用戶自定義的完整性

  D、值域

  當(dāng)Redis作為數(shù)據(jù)庫(kù)時(shí),與Spring Boot整合使用的相關(guān)說(shuō)明,正確的是(A)

  A. @RedisHash("persons )用于指定操作實(shí)體類對(duì)象在Redis數(shù)據(jù)庫(kù)中的存儲(chǔ)空間

  B. @ld用于標(biāo)識(shí)實(shí)體類主鍵,需要手動(dòng)指定id生成策略

  C.使用Redis數(shù)據(jù)庫(kù),必須為實(shí)體類屬性添加@Indexed屬性生成二級(jí)索引

  D編寫(xiě)操作Redis數(shù)據(jù)庫(kù)的Repostory接口文件時(shí),需要繼承JpaRepository 接口

  哪個(gè)關(guān)鍵字可以對(duì)對(duì)象加互斥鎖。(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中用到的注解錯(cuò)誤的一項(xiàng)。(A)

  A @RequestMapping來(lái)指定請(qǐng)求的url,只能寫(xiě)在方法上

  B @GetMappgin表示只能接收GET方式提交的請(qǐng)求

  C @PostMapping表示只能接收POST方式提交的請(qǐng)求

  D @RestController是個(gè)組合注解, 包括@Controller和@ResponseBody

  Spring支持的事務(wù)功能包括(C)

  A,事務(wù)的傳播行為

  B,事務(wù)回滾

  C,全部選項(xiàng)

  D,事務(wù)的隔離級(jí)別

  下列哪種操作,最容易產(chǎn)生MySQL數(shù)據(jù)庫(kù)的鎖等待(C)

  A、.執(zhí)行 fromtwhere id> n (刪除數(shù)百萬(wàn)行)

  B、執(zhí)行alter table對(duì)一個(gè)1000萬(wàn)行記錄的表刪除索引

  C、執(zhí)行alter table對(duì)一個(gè)1000萬(wàn)行記錄的表增加列

  D、執(zhí)行alter table對(duì)一個(gè)1000萬(wàn)行記錄的表增加索引

  下列( B) 不屬于MyBatis全局配置文件中的標(biāo)簽

  A. settings

  B. select

  C. plugins

  D. properties

  以下數(shù)據(jù)庫(kù)事務(wù)的隔離級(jí)別中哪一個(gè)有不可重復(fù)讀,幻讀(D)

  A,讀取未提交內(nèi)容(Read Uncommited)

  B,讀取提交內(nèi)容(Read Committed)

  C,可重復(fù)讀(Repeatable Read)

  D,可串行化(Serializable)

  以下哪個(gè)不是SpringBoot默認(rèn)支持自動(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.以上都不正確

  下面對(duì)Spring框架的持久化支持說(shuō)法錯(cuò)誤的是(C)

  A Spring沒(méi)有自己的持久化方案,它集合了現(xiàn)有的流行持久化框架

  B Spring采用JDBC模板封裝了JDBC的數(shù)據(jù)庫(kù)操作

  C Spring對(duì)各種持久化技術(shù)提供了統(tǒng)一的編程方式

  D Spring將數(shù)據(jù)庫(kù)訪問(wèn)的checked異常轉(zhuǎn)換為運(yùn)行時(shí)異常

  標(biāo)記關(guān)于Spring核心容器,說(shuō)法錯(cuò)誤的是?(A)

  A: Spring框架的所有功能都是通過(guò)其核心容器來(lái)實(shí)現(xiàn)的。

  B:創(chuàng)建BeanFactory實(shí)例時(shí),需要提供Spring所管理容器的詳細(xì)配置信息,這些信息通常采用XML文件形式來(lái)管理。

  C: ApplicationContext不僅包含了BeanFactory的所有功能,還添加了對(duì)國(guó)際化、資源訪問(wèn)、事件傳播等方面的支持。

  D:通常在Java項(xiàng)目中,會(huì)采用通過(guò)ClassPathXmlApplicationContex類來(lái)實(shí)例化ApplicationContext容器的方式, 而在Web項(xiàng)目中,ApplicationContext容器的實(shí)例化工作會(huì)交由Web服務(wù)器來(lái)完成。

  下列說(shuō)話錯(cuò)誤的一項(xiàng)是:(D)

  A SpringBoot項(xiàng)目啟動(dòng)本質(zhì)上就是Spring的初始化操作

  B. SpringBoot項(xiàng)目啟動(dòng)會(huì)加載所有的在spring factories中配置的監(jiān) 聽(tīng)器

  C SpringBoot項(xiàng)目啟動(dòng)的時(shí)候會(huì)發(fā)布相關(guān)事件,從而會(huì)觸發(fā)對(duì)應(yīng)的監(jiān) 聽(tīng)器來(lái)完成對(duì)應(yīng)的操作

  D. SpringBoot項(xiàng)目啟動(dòng)就會(huì)加載bootstrap properties文件

  下列關(guān)于Spring Boot自動(dòng)配置原理的說(shuō)法,錯(cuò)誤的是(D)

  A @SpringBootApplication只包含@SpringBooConfiguration、@EnableAutoConfiguration、 @ComponentScan 3個(gè)注解

  B. @SpringBootConfiguration注解表示當(dāng)前類為-一一個(gè)配置類并可以被組件掃描器掃描

  C. @EnableAutoConfiguration的作用是啟動(dòng)自動(dòng)配置,向容器中導(dǎo)入所有選中的自動(dòng)配置類

  D. @ComponentScan注解的主要作用是掃描指定包及其子包下所有注解類文件作為Spring容器的組件使用

  描述Spring MVC正確的選項(xiàng)。(D)

  A,在Spring MVC中,可以配置多個(gè)DispatcherServlet

  B, DispatcherServlet在 Spring MVC中是核心servlet,它負(fù)責(zé)接收請(qǐng)求并將請(qǐng)求分發(fā)給適合的控制器

  C,要使Spring MVC可用,DispatcherServlet需要在web xml中配置

  D,全部選項(xiàng)

  看程序進(jìn)行分析: Public UserselectUser(String name ,String area).

  select”fromuser user t whereuser name = #{0} anduser _area #(1)

  #{0)表示哪一個(gè)參數(shù)?(B)

  A.程序報(bào)錯(cuò)

  B. name

  C. area

  D. 0

  二、多選題

  在關(guān)于依賴注入,描述正確的是。(BC)

  A.依賴注入可以增強(qiáng)系統(tǒng)各組件的依賴關(guān)系

  B.所謂依賴注入,就是明確地定義組件接口,獨(dú)立開(kāi)發(fā)各個(gè)組件,然后根據(jù)組件件依賴關(guān)系組裝運(yùn)行的設(shè)計(jì)模式

  C依賴注入能多降低系統(tǒng)各組件的依賴關(guān)系,提倡面向接口編程

  D Spring的依賴注入和控制反轉(zhuǎn)是完全不同的兩個(gè)概念

  下列哪種說(shuō)法是錯(cuò)誤的。(A,B )

  A.實(shí)例方法可直接調(diào)用超類的實(shí)例方法

  B.實(shí)例方法可直接調(diào)用超類的類方法

  C.實(shí)例方法可直接調(diào)用其他類的實(shí)例方法

  D.實(shí)例方法可直接調(diào)用本類的類方法

  對(duì)mysql支持的復(fù)制類型描述正確的是? (ABC)

  A,基于語(yǔ)句的復(fù)制

  B,基于行的復(fù)制

  C,混合類型的復(fù)制

  D,單類型的復(fù)制

  SpringMVC用什么對(duì)象從后臺(tái)向前臺(tái)傳遞數(shù)據(jù)的? (CB)

  A將數(shù)據(jù)綁定到request

  B返回ModelAndView

  C通過(guò)ModelMap對(duì)象,可以在這個(gè)對(duì)象里面調(diào)用put方法,把對(duì)象加到里面,前端就可以通過(guò)el表達(dá)式拿到

  D綁定數(shù)據(jù)到Session中

  下列描述有誤的是? (CD)

  A MyBatis是一個(gè)可以自定義SQL、存儲(chǔ)過(guò)程和高級(jí)映射的持久層框架

  B. MyBatis的緩存分為級(jí)緩存和二級(jí)緩存,一級(jí)緩存放在 session里面

  C. Mybatis是個(gè)全ORM (對(duì)象關(guān)系映射)框架,它內(nèi)部封裝了JDBC

  D. MyBatis只可以使用XML來(lái)配置和映射原生信息

  三、判斷題

  SpringMvc的控制器是單例模式。(對(duì) )

  在Java的方法中定義一個(gè)常量要用const關(guān)鍵字。(錯(cuò))

  在sq|語(yǔ)句比較復(fù)雜的時(shí)候,使用注解綁定比使用xml!綁定會(huì)更好。(錯(cuò))

  Spring是輕量的,基本的版本大約3MB。(對(duì))

  Spring Boot為整合MyBatis技術(shù)框架提供了版本管理。(對(duì))

  如果對(duì)象的引用被置為null,垃圾收集器會(huì)立即釋放對(duì)象占用的內(nèi)存?(錯(cuò))

  主鍵被強(qiáng)制定義成NOT NULL和UNIQUE。(對(duì))

  SpringMVC我們可以直接在Controller的相關(guān)的方法的形參中獲取HttpServletResponse對(duì)象(對(duì) )

  JSP頁(yè)面是一種包含 了靜態(tài)數(shù)據(jù)和JSP元素兩種類型的文本的文本文檔。(對(duì))

  在Java中,程序員是不需要顯示的去釋放一個(gè)對(duì)象的內(nèi)存的, 而是由虛擬機(jī)自行執(zhí)行。(對(duì))

  四、填空題

  #{}和${}的含義是什么? #{}是(表示一個(gè)占位符,防止sql注入) ${}是(sql的拼接,以字符串方式替換)

  SpringMVC常用注解中獲取URL中路徑變量中的值是(RequestParam)注解。

 。‥NUM)是一個(gè)字符串對(duì)象,用于指定一組預(yù)定義的值,并可在創(chuàng)建表時(shí)使用。

  讓控件按相同大小排列用(GridLayout)布局管理器;一次只有一個(gè)控件可見(jiàn)的布局管理器是(CardLayout)

  (@Repository)注解用于將數(shù)據(jù)訪問(wèn)層(DAO層)的類標(biāo)識(shí)為Spring中的Bean,其功能與@Component相同。

  在Spring Boot項(xiàng)目啟動(dòng)類上添加了注解,(@MapperScan("xxx"))來(lái)替代@Mapper注解。

  默認(rèn)情況下,Spring Boot生成的全局配置文件是(application.properties)

  JAVA筆試題目及答案5

  1.什么是Java虛擬機(jī)?為什么Java被稱作是“平臺(tái)無(wú)關(guān)的編程語(yǔ)言”?

  Java虛擬機(jī)是一個(gè)可以執(zhí)行Java字節(jié)碼的虛擬機(jī)進(jìn)程。Java源文件被編譯成能被Java虛擬機(jī)執(zhí)行的字節(jié)碼文件。

  Java被設(shè)計(jì)成允許應(yīng)用程序可以運(yùn)行在任意的平臺(tái),而不需要程序員為每一個(gè)平臺(tái)單獨(dú)重寫(xiě)或者是重新編譯。Java虛擬機(jī)讓這個(gè)變?yōu)榭赡,因(yàn)樗赖讓佑布脚_(tái)的指令長(zhǎng)度和其他特性。

  2.JDK和JRE的區(qū)別是什么?

  Java運(yùn)行時(shí)環(huán)境(JRE)是將要執(zhí)行Java程序的Java虛擬機(jī)。它同時(shí)也包含了執(zhí)行applet需要的瀏覽器插件。Java開(kāi)發(fā)工具包(JDK)是完整的Java軟件開(kāi)發(fā)包,包含了JRE,編譯器和其他的工具(比如:JavaDoc,Java調(diào)試器),可以讓開(kāi)發(fā)者開(kāi)發(fā)、編譯、執(zhí)行Java應(yīng)用程序。

  3.”static”關(guān)鍵字是什么意思?Java中是否可以覆蓋(override)一個(gè)private或者是static的方法?

  “static”關(guān)鍵字表明一個(gè)成員變量或者是成員方法可以在沒(méi)有所屬的類的實(shí)例變量的情況下被訪問(wèn)。

  Java中static方法不能被覆蓋,因?yàn)榉椒ǜ采w是基于運(yùn)行時(shí)動(dòng)態(tài)綁定的,而static方法是編譯時(shí)靜態(tài)綁定的。static方法跟類的任何實(shí)例都不相關(guān),所以概念上不適用。

  4.是否可以在static環(huán)境中訪問(wèn)非static變量?

  static變量在Java中是屬于類的,它在所有的實(shí)例中的值是一樣的。當(dāng)類被Java虛擬機(jī)載入的時(shí)候,會(huì)對(duì)static變量進(jìn)行初始化。如果你的代碼嘗試不用實(shí)例來(lái)訪問(wèn)非static的變量,編譯器會(huì)報(bào)錯(cuò),因?yàn)檫@些變量還沒(méi)有被創(chuàng)建出來(lái),還沒(méi)有跟任何實(shí)例關(guān)聯(lián)上。

  5.Java支持的數(shù)據(jù)類型有哪些?什么是自動(dòng)拆裝箱?

  Java語(yǔ)言支持的8中基本數(shù)據(jù)類型是:byte short int long float double boolean char

  自動(dòng)裝箱是Java編譯器在基本數(shù)據(jù)類型和對(duì)應(yīng)的對(duì)象包裝類型之間做的一個(gè)轉(zhuǎn)化。比如:把int轉(zhuǎn)化成Integer,double轉(zhuǎn)化成double,等等。反之就是自動(dòng)拆箱。

  6.Java中的方法覆蓋(Overriding)和方法重載(Overloading)是什么意思?

  Java中的方法重載發(fā)生在同一個(gè)類里面兩個(gè)或者是多個(gè)方法的方法名相同但是參數(shù)不同的情況。與此相對(duì),方法覆蓋是說(shuō)子類重新定義了父類的方法。方法覆蓋必須有相同的方法名,參數(shù)列表和返回類型。覆蓋者可能不會(huì)限制它所覆蓋的方法的訪問(wèn)。

  7.Java中,什么是構(gòu)造函數(shù)?什么是構(gòu)造函數(shù)重載?什么是復(fù)制構(gòu)造函數(shù)?

  當(dāng)新對(duì)象被創(chuàng)建的時(shí)候,構(gòu)造函數(shù)會(huì)被調(diào)用。每一個(gè)類都有構(gòu)造函數(shù)。在程序員沒(méi)有給類提供構(gòu)造函數(shù)的情況下,Java編譯器會(huì)為這個(gè)類創(chuàng)建一個(gè)默認(rèn)的構(gòu)造函數(shù)。

  Java中構(gòu)造函數(shù)重載和方法重載很相似。可以為一個(gè)類創(chuàng)建多個(gè)構(gòu)造函數(shù)。每一個(gè)構(gòu)造函數(shù)必須有它自己唯一的參數(shù)列表。

  Java不支持像C++中那樣的復(fù)制構(gòu)造函數(shù),這個(gè)不同點(diǎn)是因?yàn)槿绻悴蛔约簩?xiě)構(gòu)造函數(shù)的情況下,Java不會(huì)創(chuàng)建默認(rèn)的復(fù)制構(gòu)造函數(shù)。

  8.Java支持多繼承么?

  不支持,Java不支持多繼承。每個(gè)類都只能繼承一個(gè)類,但是可以實(shí)現(xiàn)多個(gè)接口。

  9.接口和抽象類的區(qū)別是什么?

  Java提供和支持創(chuàng)建抽象類和接口。它們的實(shí)現(xiàn)有共同點(diǎn),不同點(diǎn)在于:

  接口中所有的方法隱含的都是抽象的。而抽象類則可以同時(shí)包含抽象和非抽象的方法。 類可以實(shí)現(xiàn)很多個(gè)接口,但是只能繼承一個(gè)抽象類 類如果要實(shí)現(xiàn)一個(gè)接口,它必須要實(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。 接口是絕對(duì)抽象的,不可以被實(shí)例化。抽象類也不可以被實(shí)例化,但是,如果它包含main方法的話是可以被調(diào)用的。也可以參考JDK8中抽象類和接口的區(qū)別

  10.什么是值傳遞和引用傳遞?

  對(duì)象被值傳遞,意味著傳遞了對(duì)象的一個(gè)副本。因此,就算是改變了對(duì)象副本,也不會(huì)影響源對(duì)象的值。

  對(duì)象被引用傳遞,意味著傳遞的并不是實(shí)際的對(duì)象,而是對(duì)象的引用。因此,外部對(duì)引用對(duì)象所做的改變會(huì)反映到所有的對(duì)象上。

  11.進(jìn)程和線程的區(qū)別是什么?

  進(jìn)程是執(zhí)行著的應(yīng)用程序,而線程是進(jìn)程內(nèi)部的一個(gè)執(zhí)行序列。一個(gè)進(jìn)程可以有多個(gè)線程。線程又叫做輕量級(jí)進(jìn)程。

  12.創(chuàng)建線程有幾種不同的方式?你喜歡哪一種?為什么?

  有三種方式可以用來(lái)創(chuàng)建線程:

  繼承Thread類 實(shí)現(xiàn)Runnable接口 應(yīng)用程序可以使用Executor框架來(lái)創(chuàng)建線程池。

  實(shí)現(xiàn)Runnable接口這種方式更受歡迎,因?yàn)檫@不需要繼承Thread類。在應(yīng)用設(shè)計(jì)中已經(jīng)繼承了別的對(duì)象的情況下,這需要多繼承(而Java不支持多繼承),只能實(shí)現(xiàn)接口。同時(shí),線程池也是非常高效的,很容易實(shí)現(xiàn)和使用。

  13.概括的解釋下線程的幾種可用狀態(tài)。

  線程在執(zhí)行過(guò)程中,可以處于下面幾種狀態(tài):

  就緒(Runnable):線程準(zhǔn)備運(yùn)行,不一定立馬就能開(kāi)始執(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語(yǔ)言中,每一個(gè)對(duì)象有一把鎖。線程可以使用synchronized關(guān)鍵字來(lái)獲取對(duì)象上的鎖。synchronized關(guān)鍵字可應(yīng)用在方法級(jí)別(粗粒度鎖)或者是代碼塊級(jí)別(細(xì)粒度鎖)。

  15.在監(jiān)視器(Monitor)內(nèi)部,是如何做線程同步的?程序應(yīng)該做哪種級(jí)別的同步?

  監(jiān)視器和鎖在Java虛擬機(jī)中是一塊使用的。監(jiān)視器監(jiān)視一塊同步代碼塊,確保一次只有一個(gè)線程執(zhí)行同步代碼塊。每一個(gè)監(jiān)視器都和一個(gè)對(duì)象引用相關(guān)聯(lián)。線程在獲取鎖之前不允許執(zhí)行同步代碼。

  16.什么是死鎖(deadlock)?

  兩個(gè)進(jìn)程都在等待對(duì)方執(zhí)行完畢才能繼續(xù)往下執(zhí)行的時(shí)候就發(fā)生了死鎖。結(jié)果就是兩個(gè)進(jìn)程都陷入了無(wú)限的等待中。

  17.如何確保N個(gè)線程可以訪問(wèn)N個(gè)資源同時(shí)又不導(dǎo)致死鎖?

  使用多線程的時(shí)候,一種非常簡(jiǎn)單的避免死鎖的方式就是:指定獲取鎖的順序,并強(qiáng)制線程按照指定的順序獲取鎖。因此,如果所有的線程都是以同樣的順序加鎖和釋放鎖,就不會(huì)出現(xiàn)死鎖了。

  18.Java集合類框架的基本接口有哪些?

  Java集合類提供了一套設(shè)計(jì)良好的支持對(duì)一組對(duì)象進(jìn)行操作的接口和類。Java集合類里面最基本的接口有:

  Collection:代表一組對(duì)象,每一個(gè)對(duì)象都是它的子元素。 Set:不包含重復(fù)元素的Collection。 List:有順序的collection,并且可以包含重復(fù)元素。 Map:可以把鍵(key)映射到值(value)的對(duì)象,鍵不能重復(fù)。

  19.為什么集合類沒(méi)有實(shí)現(xiàn)Cloneable和Serializable接口?

  集合類接口指定了一組叫做元素的對(duì)象。集合類接口的每一種具體的實(shí)現(xiàn)類都可以選擇以它自己的方式對(duì)元素進(jìn)行保存和排序。有的集合類允許重復(fù)的鍵,有些不允許。

  20.什么是迭代器(Iterator)?

  Iterator接口提供了很多對(duì)集合元素進(jìn)行迭代的方法。每一個(gè)集合類都包含了可以返回迭代器實(shí)例的

  迭代方法。迭代器可以在迭代的過(guò)程中刪除底層集合的元素。

  克隆(cloning)或者是序列化(serialization)的語(yǔ)義和含義是跟具體的實(shí)現(xiàn)相關(guān)的。因此,應(yīng)該由集合類的具體實(shí)現(xiàn)來(lái)決定如何被克隆或者是序列化。

  21.Iterator和ListIterator的區(qū)別是什么?

  下面列出了他們的區(qū)別:

  Iterator可用來(lái)遍歷Set和List集合,但是ListIterator只能用來(lái)遍歷List。 Iterator對(duì)集合只能是前向遍歷,ListIterator既可以前向也可以后向。 ListIterator實(shí)現(xiàn)了Iterator接口,并包含其他的功能,比如:增加元素,替換元素,獲取前一個(gè)和后一個(gè)元素的索引,等等。

  22.快速失敗(fail-fast)和安全失敗(fail-safe)的區(qū)別是什么?

  Iterator的安全失敗是基于對(duì)底層集合做拷貝,因此,它不受源集合上修改的影響。java.util包下面的所有的集合類都是快速失敗的,而java.util.concurrent包下面的所有的類都是安全失敗的?焖偈〉牡鲿(huì)拋出ConcurrentModificationException異常,而安全失敗的迭代器永遠(yuǎn)不會(huì)拋出這樣的異常。

  23.Java中的HashMap的工作原理是什么?

  Java中的HashMap是以鍵值對(duì)(key-value)的形式存儲(chǔ)元素的。HashMap需要一個(gè)hash函數(shù),它使用hashCode()和equals()方法來(lái)向集合/從集合添加和檢索元素。當(dāng)調(diào)用put()方法的時(shí)候,HashMap會(huì)計(jì)算key的hash值,然后把鍵值對(duì)存儲(chǔ)在集合中合適的索引上。如果key已經(jīng)存在了,value會(huì)被更新成新值。HashMap的一些重要的特性是它的容量(capacity),負(fù)載因子(load factor)和擴(kuò)容極限(threshold resizing)。

  24.hashCode()和equals()方法的重要性體現(xiàn)在什么地方?

  Java中的HashMap使用hashCode()和equals()方法來(lái)確定鍵值對(duì)的索引,當(dāng)根據(jù)鍵獲取值的時(shí)候也會(huì)用到這兩個(gè)方法。如果沒(méi)有正確的實(shí)現(xiàn)這兩個(gè)方法,兩個(gè)不同的鍵可能會(huì)有相同的hash值,因此,可能會(huì)被集合認(rèn)為是相等的。而且,這兩個(gè)方法也用來(lái)發(fā)現(xiàn)重復(fù)元素。所以這兩個(gè)方法的實(shí)現(xiàn)對(duì)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提供了對(duì)鍵的列舉(Enumeration)。 一般認(rèn)為Hashtable是一個(gè)遺留的類。

  26.數(shù)組(Array)和列表(ArrayList)有什么區(qū)別?什么時(shí)候應(yīng)該使用Array而不是ArrayList?

  下面列出了Array和ArrayList的不同點(diǎn):

  Array可以包含基本類型和對(duì)象類型,ArrayList只能包含對(duì)象類型。 Array大小是固定的,ArrayList的大小是動(dòng)態(tài)變化的。 ArrayList提供了更多的方法和特性,比如:addAll(),removeAll(),iterator()等等。 對(duì)于基本類型數(shù)據(jù),集合使用自動(dòng)裝箱來(lái)減少編碼工作量。但是,當(dāng)處理固定大小的基本數(shù)據(jù)類型的時(shí)候,這種方式相對(duì)比較慢。

  27.ArrayList和LinkedList有什么區(qū)別?

  ArrayList和LinkedList都實(shí)現(xiàn)了List接口,他們有以下的不同點(diǎn):

  ArrayList是基于索引的數(shù)據(jù)接口,它的底層是數(shù)組。它可以以O(shè)(1)時(shí)間復(fù)雜度對(duì)元素進(jìn)行隨機(jī)訪問(wèn)。與此對(duì)應(yīng),LinkedList是以元素列表的形式存儲(chǔ)它的數(shù)據(jù),每一個(gè)元素都和它的前一個(gè)和后一個(gè)元素鏈接在一起,在這種情況下,查找某個(gè)元素的時(shí)間復(fù)雜度是O(n)。

  相對(duì)于ArrayList,LinkedList的插入,添加,刪除操作速度更快,因?yàn)楫?dāng)元素被添加到集合任意位置的時(shí)候,不需要像數(shù)組那樣重新計(jì)算大小或者是更新索引。

  LinkedList比ArrayList更占內(nèi)存,因?yàn)長(zhǎng)inkedList為每一個(gè)節(jié)點(diǎn)存儲(chǔ)了兩個(gè)引用,一個(gè)指向前一個(gè)元素,一個(gè)指向下一個(gè)元素也可以參考ArrayList vs. LinkedList。

  28.Comparable和Comparator接口是干什么的?列出它們的區(qū)別。

  Java提供了只包含一個(gè)compareTo()方法的Comparable接口。這個(gè)方法可以個(gè)給兩個(gè)對(duì)象排序。具體來(lái)說(shuō),它返回負(fù)數(shù),0,正數(shù)來(lái)表明輸入對(duì)象小于,等于,大于已經(jīng)存在的對(duì)象。

  Java提供了包含compare()和equals()兩個(gè)方法的Comparator接口。compare()方法用來(lái)給兩個(gè)輸入?yún)?shù)排序,返回負(fù)數(shù),0,正數(shù)表明第一個(gè)參數(shù)是小于,等于,大于第二個(gè)參數(shù)。equals()方法需要一個(gè)對(duì)象作為參數(shù),它用來(lái)決定輸入?yún)?shù)是否和comparator相等。只有當(dāng)輸入?yún)?shù)也是一個(gè)comparator并且輸入?yún)?shù)和當(dāng)前comparator的排序結(jié)果是相同的時(shí)候,這個(gè)方法才返回true。

  29.什么是Java優(yōu)先級(jí)隊(duì)列(Priority Queue)?

  PriorityQueue是一個(gè)基于優(yōu)先級(jí)堆的無(wú)界隊(duì)列,它的元素是按照自然順序(natural order)排序的。在創(chuàng)建的時(shí)候,我們可以給它提供一個(gè)負(fù)責(zé)給元素排序的比較器。PriorityQueue不允許null值,因?yàn)樗麄儧](méi)有自然順序,或者說(shuō)他們沒(méi)有任何的相關(guān)聯(lián)的比較器。最后,PriorityQueue不是線程安全的,入隊(duì)和出隊(duì)的時(shí)間復(fù)雜度是O(log(n))。

  30.你了解大O符號(hào)(big-O notation)么?你能給出不同數(shù)據(jù)結(jié)構(gòu)的例子么?

  大O符號(hào)描述了當(dāng)數(shù)據(jù)結(jié)構(gòu)里面的元素增加的時(shí)候,算法的規(guī)模或者是性能在最壞的場(chǎng)景下有多么好。

  大O符號(hào)也可用來(lái)描述其他的行為,比如:內(nèi)存消耗。因?yàn)榧项悓?shí)際上是數(shù)據(jù)結(jié)構(gòu),我們一般使用大O符號(hào)基于時(shí)間,內(nèi)存和性能來(lái)選擇最好的實(shí)現(xiàn)。大O符號(hào)可以對(duì)大量數(shù)據(jù)的性能給出一個(gè)很好的說(shuō)明。

  31.如何權(quán)衡是使用無(wú)序的數(shù)組還是有序的數(shù)組?

  有序數(shù)組最大的好處在于查找的時(shí)間復(fù)雜度是O(log n),而無(wú)序數(shù)組是O(n)。有序數(shù)組的缺點(diǎn)是插入操作的時(shí)間復(fù)雜度是O(n),因?yàn)橹荡蟮脑匦枰笠苿?dòng)來(lái)給新元素騰位置。相反,無(wú)序數(shù)組的插入時(shí)間復(fù)雜度是常量O(1)。

  32.Java集合類框架的最佳實(shí)踐有哪些?

  根據(jù)應(yīng)用的需要正確選擇要使用的集合的類型對(duì)性能非常重要,比如:假如元素的大小是固定的,而且能事先知道,我們就應(yīng)該用Array而不是ArrayList。

  有些集合類允許指定初始容量。因此,如果我們能估計(jì)出存儲(chǔ)的元素的數(shù)目,我們可以設(shè)置初始容量來(lái)避免重新計(jì)算hash值或者是擴(kuò)容。

  為了類型安全,可讀性和健壯性的原因總是要使用泛型。同時(shí),使用泛型還可以避免運(yùn)行時(shí)的ClassCastException。

  使用JDK提供的不變類(immutable class)作為Map的鍵可以避免為我們自己的類實(shí)現(xiàn)hashCode()和equals()方法。

  編程的時(shí)候接口優(yōu)于實(shí)現(xiàn)。

  底層的集合實(shí)際上是空的情況下,返回長(zhǎng)度是0的集合或者是數(shù)組,不要返回null。

  33.Enumeration接口和Iterator接口的區(qū)別有哪些?

  Enumeration速度是Iterator的2倍,同時(shí)占用更少的內(nèi)存。但是,Iterator遠(yuǎn)遠(yuǎn)比Enumeration安全,因?yàn)槠渌程不能夠修改正在被iterator遍歷的集合里面的對(duì)象。同時(shí),Iterator允許調(diào)用者刪除底層集合里面的元素,這對(duì)Enumeration來(lái)說(shuō)是不可能的。

  34.HashSet和TreeSet有什么區(qū)別?

  HashSet是由一個(gè)hash表來(lái)實(shí)現(xiàn)的,因此,它的元素是無(wú)序的。add(),remove(),contains()方法的時(shí)間復(fù)雜度是O(1)。

  另一方面,TreeSet是由一個(gè)樹(shù)形的結(jié)構(gòu)來(lái)實(shí)現(xiàn)的,它里面的元素是有序的。因此,add(),remove(),contains()方法的時(shí)間復(fù)雜度是O(logn)。

  35.Java中垃圾回收有什么目的?什么時(shí)候進(jìn)行垃圾回收?

  垃圾回收的目的是識(shí)別并且丟棄應(yīng)用不再使用的對(duì)象來(lái)釋放和重用資源。

  36.System.gc()和Runtime.gc()會(huì)做什么事情?

  這兩個(gè)方法用來(lái)提示JVM要進(jìn)行垃圾回收。但是,立即開(kāi)始還是延遲進(jìn)行垃圾回收是取決于JVM的。

  37.finalize()方法什么時(shí)候被調(diào)用?析構(gòu)函數(shù)(finalization)的目的是什么?

  在釋放對(duì)象占用的內(nèi)存之前,垃圾收集器會(huì)調(diào)用對(duì)象的finalize()方法。一般建議在該方法中釋放對(duì)象持有的資源。

  38.如果對(duì)象的引用被置為null,垃圾收集器是否會(huì)立即釋放對(duì)象占用的內(nèi)存?

  不會(huì),在下一個(gè)垃圾回收周期中,這個(gè)對(duì)象將是可被回收的。

  39.Java堆的結(jié)構(gòu)是什么樣子的?什么是堆中的永久代(Perm Gen space)?

  JVM的堆是運(yùn)行時(shí)數(shù)據(jù)區(qū),所有類的實(shí)例和數(shù)組都是在堆上分配內(nèi)存。它在JVM啟動(dòng)的時(shí)候被創(chuàng)建。對(duì)象所占的堆內(nèi)存是由自動(dòng)內(nèi)存管理系統(tǒng)也就是垃圾收集器回收。

  堆內(nèi)存是由存活和死亡的對(duì)象組成的。存活的對(duì)象是應(yīng)用可以訪問(wèn)的,不會(huì)被垃圾回收。死亡的對(duì)象是應(yīng)用不可訪問(wèn)尚且還沒(méi)有被垃圾收集器回收掉的對(duì)象。一直到垃圾收集器把這些對(duì)象回收掉之前,他們會(huì)一直占據(jù)堆內(nèi)存空間。

  40.串行(serial)收集器和吞吐量(throughput)收集器的區(qū)別是什么?

  吞吐量收集器使用并行版本的新生代垃圾收集器,它用于中等規(guī)模和大規(guī)模數(shù)據(jù)的應(yīng)用程序。而串行收集器對(duì)大多數(shù)的小應(yīng)用(在現(xiàn)代處理器上需要大概100M左右的內(nèi)存)就足夠了。

  41.在Java中,對(duì)象什么時(shí)候可以被垃圾回收?

  當(dāng)對(duì)象對(duì)當(dāng)前使用這個(gè)對(duì)象的應(yīng)用程序變得不可觸及的時(shí)候,這個(gè)對(duì)象就可以被回收了。

  42.JVM的永久代中會(huì)發(fā)生垃圾回收么?

  垃圾回收不會(huì)發(fā)生在永久代,如果永久代滿了或者是超過(guò)了臨界值,會(huì)觸發(fā)完全垃圾回收(Full GC)。如果你仔細(xì)查看垃圾收集器的輸出信息,就會(huì)發(fā)現(xiàn)永久代也是被回收的。這就是為什么正確的永久代大小對(duì)避免Full GC是非常重要的原因。

  JAVA筆試題目及答案6

  一、面向?qū)ο蟮奶卣饔心男┓矫?/strong>

  1.抽象:

  抽象就是忽略一個(gè)主題中與當(dāng)前目標(biāo)無(wú)關(guān)的那些方面,以便更充分地注意與當(dāng)前目標(biāo)有關(guān)的方面。抽象并不打算了解全部問(wèn)題,而只是選擇其中的一部分,暫時(shí)不用部分細(xì)節(jié)。抽象包括兩個(gè)方面,一是過(guò)程抽象,二是數(shù)據(jù)抽象。

  2.繼承:

  繼承是一種聯(lián)結(jié)類的層次模型,并且允許和鼓勵(lì)類的重用,它提供了一種明確表述共性的方法。對(duì)象的一個(gè)新類可以從現(xiàn)有的類中派生,這個(gè)過(guò)程稱為類繼承。新類繼承了原始類的特性,新類稱為原始類的派生類(子類),而原始類稱為新類的基類(父類)。派生類可以從它的基類那里繼承方法和實(shí)例變量,并且類可以修改或增加新的方法使之更適合特殊的需要。

  3.封裝:

  封裝是把過(guò)程和數(shù)據(jù)包圍起來(lái),對(duì)數(shù)據(jù)的訪問(wèn)只能通過(guò)已定義的界面。面向?qū)ο笥?jì)算始于這個(gè)基本概念,即現(xiàn)實(shí)世界可以被描繪成一系列完全自治、封裝的對(duì)象,這些對(duì)象通過(guò)一個(gè)受保護(hù)的接口訪問(wèn)其他對(duì)象。

  4.多態(tài)性:

  多態(tài)性是指允許不同類的對(duì)象對(duì)同一消息作出響應(yīng)。多態(tài)性包括參數(shù)化多態(tài)性和包含多態(tài)性。多態(tài)性語(yǔ)言具有靈活、抽象、行為共享、代碼共享的優(yōu)勢(shì),很好的解決了應(yīng)用程序函數(shù)同名問(wèn)題。

  二、String是最基本的數(shù)據(jù)類型嗎?

  基本數(shù)據(jù)類型包括byte、int、char、long、float、double、boolean和short. java.lang.String類是final類型的,因此不可以繼承這個(gè)類、不能修改這個(gè)類。為了提高效率節(jié)省空間,我們應(yīng)該用 StringBuffer類。

  三、int 和 Integer 有什么區(qū)別?

  Java 提供兩種不同的類型:引用類型和原始類型(或內(nèi)置類型)。int是Java的原始數(shù)據(jù)類型,Integer是Java為int提供的封裝類。Java為每個(gè)原始類型提供了封裝類。

  引用類型和原始類型的行為完全不同,并且它們具有不同的語(yǔ)義。引用類型和原始類型具有不同的特征和用法,它們包括:大小和速度問(wèn)題,這種類型以哪種類型的數(shù)據(jù)結(jié)構(gòu)存儲(chǔ),當(dāng)引用類型和原始類型用作某個(gè)類的實(shí)例數(shù)據(jù)時(shí)所指定的缺省值。對(duì)象引用實(shí)例變量的缺省值為 null,而原始類型實(shí)例變量的缺省值與它們的類型有關(guān)。

  四、String 和StringBuffer的區(qū)別?

  Java平臺(tái)提供了兩個(gè)類:String和StringBuffer,它們可以儲(chǔ)存和操作字符串,即包含多個(gè)字符的字符數(shù)據(jù)。這個(gè)String類提供了數(shù)值不可改變的字符串。而這個(gè)StringBuffer類提供的字符串進(jìn)行修改。當(dāng)你知道字符數(shù)據(jù)要改變的時(shí)候你就可以使用StringBuffer.典型地,你可以使用StringBuffer來(lái)動(dòng)態(tài)構(gòu)造字符數(shù)據(jù)。

  五、運(yùn)行時(shí)異常與一般異常有何異同?

  異常表示程序運(yùn)行過(guò)程中可能出現(xiàn)的非正常狀態(tài),運(yùn)行時(shí)異常表示虛擬機(jī)的通常操作中可能遇到的異常,是一種常見(jiàn)運(yùn)行錯(cuò)誤。Java編譯器要求方法必須聲明拋出可能發(fā)生的非運(yùn)行時(shí)異常,但是并不要求必須聲明拋出未被捕獲的運(yùn)行時(shí)異常。

  六、說(shuō)出Servlet的生命周期,并說(shuō)出Servlet和CGI的區(qū)別。

  Servlet被服務(wù)器實(shí)例化后,容器運(yùn)行其init方法,請(qǐng)求到達(dá)時(shí)運(yùn)行其service方法,service方法自動(dòng)派遣運(yùn)行與請(qǐng)求對(duì)應(yīng)的doXXX方法(doGet,doPost)等,當(dāng)服務(wù)器決定將實(shí)例銷毀的時(shí)候調(diào)用其destroy方法。

  與CGI的區(qū)別在于Servlet處于服務(wù)器進(jìn)程中,它通過(guò)多線程方式運(yùn)行其service方法,一個(gè)實(shí)例可以服務(wù)于多個(gè)請(qǐng)求,并且其實(shí)例一般不會(huì)銷毀,而CGI對(duì)每個(gè)請(qǐng)求都產(chǎn)生新的進(jìn)程,服務(wù)完成后就銷毀,所以效率上低于CGI.

  七、說(shuō)出ArrayList,Vector, LinkedList的存儲(chǔ)性能和特性

  ArrayList和Vector都是使用數(shù)組方式存儲(chǔ)數(shù)據(jù),此數(shù)組元素?cái)?shù)大于實(shí)際存儲(chǔ)的數(shù)據(jù)以便增加和插入元素,它們都允許直接按序號(hào)索引元素,但是插入元素要涉及數(shù)組元素移動(dòng)等內(nèi)存操作,所以索引數(shù)據(jù)快而插入數(shù)據(jù)慢,Vector由于使用了synchronized方法(線程安全),通常性能上較ArrayList差,而LinkedList使用雙向鏈表實(shí)現(xiàn)存儲(chǔ),按序號(hào)索引數(shù)據(jù)需要進(jìn)行前向或后向遍歷,但是插入數(shù)據(jù)時(shí)只需要記錄本項(xiàng)的前后項(xiàng)即可,所以插入速度較快。

  八、EJB是基于哪些技術(shù)實(shí)現(xiàn)的?并說(shuō)出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)用程序中被用來(lái)完成一些服務(wù)器端的業(yè)務(wù)操作,例如訪問(wèn)數(shù)據(jù)庫(kù)、調(diào)用其他EJB組件。EntityBean被用來(lái)代表應(yīng)用系統(tǒng)中用到的數(shù)據(jù)。

  對(duì)于客戶機(jī),SessionBean是一種非持久性對(duì)象,它實(shí)現(xiàn)某些在服務(wù)器上運(yùn)行的業(yè)務(wù)邏輯。

  對(duì)于客戶機(jī),EntityBean是一種持久性對(duì)象,它代表一個(gè)存儲(chǔ)在持久性存儲(chǔ)器中的實(shí)體的對(duì)象視圖,或是一個(gè)由現(xiàn)有企業(yè)應(yīng)用程序?qū)崿F(xiàn)的實(shí)體。

  九、Collection 和 Collections的區(qū)別。

  Collection是集合類的上級(jí)接口,繼承與他的接口主要有Set 和List.

  Collections是針對(duì)集合類的一個(gè)幫助類,他提供一系列靜態(tài)方法實(shí)現(xiàn)對(duì)各種集合的搜索、排序、線程安全化等操作。

  十、&和&&的區(qū)別。

  &是位運(yùn)算符,表示按位與運(yùn)算,&&是邏輯運(yùn)算符,表示邏輯與(and)。

  JAVA筆試題目及答案7

  一、單項(xiàng)選擇題(共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存取數(shù)據(jù)庫(kù)能力的包是。( 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. 下面的語(yǔ)句中正確的表達(dá)式為。( 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ì)出現(xiàn)異常 C.0 D.3

  9. 以下程序代碼執(zhí)行后,哪個(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è)類是swt包中的。( D )

  A.MessageBox B.MessageDialog C.JDialog D.DisplayMode

  二、多項(xiàng)選擇題(共5題,每題4分,共20分)

  1. 在下面的選項(xiàng)中合法的標(biāo)識(shí)符有。( ADEF )

  A._ok

  B.*point

  C.this

  D.$byte

  E.const

  F.ILikeJLCSS

  2. 下面的選項(xiàng)中哪些不是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í)編譯數(shù)個(gè)Java源文件。

  D. javac.exe能指定編譯結(jié)果要置于哪個(gè)目錄(directory)。

  4. 下面的敘述中正確的有。( C )

  A.equals()方法判定引用值是否指向同一對(duì)象。

  B.= = 操作符判定兩個(gè)分立的對(duì)象的內(nèi)容和類型是否一致。

  C.equals()方法只有在兩個(gè)對(duì)象的內(nèi)容一致時(shí)返回true。

  D.類File重寫(xiě)方法equals()在兩個(gè)分立的對(duì)象的內(nèi)容和類型一致時(shí)返回true。

  5. 下面有關(guān)變量及其作用域的陳述哪些是對(duì)的。( A C )

  A. 在方法里面定義的局部變量在方法退出的時(shí)候被撤銷。

  B. 局部變量也叫自動(dòng)變量。

  C. 在方法外面定義的變量(譯注:即實(shí)例變量)在對(duì)象被構(gòu)造時(shí)創(chuàng)建。

  D. 在方法中定義的方法的參變量只要該對(duì)象被需要就一直存在。

  三、簡(jiǎn)答題(共7題,共40分)

  1. 請(qǐng)寫(xiě)出一個(gè)輸出“Hello World!” 的程序。(3分)

  答:public Class Hello World

  {

  Public static void main(String[]args)

  {

  System.out.println(“HELLO WOTLD”);

  }

  }

  2. char型變量中能不能存貯一個(gè)中文漢字? 為什么? (3分)

  答:能存儲(chǔ)一個(gè)漢字;因?yàn)樗艽鎯?chǔ)四個(gè)字節(jié)而每個(gè)漢字只占兩個(gè)字節(jié)。

  3. 常見(jiàn)的兩種xml解析技術(shù)是什么? 區(qū)別是什么? (4分)

  答:常見(jiàn)的兩種有:SAX和DOM。

  區(qū)別:SAX 是一種事件驅(qū)動(dòng)的xml解析方式。每次訪問(wèn)一個(gè)xml文件中的某個(gè)節(jié)點(diǎn)的時(shí)候,sax就會(huì)搜索一遍xml文件,在找到相應(yīng)的節(jié)點(diǎn)后就會(huì)觸發(fā)一個(gè)事件來(lái)處理請(qǐng)求。只讀

  DOM是一種基于樹(shù)狀的查找方式。DOM會(huì)將xml解析成一棵樹(shù),存在內(nèi)存中。開(kāi)發(fā)者可以通過(guò)查找樹(shù)的節(jié)點(diǎn)來(lái)取得文件的內(nèi)容或者修改內(nèi)容。可讀寫(xiě)

  4. MVC是什么,如何實(shí)現(xiàn)? (5分)

  答:MVC是一個(gè)是一個(gè)設(shè)計(jì)模式,它強(qiáng)制性的使應(yīng)用程序的輸入,處理和輸出分開(kāi)。使用MVC應(yīng)用程序被分為三個(gè)核心部件:M----------MODO模型,V ----------VIEW 試圖,C --------- Contral控制

  實(shí)現(xiàn):首先有頁(yè)面(jsp)發(fā)送請(qǐng)求給控制器(servlet),然后由控制器接收用戶的請(qǐng)求,并決定應(yīng)該調(diào)用哪個(gè)模型(javabean)來(lái)進(jìn)行處理,然后模型用業(yè)務(wù)邏輯來(lái)處理用戶的請(qǐng)求并返回?cái)?shù)據(jù),最后控制器用相應(yīng)的視圖格式化模型返回的數(shù)據(jù),并通過(guò)表示層顯示給用戶。

  5. .J2EE是什么?(6分)

  答:J2EE 是Sun公司提出的多層(multi-diered),分布式(distributed),基于組件(component-base)的企業(yè)級(jí)應(yīng)用模型 (enterpriese application model).在這樣的一個(gè)應(yīng)用系統(tǒng)中,可按照功能劃分為不同的組件,這些組件又可在不同計(jì)算機(jī)上,并且處于相應(yīng)的層次(tier)中。所屬層次包括客戶層(clietn tier)組件,web層和組件,Business層和組件,企業(yè)信息系統(tǒng)(EIS)層。

  6. jsp有哪些內(nèi)置對(duì)象?作用分別是什么? (9分)

  答:1.request 用戶端請(qǐng)求,此請(qǐng)求會(huì)包含來(lái)自GET/POST請(qǐng)求的參數(shù);2.response 網(wǎng)頁(yè)傳回用戶端的回應(yīng);3.pageContext 網(wǎng)頁(yè)的屬性是在這里管理;4.session 與請(qǐng)求有關(guān)的會(huì)話期;5.application servlet 正在執(zhí)行的內(nèi)容;6.out 用來(lái)傳送回應(yīng)的輸出;7.config servlet的構(gòu)架部件;8.page JSP網(wǎng)頁(yè)本身;9.exception 針對(duì)錯(cuò)誤網(wǎng)頁(yè),未捕捉的例外

  7. 作用域public,private,protected,以及不寫(xiě)時(shí)的區(qū)別 ?(10分)

  答:作用域 當(dāng)前類 同一package 子孫類 其他package

  public √ √ √ √

  protected √ √ √ ×

  friendly √ √ × ×

  private √ × × ×

  不寫(xiě)時(shí)默認(rèn)為friendly

  四、編碼及論述題(共2題,每題10分,共20分)

  1. 什么是Singleton,它的作用是什么,它有幾種形式?請(qǐng)用代碼寫(xiě)出一個(gè)Singleton類。

  答:Java Singleton 模式用來(lái)保證在運(yùn)行的應(yīng)用程序中,一個(gè)Class只是實(shí)例化一次,也就是只有一個(gè)相應(yīng)的對(duì)象存在。

  它有三種形式

  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基礎(chǔ)筆試題及答案03-03

2016年Java筆試題及答案03-12

2017年Java筆試題及答案03-09

2016年Java認(rèn)證筆試題及答案03-03

2016最新Java認(rèn)證筆試題及答案01-21

最新中興Java語(yǔ)言筆試真題及答案03-07

Java中級(jí)開(kāi)發(fā)工程師筆試題及答案201603-04

2016年J2EE筆試題目及答案03-17

java習(xí)題及答案03-26