Java面試題【1】
Java面試題總結
2022-05-20
1)Java有沒有goto?
goto是C語言中的,通常與條件語句配合使用,可用來實現條件轉移, 構成迴圈,跳出迴圈體等功能。Java保留了這個關鍵字但是沒有使用。
2)&和&&的區別?
&和&&都表示邏輯與的關係,同真則真,有假則假。
&&具有短路的功能,即如果第一個表示式為 false,則不再計算第二個表示式。if(x == 33 & ++y>0) y 會增長,if(x ==33 && ++y>0) 不會增長
& 是按位與運算子。當&操作符兩邊的表示式不是 boolean 型別時,&表示按位與操作。
3)靜態變數和例項變數的區別?
在語法定義上的區別:靜態變數前要加 static 關鍵字,而例項變數前則不加。
在程式執行時的區別:例項變數屬於某個物件的屬性,必須建立了例項物件,其中的例項變數才會被分配空間,才能使用這個例項變數。靜態變數不屬於某個例項物件,而是屬於類,所以也稱為類變數,只要程式載入了類的位元組碼,不用建立任何例項物件,靜態變數就會被分配空間, 靜態變數就可以被使用了。
4)是否可以從一個 static 方法內部發出對非 static 方法的呼叫?
不可以。因為非 static 方法是要與物件關聯在一起的,必須建立一個物件後,才可以在該物件上進行方法呼叫,而 static 方法呼叫時不需要建立物件,可以直接呼叫。也就是說,當一個 static 方法被呼叫時,可能還沒有建立任何例項物件,如果從一個 static 方法中發出對非 static 方法的呼叫,那個非 static 方法是關聯到哪個物件上的呢?
5)Math類的三個取整方法
Math 類中提供了三個與取整有關的方法:ceil、floor、round,這些方法的作用與它們的英文名稱的含義相對應,例如,ceil 的英文意義是天花板,該方法就表示向上取整,Math.ceil(11.3) 的結果為 12,Math.ceil(-11.3)的結果是-11;floor 的英文意義是地板,該方法就表示向下取整, Math.ceil(11.6)的結果為 11,Math.ceil(-11.6)的結果是-12;最難掌握的是round 方法,它表示“四捨五入”,演算法為Math.floor(x+0.5),即將原來的數字加上0.5 後再向下取整,所以,Math.round(11.5)的結果為 12,Math.round(-11.5)的結果為-11。
6)請說出作用域 public,private,protected,以及不寫時的區別(不寫是friendly)
7)Overload 和 Override 的區別。
- 重寫 Override 表示子類中的方法可以與父類中的某個方法的名稱和引數完全相同,通過子類建立的例項物件呼叫這個方法時,將呼叫子類中的定義方法,這相當於把父類中定義的那個完全相同的方法給覆蓋了,這也是面向物件程式設計的多型性的一種表現。
- 在使用過載時只能通過不同的引數樣式。例如,不同的引數型別,不同的引數個數,不同的引數順序(當然,同一方法內的幾個引數型別必須不一樣,例如可以是 fun(int,float),但是不能為 fun(int,int))
- 被覆蓋和被過載的方法都不能是private。
8)構造器 Constructor 是否可被 override?
構造器 Constructor 不能被繼承,因此不能重寫 Override,但可以被過載 Overload。
9)面向物件的特徵有哪些方面?
面向物件的程式語言有封裝、繼承 、抽象、多型等 4 個主要的特徵。
封裝:實現軟體部件的“高內聚、低耦合”,防止程式相互依賴性而帶來的變動影響。在面向物件的程式語言中,物件是封裝的最基本單位,把對同一事物進行操作的方法和相關的方法放在同一個類中,把方法和它操作的資料放在同一個類中。私有的屬性,公有的方法。
例子:面向物件的封裝性,即將物件封裝成一個高度自治和相對封閉的個體,物件狀態(屬性)由這個物件自己的行為(方法)來讀取和改變。一個更便於理解的例子就是,司機將火車剎住了,剎車的動作是分配給司機,還是分配給火車,顯然,應該分配給火車,因為司機自身是不可能有那麼大的力氣將一個火車給停下來的,只有火車自己才能完成這一動作,火車需要呼叫內部的離合器和剎車片等多個器件協作才能完成剎車這個動作,司機剎車的過程只是給火車發了一個訊息,通知火車要執行剎車動作而已。
抽象:抽象就是找出一些事物的相似和共性之處,然後將這些事物歸為一個類,這個類只考慮這些事物的相似和共性之處,並且會忽略與當前主題和目標無關的那些方面,將注意力集中在與當前目標有關的方面。
繼承:在定義和實現一個類的時候,可以在一個已經存在的類的基礎之上來進行,把這個已經存在的類所定義的內容作為自己的內容,並可以加入若干新的內容,或修改原來的方法使之更適合特殊的需要,這就是繼承。繼承是子類自動共享父類資料和方法的機制,這是類之間的一種關係, 提高了軟體的可重用性和可擴充套件性。
多型:多型是指程式中定義的引用變數所指向的具體型別和通過該引用變數發出的方法呼叫在程式設計時並不確定,而是在程式執行期間才確定,即一個引用變數到底會指向哪個類的例項物件,該引用變數發出的方法呼叫到底是哪個類中實現的方法,必須在由程式執行期間才能決定。
10)Java中實現多型的機制是什麼?
父類或介面定義的引用變數可以指向子類或具體實現類的例項物件,而程式呼叫的方法在執行期才動態繫結,就是引用變數所指向的具體例項物件的方法,也就是記憶體里正在執行的那個物件的方法,而不是引用變數的型別中定義的方法。