常问面试题总结(JAVA基础篇)
【面試題】 byte、short、int型的數據和char型數據做運算,結果是什么類型?
byte 、char 、short --> int --> long --> float --> double
特別的:當byte、char、short三種類型的變量做運算時,結果都是int型。
【面試題】 你能否寫出最高效的2 * 8的實現方式?
答案:2 << 3 或 8 << 1
【面試題】 方法的重載和重寫的區別:
重載:“兩同一不同”,同一個類同一個方法名,不同的形參列表。從編譯和運行的角度看,這些同名的方法成了不同的方法.它們的調用地址在編譯器就綁定了.所以對于重載而言,在方法調用前,編譯器就知道了所要調用的方法.這稱為"靜態綁定".
重寫:“兩同一小一大一子” ,
方法名和形參列表必須相同(相同后編譯器就會認為子類想重寫父類的方法)
子類重寫的方法的權限大于或等于父類的權限(子類不能重寫private方法)
子類重寫的方法的返回值必須和父類的返回值一致或其子類
子類重寫父類的方法的異常小于等于父類拋出的異常.
而對于多態而言,只有等到調用方法的那一刻,編譯器才知道所要調用哪個具體方法,這稱為"動態綁定".其中父類和子類的方法都不能是static方法,同名同參的static方法不認為是重寫.
【面試題】 方法參數的值傳遞機制:
如果方法的形參是基本數據類型,那么實參傳遞給形參的就是“數據值”,在該方法中操作這個形參不影響傳遞進來的那個數據;
如果方法的形參是引用數據類型,那么實參傳遞給形參的就是“地址值”,在該方法中操作這個形參就會影響傳遞進來的那個數據;
【面試題】 四種權限修飾符的作用范圍?(private、缺省、protected、public)
private:同一個類中可見 缺省:同一個包中可見 protected:不同包的子類可見 public:整個項目中都可見
其中,四種權限修飾符都可以修飾類的內部結構(屬性、方法、構造器、內部類);但是修飾類的class只能使用public 和 缺省。
【面試題】 屬性賦值的先后順序(①默認初始化值,②顯示初始化值,③構造器中,④set中,⑤代碼塊中賦值):
① === > ② / ⑤ 誰在上面誰先 === > ③ === > ④
【面試題】 main方法里面的輸出語句和靜態代碼塊里面的輸出語句誰先輸出?
靜態代碼塊里的先輸出,因為main方法本身是一個方法,也需要通過類去調用,類必須得先加載到內存中,而類加載的同時靜態代碼塊已經執行,main方法還需要類去進一步調用才會執行.
【面試題】 為什么繼承了父類之后,子類就會得到父類的屬性和方法?
因為我們通過子類的構造器創建子類對象時,我們一定會直接或者間接的加載他所有父類的構造器,直到調用了Object類的空參構造器為止.正因為加載了所有的父類的構造器,所有才能在內存中看到父類的結構,子類對象才可以考慮進行調用.
【面試題】 多態的應用舉例:
①很多方法(如equals() )形參為Object類型,如果沒有多態,把子類進行填充那將毫無意義
②Java連接數據庫時只對外暴漏了簡單的接口java.sql.Driver,但真正連接的時候并不知道要連哪個數據庫,因此需要有多態性,使數據庫廠商去實現java的接口,實例化時得到的連接對象是哪個數據庫的,就調用哪個數據庫的結構.
【面試題】 多態性并不適用與屬性:
子類繼承父類后,如果定義了和父類同名的屬性,則對父類進行了屬性的隱藏,而子類定義和父類同名同參的方法后,是對父類的方法進行了重寫;在多態的情況下,父類調用同名方法時會調用子類重寫的方法,而調用同名屬性時只會調用自己的屬性.
【面試題】 對于多態而言,這個對象實際是什么類型的?
實際上這個對象的類型為new之后的類型,但是因為聲明的是父類,所以只能看見父類的結構和子類重寫父類后的方法.
【面試題】談談你對多態性的理解?
① 實現代碼的通用性。
② Object類中定義的public boolean equals(Object obj){ }
JDBC:使用java程序操作(獲取數據庫連接、CRUD)數據庫(MySQL、Oracle、DB2、SQL Server)
③抽象類、接口的使用肯定體現了多態性。(抽象類、接口不能實例化)
【面試題】 ==和equals()的區別:
==:只要使用等等,那么就是比較的地址值. 沒重寫equals之前,==和equals()一致,比較引用數據類型時比較的都是地址值. 重寫equals()后,比較的就是兩個對象的屬性值是否都相等.
【面試題】 包裝類和string的相互轉換:
包裝類 === > string : 調用String類的靜態方法valueOf();
String === > 包裝類 :調用包裝類的靜態方法parseXxx();
【面試題】 數組屬于類嗎?也繼承于Object嗎?
是的,數組.getClass()后可以看出數組的類型是"[+數據類型" ,
另外數組可以直接賦值給形參為Object類型的方法,繼承于Object類.
【面試題】 餓漢式單例模式和懶漢式單例模式的區別?
餓漢式:線程安全,但是對象加載時間過長.
懶漢式:線程不安全,但是對象延時加載,不會浪費內存.
【面試題】 final關鍵字可以修飾什么?分別代表什么?
可以修飾類,方法,變量;修飾類代表該類不可被繼承;修飾方法代表該方法不可被重寫;修飾屬性代表該屬性是一個常量,可以對該屬性賦值的位置有①顯示初始化②構造器中初始化③代碼塊中初始化;修飾局部變量代表該變量是一個常量,一旦賦值后就只能在該方法體內使用該常量,但不能再修改.
【面試題】 native關鍵字修飾方法時代表什么?
native關鍵字修飾的方法一般沒有方法體,調用該方法時會去底層調用本地的c或c++代碼去完成對應的功能,一般隱藏了不對外開放.
【面試題】 static方法可以被重寫嗎?
不行,父類和子類定義同名同參的方法時,編譯器會認為這是兩個方法,不認為是重寫.
【面試題】 接口和抽象類的區別:
相同點:不能實例化;都可以包含抽象方法的。
不同點:接口:jdk7之前:接口里面只能定義全局常量和抽象方法;jdk8之后接口里面可以定義靜態方法和默認方法.抽象類里面既能寫抽象方法又能寫非抽象方法.
接口中不能定義構造器,抽象類可以 接口多繼承,抽象類單繼承
【面試題】abstract關鍵字可以修飾什么,不能修飾什么?
1.abstract可以修飾類、非私有方法、非靜態方法、非final方法
2.abstract不能用來屬性、構造器、私有方法、靜態方法、final的方法、final的類
【面試題】 throw 和 throws區別:
throw 表示拋出一個異常類的對象,生成異常對象的過程。聲明在方法體內。 throws 屬于異常處理的一種方式,聲明在方法的聲明處。
【面試題】如何看待代碼中的編譯時異常和運行時異常?
體會1:使用try-catch-finally處理編譯時異常,是得程序在編譯時就不再報錯,但是運行時仍可能報錯。相當于我們使用try-catch-finally將一個編譯時可能出現的異常,延遲到運行時出現。
體會2:開發中,由于運行時異常比較常見,所以我們通常就不針對運行時異常編寫try-catch-finally了。針對于編譯時異常,我們說一定要考慮異常的處理。
【面試題】final關鍵字的作用?
1.可以用來修飾:類、方法、變量
2.final 用來修飾一個類:此類不能被其他類所繼承。 比如:String類、System類、StringBuffer類
3.final 用來修飾方法:表明此方法不可以被重寫 比如:Object類中getClass();
4.final 用來修飾變量:此時的"變量"就稱為是一個常量 final修飾屬性:可以考慮賦值的位置:顯式初始化、代碼塊中初始化、構造器中初始化 final修飾局部變量:
尤其是使用final修飾形參時,表明此形參是一個常量。當我們調用此方法時,給常量形參賦一個實參。一旦賦值以后,就只能在方法體內使用此形參,但不能進行重新賦值。
static final 用來修飾屬性:全局常量
總結
以上是生活随笔為你收集整理的常问面试题总结(JAVA基础篇)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Liunx安装JDK,tomcat,my
- 下一篇: nodejs常用指令