每天五個java相關面試題(9)--java基礎詳解篇1
接下來會系統的總結java基礎,然後過兩天會開始從新開始複習前端並更新和總結一些關於前端的基礎知識和麵試題,嗯嗯我是一個想走前端的後端java工程師啊哈哈。馬上開學大四了,lz我要加油啦~
接下來的面試題會學習我們班小夥伴的好學習方法,一個個刨根問底了,理清楚裡面涉及到的知識點。
一、面向物件的特徵有哪些方面
答:
1.抽象:
抽象就是忽略一個主題中與當前目標無關的那些方面,以便更充分地注意與當前目標有關的方面。抽象並不打算了解全部問題,而只是選擇其中的一部分,暫時不用部分細節。抽象包括兩個方面,一是過程抽象,二是資料抽象。
2.繼承:
繼承是一種聯結類的層次模型,並且允許和鼓勵類的重用,它提供了一種明確表述共性的方法。物件的一個新類可以從現有的類中派生,這個過程稱為類繼承。新類繼承了原始類的特性,新類稱為原始類的派生類(子類),而原始類稱為新類的基類(父類)。派生類可以從它的基類那裡繼承方法和例項變數,並且類可以修改或增加新的方法使之更適合特殊的需要。
3.封裝:
封裝是把過程和資料包圍起來,對資料的訪問只能通過已定義的介面。面向物件計算始於這個基本概念,即現實世界可以被描繪成一系列完全自治、封裝的物件,這些物件通過一個受保護的介面訪問其他物件。
4.多型性:
多型性是指允許不同類的物件對同一訊息作出響應。多型性包括引數化多型性和包含多型性。多型性語言具有靈活、抽象、行為共享、程式碼共享的優勢,很好的解決了應用程式函式同名問題。(靜態多型是方法過載,動態多型是方法重寫)
上面回答中涉及的知識點:
1、封裝具體就是三步:第一步是設定物件屬性私有化,第二步是建立賦值和取值方法(就是我們常說的get/set方法),第三步在賦值和取值方法中,加入對屬性的存取限制(俗稱校驗)。
2、繼承父類一定需要實現父類的方法嘛?
如果父類是抽象類,並且有抽象方法,那麼子類必須重寫父類的抽象方法,或者子類宣告為抽象類。如果父類是個普通類,那麼不是必須重寫父類的方法。
3、何為抽象類?
使用了關鍵詞abstract宣告的類叫作“抽象類”。如果一個類裡包含了一個或多個抽象方法,類就必須指定成abstract(抽象)。“抽象方法”,屬於一種不完整的方法,只含有一個宣告,沒有方法主體。(類似於介面)。
4、在繼承的時候我們有時候需要重寫父類的方法,那麼重寫和過載的區別是什麼?
重寫的方法名,引數數目相同,引數型別相容,過載的方法名相同,引數列表不同。
重寫的方法修飾符大於等於父類的方法,過載和修飾符無關。
這裡希望大家知道一個詞語方法簽名
二、Collection 和 Collections的區別。
答:
Collection是集合類的上級介面,繼承與他的介面主要有Set 和List.
Collections是針對集合類的一個幫助類,他提供一系列靜態方法實現對各種集合的搜尋、排序、執行緒安全化等操作。
上面回答中涉及的知識點:
1、Collection介面在Java 類庫中有有哪些具體的實現?
java.util.Collection 是一個集合介面。Collection介面在Java 類庫中有很多具體的實現。Collection介面的意義是為各種具體的集合提供了最大化的統一操作方式。
Collection
├List
│├LinkedList
│├ArrayList
│└Vector
│ └Stack
└Set
2、java.util.Collections 是一個包裝類。它包含有各種有關集合操作的靜態多型方法。此類不能例項化,就像一個工具類,內部封裝了很多對各種集合的搜尋、排序、執行緒安全化等操作,比如對一個list陣列內的值進行排序,只需要Collections.sort(list); 即可。
三、String 、StringBuilder、Stringbu和StringBuffer的區別
答:
String和StringBuffer和StringBuilder,它們可以儲存和操作字串,即包含多個字元的字元資料。這個String類提供了數值不可改變的字串。而這個StringBuffer類提供的字串進行修改。當你知道字元資料要改變的時候你就可以使用StringBuffer。典型地,你可以使用 StringBuffers來動態構造字元資料。StringBuffer和StringBuilder類功能基本相似,主要區別在於StringBuffer類的方法是多執行緒、安全的,而StringBuilder不是執行緒安全的,相比而言,StringBuilder類會略微快一點。
上面回答中涉及的知識點:
1、什麼是執行緒安全?
執行緒安全就是多執行緒訪問時,採用了加鎖機制,當一個執行緒訪問該類的某個資料時,進行保護,其他執行緒不能進行訪問直到該執行緒讀取完,其他執行緒才可使用。不會出現資料不一致或者資料汙染。
四、執行時異常與一般異常有何異同?
答:
Java提供了兩類主要的異常:runtime exception (執行時異常)和checked exception (檢查異常)。檢查異常也就是我們經常遇到的IO異常,以及SQL異常都是這種異常。對於這種異常,JAVA編譯器強制要求我們必需對出現的這些異常進行catch。
但是另外一種異常:執行時異常,我們可以不處理。當出現這樣的異常時,總是由虛擬機器接管。我們不需要進行捕獲。
上面回答中涉及的知識點:
1、說出你常見的五種異常?
這個題我們老師說很容易被問到,所有大家可以挑選幾個自己記下來,我這裡也自己挑選幾個了。
- java.lang.nullpointerexception(”空指標異常”)
- java.lang.classnotfoundexception(”指定的類不存在”,這裡主要考慮一下類的名稱和路徑是否正確即可)
- java.lang.arithmeticexception(”數學運算異常”,比如程式中出現了除以零這樣的運算就會出這樣的異常)
- java.lang.arrayindexoutofboundsexception(”陣列下標越界”)
- java.lang.illegalargumentexception(”方法的引數錯誤”)
五、ArrayList,Vector為什麼增、刪慢,查、改快?而LinkedList查、改、慢,增、刪快?
答:
ArrayList 和Vector都是使用陣列方式儲存資料,此陣列元素數大於實際儲存的資料以便增加和插入元素,它們都允許直接按序號索引元素,但是插入元素要涉及陣列元素移動等記憶體操作,所以索引資料快而插入資料慢。
而LinkedList使用雙向連結串列實現儲存,按序號索引資料需要進行前向或後向遍歷,但是插入資料時只需要記錄本項的前後項即可,所以插入速度較快。