1. 首頁
  2. 面試

java面試題的題目及答案

java面試題的題目及答案

1.java異常機制的原理與應用

答:每當程式出現異常之後,如果程式沒有進行相應的處理,則程式會出現中斷現象。

實際上,產生了異常之後,JVM會丟擲一個異常類的例項化物件,如果此時使用了try語句捕獲的話,則可以進行異常的處理,否則,交給JVM進行處理。當try語句捕獲異常之後,將與catch語句的異常型別進行匹配,如果匹配成功則執行catch內的語句。簡單的應用:在所以throws語句的地方加入try-catch。標準應用:try-catch-finally-throw-throws一起使用。

2. 垃圾回收機制的優點

答:釋放無用的物件所佔用的空間。方式:自動回收,手動回收。使用System.gc(),實際上呼叫Runtime.getRuntime().gc()

3. Error與Exception區別

答:Error是jvm進行處理,是jvm出錯

exception是可以由程式處理的,可以用try-catch捕獲的

4. final,finally,finallize

答:final定義的變數的值不能改變,定義的方法不能被覆蓋,定義的類不能被繼承

finally是異常的統一出口,finallize是垃圾回收前的收尾工作,是Object類定義的

5. Anonymous Inner Class是否可以extends,是否可以implements Interface

答:允許繼承和實現,因為匿名內部類就是在抽象類和介面的基礎上發展起來的

6. Static Nested Class 與Inner Class的區別

答:使用Static定義的Class就是外部類,可以透過外部類. 內部類直接訪問

而Inner Class是不能被外部訪問的,只能透過外部類的例項再找到內部類例項。

7. HashMap and HashTable?

答:HashMap:1) released in jdk 1.2,new Class 2)採用非同步處理方式,效能較高,是非執行緒安全的 3)允許null

HashTable:1)released in jdk 1.0 ,old Class 2)採用同步處理方式,效能低,是執行緒安全的3)不允許null

8. assert代表什麼?

答:asserts是jdk 1.4之後釋出的新關鍵字,表示斷言,即程式執行到某個地方肯定是預計的值,一般開發很少使用。要使用assert,必須加上 -ea引數

9. gc是什麼?

答:gc是garbage collection,垃圾回收,使用gc可以進行垃圾空間的釋放

10. String s = new String("xyz")產生了幾個物件?

答:一個匿名物件xyz,在棧空間內。一個new例項化的物件,在堆空間內。

11. sleep() and wait()?

答:sleep()是Thread類定義方法,表示執行緒的休眠,可以自動喚醒

wait()方法是Object類定義的方法,需要手動notify()和notifyAll()//sleep()不釋放資源,wait()釋放資源

12. java中存在goto,但不能使用

13.陣列有沒有length(),String有沒有length()?

答:陣列有length屬性,String有length()

14. Overload與Override的區別

答:Overload:過載

|- 在一個類中定義的若干方法

|- 所有的方法名相同,但引數型別或個數不同

|- 只有引數有關,與返回型別無關

Override:覆寫

|- 在繼承的關係中

|- 子類定義了父類同名的方法,引數型別或個數最好完全一樣。

|- 訪問許可權不能更嚴格

15. Set裡的元素不能重複,用什麼方法區分?==與equals()方法的區別

答:set裡的元素是不能重複的,用iterator()方法來區分重複與否,==屬於地址比較,

==用於比較引用和比較基本資料型別時具有不同的功能:

比較基本資料型別,如果兩個值相同,則結果為true

而在比較引用時,如果引用指向記憶體中的同一物件,結果為true

16. 列出常見的 runtime exception

答:NumberFormatException/ArrayOutIndexofBoundException/NullPointerException/ClassCastException

17. abstract class 和 interface有什麼區別?

答:抽象類:

|-由抽象方法和常量、變數、全域性常量、構造方法、普通方法組成

|-使用abstract宣告

|-子類要透過extends繼承抽象類,子類如果不是抽象類,則必須覆寫抽象類的全部抽象方法

|-存在單繼承的侷限

|-抽象類可以實現若干個介面

介面:

|-由抽象方法和全域性常量組成

|-使用interface關鍵字

|-子類要透過implements實現介面,子類如果不是抽象類,則必須覆寫抽象類的全部抽象方法

|-一個子類可以實現多個介面

|-介面不能繼承一個抽象類,但允許繼承多個介面

18. 啟動一個執行緒要用start(),因為要通知jvm進行cpu資源的分配

19. try{}裡面有一個return,問finally{}裡面的程式碼是否執行,在什麼時機執行?

答:finally{}裡面的程式碼執行,在return之前。

20. 寫一個singleton

答:singleton的核心就是構造方法私有化,Class,Runtime都採用單例

package com.leongod.demo;

public class Singleton(){

private static final sin = new Singleton();

private Singleton(){}

public static Singleton getInstance(){

return sin;

}

}

21. 程式設計:輸入一組數字,然後排序輸出

答:package com.leongod.demo;

import java.io.BufferedReader;

import java.io.InputStreamReader;

import java.util.Iterator;

import java.util.Set;

import java.util.TreeSet;

public class IO {

public static void main(String[] args) throws Exception {

BufferedReader buf = new BufferedReader(new InputStreamReader(System.in));

System.out.println("請輸入一組數字,中間用空格分割:");

String str = buf.readLine();

Set set = new TreeSet();

String[] arr = str.split(" ");

for(String s : arr) {

if (s.matches("\d+")) {

set.add(Integer.parseInt(s));

}

}

Iterator it = set.iterator();

System.out.println("排序後的結果:");

while (it.hasNext()) {

System.out.print(it.next() + ",");

}

}

}

22.列出目錄內的檔案

package com.leongod.demo;

import java.io.File;

import com.sun.org.apache.xpath.internal.functions.FuncBoolean;

public class FileDemo {

public static void main(String[] args) {

?? File file = new File("D:" + File.separator + "kongkong");

?? fun(file);

}

public static void fun(File file) {

if (file.isDirectory()) {

File[] lf = file.listFiles();

if (lf != null) {

for(File f : lf) {

fun(f);

}

}

}else {

System.out.println(file.toString());

}

}

}

23. char可以存一箇中文漢字嗎?

答:可以,使用了unicode編碼

24.多執行緒有幾種實現方法,都是什麼?同步有幾種實現方法,都是什麼?

答:兩種多執行緒方法,繼承Thread類,實現Runnable介面

|-Thread類是Runnable介面的子類

|-使用Runnable介面可以實現資源共享的.目的

|-所有執行緒操作都必須透過Thread類的start()方法啟動

兩種實現同步的方法:

|-同步程式碼塊:Synchronized(this)

|-同步方法

25.f=3.4是不對的,3.4預設是double型別的

26.String and StringBuffer?

答:String 不可以修改,StringBuffer可以修改

27.Class.forname向容器中載入驅動程式

28.int與Integer有什麼區別?

答:int是基本資料型別,Integer是包裝類

在jdk1.5以後,可以實現自動裝箱和拆箱

29.2*8有效的方法是移位操作:2<<3

30.請說出類集框架的完整結構

答:類級框架的最大介面:Collection、Map、Iterator、Enumeration

Collection:存放單值

|-List:允許有重複內容

|-ArrayList:非同步處理,新的操作類,非執行緒安全

|-Vector:同步處理,舊的操作類,執行緒安全,支援Enumeration

|-Set:不允許有重複的內容,依靠hashCode()和equals()進行重複的驗證

|-HashSet:無序存放

|-TreeSet:有序存放,按Comparable排序

|-Map:存放一對值

|-HashMap:新的類,非同步處理,非執行緒安全,允許有null

|-HashTable:舊的類,同步處理,執行緒安全,不允許有null

|-TreeMap:有序排列,按key配需

|-Iterator:迭代輸出,依靠collection介面中的iterator方法輸出,是新的輸出標準

31.是否可以繼承String類?答:不可以,因為使用了final關鍵字