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