java面試問題

才智咖 人氣:1.94W

JAVA常見面試題

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)機制嗎?(瞬聯)

開放性和原因連線(causally-connected)是反射系統的兩大基本要素

4)在java中怎樣實現多執行緒?(瞬聯)

extends Thread

implement Runnable

方法一:繼承 Thread 類,覆蓋方法 run(),我們在建立的 Thread 類的子類中重寫 run() ,加入執行緒所要執行的程式碼即可。下面是一個例子:

public class MyThread extends Thread

{

int count= 1, number;

public MyThread(int num)

{

number = num;

tln

("建立執行緒 " + number);

}

public void run() {

while(true) {

tln

TAGS:Java 面試