查文庫>試題> 不能錯過的關於面向物件的java筆試題

不能錯過的面向物件的java筆試題

不能錯過的關於面向物件的java筆試題

  Java是一門面向物件的程式語言,不僅吸收了C++語言的各種優點,還摒棄了C++裡難以理解的多繼承、指標等概念,因此Java語言具有功能強大和簡單易用兩個特徵。以下是小編整理的不能錯過的關於面向物件的java筆試題,歡迎檢視。

  不能錯過的面向物件的java筆試題 篇1

  1)Java 中能建立 Volatile 陣列嗎?

  能,Java 中可以建立 volatile 型別陣列,不過只是一個指向陣列的引用,而不是整個陣列。我的意思是,如果改變引用指向的陣列,將會受到 volatile 的保護,但是如果多個執行緒同時改變陣列的元素,volatile 標示符就不能起到之前的保護作用了。

  2)volatile 能使得一個非原子操作變成原子操作嗎?

  一個典型的例子是在類中有一個 long 型別的成員變數。如果你知道該成員變數會被多個執行緒訪問,如計數器、價格等,你最好是將其設定為 volatile。為什麼?因為 Java 中讀取 long 型別變數不是原子的,需要分成兩步,如果一個執行緒正在修改該 long 變數的值,另一個執行緒可能只能看到該值的一半(前 32 位)。但是對一個 volatile 型的 long 或 double 變數的讀寫是原子。

  3)volatile 修飾符的有過什麼實踐?

  一種實踐是用 volatile 修飾 long 和 double 變數,使其能按原子型別來讀寫。double 和 long 都是64位寬,因此對這兩種型別的讀是分為兩部分的,第一次讀取第一個 32 位,然後再讀剩下的 32 位,這個過程不是原子的,但 Java 中 volatile 型的 long 或 double 變數的讀寫是原子的。volatile 修復符的另一個作用是提供記憶體屏障(memory barrier),例如在分散式框架中的應用。簡單的說,就是當你寫一個 volatile 變數之前,Java 記憶體模型會插入一個寫屏障(write barrier),讀一個 volatile 變數之前,會插入一個讀屏障(read barrier)。意思就是說,在你寫一個 volatile 域時,能保證任何執行緒都能看到你寫的值,同時,在寫之前,也能保證任何數值的更新對所有執行緒是可見的,因為記憶體屏障會將其他所有寫的值更新到快取。

  4)volatile 型別變數提供什麼保證?(答案)

  volatile 變數提供順序和可見性保證,例如,JVM 或者 JIT為了獲得更好的效能會對語句重排序,但是 volatile 型別變數即使在沒有同步塊的情況下賦值也不會與其他語句重排序。 volatile 提供 happens-before 的保證,確保一個執行緒的修改能對其他執行緒是可見的。某些情況下,volatile 還能提供原子性,如讀 64 位資料型別,像 long 和 double 都不是原子的,但 volatile 型別的 double 和 long 就是原子的。

  5) 10 個執行緒和 2 個執行緒的同步程式碼,哪個更容易寫?

  從寫程式碼的角度來說,兩者的複雜度是相同的,因為同步程式碼與執行緒數量是相互獨立的。但是同步策略的選擇依賴於執行緒的數量,因為越多的執行緒意味著更大的競爭,所以你需要利用同步技術,如鎖分離,這要求更復雜的程式碼和專業知識。

  6)你是如何呼叫 wait方法的?使用 if 塊還是迴圈?為什麼?(答案)

  wait方法應該在迴圈呼叫,因為當執行緒獲取到 CPU 開始執行的時候,其他條件可能還沒有滿足,所以在處理前,迴圈檢測條件是否滿足會更好。下面是一段標準的使用 wait 和 notify 方法的程式碼:

  The standard idiom for using the wait method

  參見 Effective Java 第 69 條,獲取更多關於為什麼應該在迴圈中來呼叫 wait 方法的內容。

  不能錯過的'面向物件的java筆試題 篇2

  一、選擇題:(每題3分,共20題)

  1. 下面關於類的說法錯誤的一項是( )。

  A、類屬於Java語言中的複合資料型別 中的基本結構單位

  C、類是同種物件的集合和抽象

  2. 如下所示程式碼:

  public class Test05_01{ }

  private float a;

  public static void m ( ){ }

  D、類就是物件 B、物件是Java語言

  如何使成員變數a被方法m( )訪問( )。

  A、將private float a改為public float a

  B、將private float a改為static float a

  C、將private float a改為protected float a

  D、將private float a改為float a

  3. 下面關於類的說法有誤的一項是( )。

  A、類就是物件 抽象

  C、類屬於Java語言中的複合資料型別 中的基本結構單位

  D、物件是Java語言

  B、類是同種物件的集合和

  關於Java面向物件的考試題。

  4. 下列哪種類成員修飾符修飾的變數只能在本類中被訪問( )。

  A、protected

  B、default

  C、private

  D、public

  5. 下面關於方法的說法不正確的一項是( )。

  A、類的私有方法不能被其他類直接訪問。

  B、Java中的構造方法名必須和類名相同。

  C、方法體是對方法的實現,包括變數宣告和合法語句。

  D、如果一個類定義了構造方法,也可以用該類的預設構造方法。

  6. 下列程式的執行結果是( )。

  public class Test05_02 extends x{ }

  B、編譯錯誤

  D、執行成功,但不輸出

  int ab(){ }

  public static void main(String[] args) { }

  Test05_02 b = new Test05_02 (); b.ab(); static int a = 10; a++;

  System.out.println(a);

  A、10 C、11

  關於Java面向物件的考試題。

  7. 下面關於構造方法的描述有誤的一項是( )。

  A、構造方法必須要有返回型別的宣告。

  B、構造方法和類中的方法很相似:有訪問修飾符、方法名、引數列表、方法體。

  C、構造方法當成是一個特殊的方法,這個方法的作用就是用來產生一個類的例項。

  D、構造方法的方法名必須和類名完全相同。

  8. 下列關於物件的說法錯誤的一項是( )。

  A、物件成員是指一個物件所擁有的屬性或可以呼叫的方法。

  B、由類生成物件,稱為類的例項化過程,一個例項可以是多個物件。

  C、在建立類的物件時,需要使用Java的new關鍵字。

  D、在Java中要引用物件的屬性和方法,需要使用“.”運算子來實現。

  9. 類的方法可以不包含下面哪一項( )。

  A、方法的引數 C、方法的名稱

  B、方法的主體 D、方法的返回值型別

  10. 下面關於變數說法錯誤的一項是( )。

  A、對於成員變數,我們可以不需要手動的顯式初始化,因為系統在建立一個新的物件的時候,會給這些成員變數賦一個初值。

  B、對於引用變數,它的預設初值是null而非相應的引用型別物件,也就是說,它並不是指向任何物件的首地址。

  關於Java面向物件的考試題。

  C、系統會對全域性(成員)變數指定預設的值,也會對區域性變數賦值。

  D、區域性變數在使用之前,必須對其進行顯式初始化。

  11. 下面的各種資料型別的預設初始化值表示錯誤的一項是( )。

  A、int是0

  B、float 是0.0

  C、char 是‘u0000’

  D、boolean是false

  12. 下面哪一項不是Java的訪問控制符( )。

  A、public

  B、private

  C、void

  D、protected

  13. Java語言類間的繼承關係和介面間的繼承關係分別是( )。

  A、單繼承、不能繼承

  C、多重繼承、單繼承

  B、多重繼承、不能繼承

  D、單繼承、多重繼承

  14. 如果區域性變數和成員變數同名,如何在區域性變數作用域內引用成

  員變數( )。

  A、不影響,系統可以自己區分

  B、不能引用,必須改名,使它們的名稱不相同

  C、在成員變數前加this,使用this訪問該成員變數

  D、在成員變數前加super,使用super訪問該成員變數

  15. 下列關於內部類說法錯誤的一項是( )。

  A、內部類可用private或protected修飾符修飾

  B、內部類不能有自己的成員方法和成員變數

  C、除static內部類外,不能在類內宣告static成員

  D、內部類可以作為其他類的成員,而且可訪問它所在的類的成員

  16. 定義外部類時不能用到的關鍵字是( )。

  A、public

  B、abstract

  C、protected

  D、final

  17. 下面說法不正確的一項是( )。

  A、abstract和final能同時修飾一個類

  B、抽象類既可以做父類,也可以做子類

  C、宣告為final型別的方法不能在其子類中重新定義

  D、抽象類中可以沒有抽象方法,有抽象方法的類一定是抽象類或介面

  18. 有一個類B,下面為其構造方法的宣告,正確的是( )。

  A、void b(int x) {} C、B(int x) {}

  B、void B(int x) {}

  D、b(int x) {}

  19. 區分類中過載方法的依據是( )。

  A、不同的形參名稱

  B、返回值的型別不同

  D、訪問許可權不同

  C、形參列表的型別和順序

  20. 下面說法錯誤的一項是( )。

  A、在Java中,為了節省建立物件的時間和空間,對於一些常用的方法,會將它在記憶體中快取起來。

  B、在JDK中針對各種基本資料型別分別定義相應的引用型別,稱之為封裝類(Wrapper Classes)。

  C、JDK5.0中,引入了自動裝箱/拆箱功能,可以讓我們方便的在簡單型別和對應的封裝型別資料之間轉換。