當前位置:學問君>人在職場>面試問題>

java面試問題

學問君 人氣:1.96W

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