還記得程式設計師的我們面試時,背的Java葵花寶典麼?

weixin_34253539發表於2018-11-27

Q51如何限制一個類不被繼承?

Ans:使用關鍵字Final。

在下面的例子中,Stone類就不能被繼承了。

11299194-e41bf113c4bda17b

Q52訪問說明符的訪問範圍是什麼?

Ans:

11299194-af4741927c14aa10

Q53棧和佇列之間有什麼區別?

Ans:棧和佇列之間的主要區別在於,棧基於“後進先出(LIFO)”原則,而佇列基於FIFO(先進先出)原則。

Q54Java中,我們如何禁止序列化變數?

Ans:想要某些變數不被序列化,那麼可以在宣告時使用關鍵字transient。例如,下面的變數trans_var是一個臨時變數,不能被序列化:

小編也是一名從事了6年java開發的全棧工程師,花了近一個月整理了一份較適合18年學習的java乾貨,送給每一位學習java小夥伴,加java學習qq群領取:818464711

11299194-421baaf6b7ec630c

Q55我們如何使用原始資料型別作為物件?

Ans:Java提倡“一切皆為物件”,引用資料型別可以例項化為物件,基本資料型別卻無法變為物件,針對這一不足,JAVA中設定了包裝類,例如,Integer是原始資料型別int的包裝類。

Q56編譯時會遇到哪些型別的異常?

Ans:程式編譯時可以捕獲被檢查的異常,為了成功編譯程式碼,異常會通過try...catch來處理。

Q57請描述一下執行緒的不同狀態。

Ans:Java中的執行緒往往是處於下面的某一種狀態

NEW:通過New關鍵字建立了Thread類(或其子類)的物件

RUNNABLE:這種情況指的是Thread類的物件呼叫了start()方法,執行緒處於就緒狀態。

RUNNING:執行緒獲得了CPU,處於執行狀態。

DEAD:處於RUNNING狀態的執行緒,在執行完run方法之後,就變成了DEAD狀態了。

BLOCKED:這種狀態指的是處於RUNNING狀態的執行緒,出於某種原因,比如呼叫了sleep方法、等待使用者輸入等而讓出當前的CPU給其他的執行緒。

Q58定義了類的顯式建構函式之後,還可以使用預設建構函式嗎?

Ans:如果沒有定義顯式建構函式,那麼Java將提供一個預設的無引數建構函式,但是如果定義了顯式建構函式之後,就不能再呼叫預設建構函式。

Q59可以有兩個方法,它們方法名和引數都相同,但返回值型別不同?

Ans:相同的方法指的是方法名、引數以及返回型別都相同,因此返回型別不同的兩個方法是可以並存的。

Q60以下程式碼的輸出是什麼?

Ans:輸出為4

11299194-da18d4adfa0a142c

Q61在沒有執行main()的情況下,成功編譯了一個Java類,這一說法正確嗎?

Ans:正確,雖然Java編譯器規定程式的入口點為staticmain,但是沒有main()還是能夠編譯,只是不能執行。

Q62我們可以在靜態方法中呼叫非靜態方法?

Ans:非靜態方法歸類的物件所有,且具有物件的級別範圍,所以如果想要在靜態方法中呼叫非靜態方法,首先要建立類的物件,然後使用物件引用,呼叫這些方法。

Q63為了執行Java程式,必須設定兩個環境變數是什麼?

Ans:PATH變數和CLASSPATH變數。

Q64 Java中變數沒有初始化可以使用嗎?

Ans:Java不會給變數分配預設值,因此變數沒有初始化的情況下,程式會編譯失敗並給出錯誤提示。

Q65 Java中的類可以繼承多個類嗎?

Ans:Java不支援多重繼承。

Q66 Java中,建構函式可以與類名不同嗎?

Ans:不可以,Java的建構函式必須與類名相同,如果不同,它將被視作普通函式。

Q67 Round(3.7)Ceil(3.7)的輸出分別是什麼?

Ans:它們的輸出都是4。Round()遵循四捨五入,Ceil()遵循向上舍入。

Q68 Java中可以使用goto來轉到特定行嗎?

Ans:不可以,Java中沒有goto關鍵字。

Q69已經死亡的執行緒可以再次啟動嗎?

Ans:不可以。

Q70以下類的宣告是否正確?

Ans:不正確,抽象類不能被宣告為Final。

11299194-ec029a3f7edecb4d

Q71每個機器都需要JDK來執行Java程式?

Ans:JDK是Java的開發工具包,不是必需的,JRE才是必需的。

Q72 Equals()==有什麼區別?

Ans:Java中,==操作比較的是兩個變數的值是否相等,對於引用型變數表示的是兩個變數在堆中儲存的地址是否相同,即棧中的內容是否相同。equals操作表示的兩個變數是否是對同一個物件的引用,即堆中的內容是否相同

下例中,equals()返回true,而==操作符則返回false:

11299194-743860c679df9bac

Q73 Java類中定義方法,可否使用其他語言程式碼實現,如C語言?

Ans:可以,在基於原生開發的情況下,我們可以在Java類中定義公共靜態方法,但是不執行,然後用另外一種語言(如C)實現。

Q74如何在Java中定義解構函式?

Ans:Java類中沒必要定義解構函式,它有自己的垃圾回收機制,當不再引用物件時,會自動執行。

Q75 Java中變數可以既是區域性變數又是靜態變數嗎?

Ans:不能,將區域性變數定義為靜態變數會導致編譯錯誤。

Q76 Interface中可以有靜態方法嗎?

Ans:Interface中的靜態方法是沒有意義的,靜態方法在類中不能被覆蓋,而Interface中的方法預設都是抽象的,所以只能在實現Interface的類中實現。

Q77在實現介面的類中,我們可以更改介面中定義的變數的值嗎?

Ans:不能,介面中定義的變數大多都預設是public、static和final等不可更改的常量。

Q78 Java中的垃圾回收機制能夠確保程式永遠不會超出記憶體?

Ans:即使Java提供自動垃圾回收,也不能確保程式不會超出記憶體,因為與垃圾回收相比,Java物件的建立速度更快。

Q79 main()能否有除void之外的返回型別?

Ans:不可以,main()必須返回值為void,程式才能成功執行。

Q80垃圾回收之後,還能否重新觸發並使用該物件?

Ans:不能,一旦物件被回收之後,就不再存在於堆疊上,也就不能再次訪問和引用了。

Q81Java執行緒程式設計中,哪個方法是所有執行緒必須實現的?

Ans:Run()是一個Runnable介面的方法,必須由所有執行緒實現。

Q82如何在程式中控制資料庫連線,且每次只有一個執行緒可以進行資料庫連線?

Ans:應用同步的概念來實現,將資料庫相關程式碼hs synchronized關鍵字的方法中,以便一次只有一個執行緒可以訪問它。

Q83程式設計師手動丟擲異常怎麼辦?

Ans:為了處理手動丟擲的異常,我們可以使用throw關鍵字,並在catch中捕獲和處理異常。

11299194-c898e723e0604f16

Q84如何實現一個類不允許其他類(甚至派生類)建立其物件?

Ans:將該類的建構函式宣告為private,那麼它就不會被其他類訪問。

Q85物件如何儲存在Java?

Ans:每個物件在建立時都會從堆疊中獲取記憶體空間,被垃圾回收器銷燬之後,其空間將被釋放重新分配給其它物件。

Q86如何確定堆疊上物件的實際大小?

Ans:Java中,沒辦法確定物件的確切大小。

Q87以下哪個類將分配更多的記憶體?

A類:三種方法,四個變數,無物件

B類:五個方法,三個變數,無物件

Ans:在建立物件之前,不會分配記憶體,所以這兩個類都沒有分配記憶體。

Q88如果程式中沒有處理異常,會發生什麼?

Ans:如果沒有異常處理,那麼程式將中止,且不會執行異常丟擲之後的語句。

Q89如果定義了一個類定義了多個建構函式,那麼是否可以在一個建構函式中呼叫另一個建構函式?

Ans:如果一個類有多個建構函式,那麼可以使用this()在一個建構函式中呼叫另一個建構函式。

Q90什麼是匿名類?

Ans:匿名類是不能有名字的類,它們不能被引用,只能在建立時用New語句來宣告它們。

下例中,我們定義了一個匿名類:

11299194-a4f41f888a700623

Q91陣列宣告之後是否還可以改變其大小?

Ans:陣列是靜態的,一旦指定了大小,就不能改變。

Q92應用程式中有多個類,但只有一個main()可以嗎?

Ans:可以,main()方法是Java應用程式的入口方法,程式碼總是從特定類的main方法開始。

Q93如果我想要保留物件的資料以供以後使用,最好的做法是什麼?

Ans:使用序列化。

Q94什麼是區域性類?

Ans:如果我們在Java的特定塊中定義一個新類,那麼這個類就被稱為區域性類,它在區域性範圍內可用,在其定義的塊之外不可用。

Q95 StringStringBuffer都表示String物件,這兩個物件之間可以互相比較嗎?

Ans:不可以。

Q96 Java提供了哪些API用於集合類的操作?

Ans:Java提供了Collection API,可應用於一組物件的,Collection API支援的重要類包括

ArrayList,HashMap,TreeSet和TreeMap。

Q97 Java的型別轉換可以將所有其他類轉換為布林型別嗎?

Ans:不可以,其它原始型別不能轉換為布林型別,布林型別也不能轉換為其它原始資料型別。

Q98方法的重寫允許返回型別不同嗎?

Ans:方法的重寫要求子類的方法的名稱及引數必須和所覆蓋的方法相同,返回型別可以不同但必須是所覆蓋方法的子類。

11299194-809e670a0e5b8210

Q99所有異常類的基類是什麼?

Ans:Java.Lang.throwable。

Q100建構函式在繼承中的呼叫順序是什麼?

Ans:在繼承的情況下,建立派生類的新物件時,首先呼叫父類的建構函式,然後呼叫派生類的建構函式。

相關文章