JAVA經典面試題及參考答案
1、作用域public,private,protected,以及不寫時的區別
答:區別如下:
作用域 當前類 同一package 子孫類 其他package
public √ √ √ √
protected √ √ √ ×
friendly √ √ × ×
private √ × × ×
不寫時預設為friendly
2、ArrayList和Vector的區別,HashMap和Hashtable的區別
答:就ArrayList與Vector主要從二方面來說.
一.同步性:Vector是執行緒安全的,也就是說是同步的,而ArrayList是執行緒序不安全的,不是同步的
二.資料增長:當需要增長時,Vector預設增長為原來一培,而ArrayList卻是原來的一半
就HashMap與HashTable主要從三方面來說。
一.歷史原因:Hashtable是基於陳舊的Dictionary類的,HashMap是Java 1.2引進的Map介面的一個實現
二.同步性:Hashtable是執行緒安全的,也就是說是同步的,而HashMap是執行緒序不安全的,不是同步的
三.值:只有HashMap可以讓你將空值作為一個表的條目的key或value
3、char型變數中能不能存貯一箇中文漢字?為什麼?
答:是能夠定義成為一箇中文的,因為java中以unicode編碼,一個char佔16個位元組,所以放一箇中文是沒問題的
4、多執行緒有幾種實現方法,都是什麼?同步有幾種實現方法,都是什麼?
答:多執行緒有兩種實現方法,分別是繼承Thread類與實現Runnable介面
同步的實現方面有兩種,分別是synchronized,wait與notify
JAVA經典面試題及參考答案
1)transient和volatile是java關鍵字嗎?(瞬聯)
如果用transient宣告一個例項變數,當物件儲存時,它的值不需要維持。例如:
class T
{
transient int a; //不需要維持
int b; //需要維持
}
這裡,如果T類的一個物件寫入一個持久的儲存區域,a的內容不被儲存,但b的將被儲存。
volatile修飾符告訴編譯器被volatile修飾的變數可以被程式的其他部分改變。在多執行緒程式中,有時兩個或更多的執行緒共享一個相同的例項變數。考慮效率問題,每個執行緒可以自己儲存該共享變數的私有拷貝。實際的變數副本在不同的時候更新,如當進入synchronized方法時。 用strictfp修飾類或方法,可以確保浮點運算(以及所有切斷)正如早期的Java版本那樣準確。切斷隻影響某些操作的指數。當一個類被strictfp修飾,所有的方法自動被strictfp修飾。
strictfp的意思是FP-strict,也就是說精確浮點的意思。在Java虛擬機器進行浮點運算時,如果沒有指定strictfp關鍵字時,Java的編譯器以及執行環境在對浮點運算的表示式是採取一種近似於我行我素的行為來完成這些操作,以致於得到的結果往往無法令你滿意。而一旦使用了strictfp來宣告一個類、介面或者方法時,那麼所宣告的範圍內Java的編譯器以及執行環境會完全依照浮點規範IEEE-754來執行。因此如果你想讓你的浮點運算更加精確,而且不會因為不同的硬體平臺所執行的結果不一致的話,那就請用關鍵字strictfp。
你可以將一個類、介面以及方法宣告為strictfp,但是不允許對介面中的方法以及建構函式宣告strictfp關鍵字,例如下面的程式碼:
strictfp interface A {}
public strictfp class FpDemo1 {
strictfp void f() {}
}
2. 錯誤的使用方法
interface A {
strictfp void f();
}
public class FpDemo2 {
strictfp FpDemo2() {}
}
一旦使用了關鍵字strictfp來宣告某個類、介面或者方法時,那麼在這個關鍵字所宣告的範圍內所有浮點運算都是精確的,符合IEEE-754規範
的。例如一個類被宣告為strictfp,那麼該類中所有的方法都是strictfp的。
2)抽象類和介面有什麼區別?(瞬聯)
ract class 在 Java 語言中表示的是一種繼承關係,一個類只能使用一次繼承關係。但是,一個類卻可以實現多個interface。
2.在abstract class 中可以有自己的資料成員,也可以有非abstarct的成員方法,而在interface中,只能夠有靜態的不能被修改的資料成員(也就是必須是static final的,不過在 interface中一般不定義資料成員),所有的成員方法都是abstract的。
ract class和interface所反映出的設計理念不同。其實abstract class表示的是"is-a"關係,interface表示的是"like-a"關係。
4.實現抽象類和介面的類必須實現其中的所有方法。抽象類中可以有非抽象方法。介面中則不能有實現方法。
5.介面中定義的變數預設是public static final 型,且必須給其初值,所以實現類中不能重新定義,也不能改變其值。
6.抽象類中的`變數預設是 friendly 型,其值可以在子類中重新定義,也可以重新賦值。
7.介面中的方法預設都是 public,abstract 型別的。
3)能說一下java的反射(reflection)機制嗎?(瞬聯)