1. 程式人生 > >Java日常刷題第十二天,錯題練習

Java日常刷題第十二天,錯題練習

選擇題 1。在某個類A中存在一個方法:void set(int x),以下不能作為這個方法的過載的宣告的是(A) A.void set(int y) B.int set(int x,double y) C.double set(int x,int y) D.void set(int x,int y) 解析:方法過載:方法名稱相同,引數列表不同(可以是引數的型別,個數,順序不同) 2.已知如下類定義:

class Base { public Base (){ //… } public Base ( int m ){ //… } public void fun( int n ){ //… } } public class Child extends Base{ // member methods } 如下哪句可以正確地加入子類中?(D) A.private void fun( int n ){ //…} B.void fun ( int n ){ //… } C.protected void fun ( int n ) { //… } D.public void fun ( int n ) { //… } 解析:方法的重寫(override)兩同兩小一大原則: 方法名相同,引數型別相同 子類返回型別小於等於父類方法返回型別, 子類丟擲異常小於等於父類方法丟擲異常, 子類訪問許可權大於等於父類方法訪問許可權。 3.下面程式碼的輸出結果是什麼?(D)

public class ZeroTest { public static void main(String[] args) { try{ int i = 100 / 0; System.out.print(i); }catch(Exception e){ System.out.print(1); throw new RuntimeException(); }finally{ System.out.print(2); } System.out.print(3); } } A. 3 B.123 C.1 D.12 解析:還是需要理解Try…catch…finally與直接throw的區別:try catch是直接處理,處理完成之後程式繼續往下執行,throw則是將異常拋給它的上一級處理,程式便不往下執行了。本題的catch語句塊裡面,列印完1之後,又丟擲了一個RuntimeException,程式並沒有處理它,而是直接丟擲,因此執行完finally語句塊之後,程式終止了 如果catch中沒有丟擲RuntimeException,則執行結果為123。 4.一個以“.java”為字尾的原始檔(C) A。只能包含一個public類,類名必須與檔名相同 B.只能包含與檔名相同的public類以及其中的內部類 C.只能有一個與檔名相同的public類,可以包含其他非public類(不考慮內部類) D.可以包含任意public類 解析:內部類是可以public修飾的,所以不只有一個public類 5.在jdk 1.7中,以下說法正確的是( A )。 A.Java中所有的非抽象方法都必須在類內定義 B.Java中主方法可以不在類內定義,其他方法都必須定義在類內 C.Java中主方法必須定義在類內,其他方法可以不必定義在類內 D.Java中所有方法都不必在類內定義 解析:

Java是純粹的面嚮物件語言,所有的方法都必須存在於類中。類才有封裝,繼承,多型的特性。 在一些非純粹的面嚮物件語言中,如PHP,定義的方法是可以脫離類而單獨存在的。 <?php function a(){ echo “hello world”; } a(); > 6.容器panel預設使用的佈局編輯策略是( B) A.Border Layout B.Flow Layout C.GridLayout D.Card Layout 解析:GUI PANEL 容器以及佈局管理器 Panel是AWT中的另一個典型的容器,它代表不能獨立存在、必須放在其他容器中使用。 1、可作為容器來盛裝其他元件,為放置元件提供空間。 2、不能單獨存在,必須放置到其他容器當中。 3、預設使用FlowLayout作為佈局管理器。 7.面向物件的三個基本元素是什麼?(ABD) A封裝 B繼承 C過載 D多型 解析:三個基本元素:封裝,繼承,多型。 五個基本原則:單一職責原則,開放封閉原則,里氏替換原則,依賴倒置原則,介面隔離原則 8.不能用來修飾interface的有(ACD )(僅限外部介面) A.private B.public C.protected D.static 9:下列有關JAVA異常處理的敘述中正確的是(ABD) A.finally是為確保一段程式碼不管是否捕獲異常都會被執行的一段程式碼 B.throws是用來宣告一個成員方法可能丟擲的各種非執行異常情況 C.final用於可以宣告屬性和方法,分別表示屬性的不可變及方法的不可繼承 D.throw是用來明確地丟擲一個異常情況 解析:throws用於在方法上宣告該方法不需要處理的異常型別,用在方法上後面跟異常類名 可以是多個異常類 throw用於丟擲具體異常類的物件,用在方法內 後面跟異常物件只能是一個異常型別實體. try塊必須和catch塊或和finally同在,不能單獨存在,二者必須出現一個. finally塊總會執行,不論是否有錯誤出現.但是若try語句塊或會執行的catch語句塊使用了JVM系統退出語句,finally塊就不會被執行了. 一般我們把關閉資源的程式碼放在finally裡面 保證資源總是能關閉 然後再看這一題 A肯定對了,C根本就跟異常處理沒有關係,所以不選。就算有關係也錯了

final用於宣告屬性、方法、類。分別表示屬性不可更改、方法不能被覆蓋、類不能被繼承。

所以C選項說方法不能被繼承錯誤,是不能覆蓋

B、D咬文嚼字說是因為

B. throws是用來宣告一個成員方法可能丟擲的各種異常情況. 10.下面幾個關於Java裡queue的說法哪些是正確的(AC)? A.LinkedBlockingQueue是一個可選有界佇列,不允許null值 B.PriorityQueue,LinkedBlockingQueue都是執行緒不安全的 C.PriorityQueue是一個無界佇列,不允許null值,入隊和出隊的時間複雜度是O(log(n)) D.PriorityQueue,ConcurrentLinkedQueue都遵循FIFO原則 解析:1、LinkedBlockingQueue:基於連結節點的可選限定的blocking queue 。 這個佇列排列元素FIFO(先進先出)。 佇列的頭部是佇列中最長的元素。 佇列的尾部是佇列中最短時間的元素。 新元素插入佇列的尾部,佇列檢索操作獲取佇列頭部的元素。 連結佇列通常具有比基於陣列的佇列更高的吞吐量,但在大多數併發應用程式中的可預測效能較低。 blocking queue說明:不接受null元素;可能是容量有限的;實現被設計為主要用於生產者 - 消費者佇列;不支援任何型別的“關閉”或“關閉”操作,表示不再新增專案實現是執行緒安全的;

2、PriorityQueue: 2.1、基於優先順序堆的無限優先順序queue 。 優先順序佇列的元素根據它們的有序natural ordering ,或由一個Comparator在佇列構造的時候提供,這取決於所使用的構造方法。 優先佇列不允許null元素。 依靠自然排序的優先順序佇列也不允許插入不可比較的物件(這樣做可能導致ClassCastException )。 2.2、該佇列的頭部是相對於指定順序的最小元素。 如果多個元素被繫結到最小值,那麼頭就是這些元素之一 - 關係被任意破壞。 佇列檢索操作poll , remove , peek和element訪問在佇列的頭部的元件。 2.3、優先順序佇列是無限制的,但是具有管理用於在佇列上儲存元素的陣列的大小的內部容量 。 它始終至少與佇列大小一樣大。 當元素被新增到優先順序佇列中時,其容量會自動增長。 沒有規定增長政策的細節。 2.4、該類及其迭代器實現Collection和Iterator介面的所有可選方法。 方法iterator()中提供的迭代器不能保證以任何特定順序遍歷優先順序佇列的元素。 如果需要有序遍歷,請考慮使用Arrays.sort(pq.toArray()) 。 2.5、請注意,此實現不同步。 如果任何執行緒修改佇列,多執行緒不應同時訪問PriorityQueue例項。 而是使用執行緒安全的PriorityBlockingQueue類。 實現注意事項:此實現提供了O(log(n))的時間入隊和出隊方法( offer , poll , remove()和add ); remove(Object)和contains(Object)方法的線性時間; 和恆定時間檢索方法( peek , element和size )。

3、ConcurrentLinkedQueue:基於連結節點的無界併發deque(deque是雙端佇列) 。 併發插入,刪除和訪問操作可以跨多個執行緒安全執行。 A ConcurrentLinkedDeque是許多執行緒將共享對公共集合的訪問的適當選擇。像大多數其他併發集合實現一樣,此類不允許使用null元素。