面试 -- Java基础(一)
1.面向?qū)ο蟮奶卣鳌?/strong>
答:面向?qū)ο蟮奶卣饔谐橄蟆⒗^承、封裝、多態(tài)
- 抽象: 將一類對象的公共特征總結(jié)出來構(gòu)造類的過程,包括數(shù)據(jù)抽象和行為抽象。抽象只關(guān)注對象有哪些行為和屬性,不關(guān)注這些行為的細節(jié)是什么。
- 繼承: 從已有類中得到繼承信息并創(chuàng)建新類的過程。提供繼承信息的類是父類,得到繼承信息的類是子類。繼承使得軟件系統(tǒng)有了一定的延續(xù)性。
- 封裝: 把數(shù)據(jù)和操作數(shù)據(jù)的行為綁定在一起,對數(shù)據(jù)的訪問只提供一個自定義的接口。類、方法都是對數(shù)據(jù)的封裝。封裝要隱藏一切能隱藏的細節(jié),只向外界提供一個簡單的接口。
- 多態(tài): 允許不同子類型的對象對同一消息作出不同的響應(yīng)。簡單說就是用同樣的對象引用調(diào)用同樣的方法做了不同的事情。多態(tài)分為編譯時的多態(tài)和運行時的多態(tài)。重載是編譯時的多態(tài),重寫是運行時的多態(tài)。
2.重載和重寫的區(qū)別。
答:overload為重載,override為重寫。重載是編譯時的多態(tài),重寫是運行時的多態(tài),重載發(fā)生在同一個類之間,表示在一個類中定義了相同名字、但是參數(shù)列表(參數(shù)個數(shù)或者參數(shù)類型)不同的方法而表現(xiàn)出不同的行為,重載可以改變返回值的類型;重寫發(fā)生在父子類之間,表示子類通過改寫與父類相同名字的方法來表現(xiàn)出不同的行為,子類重寫的方法拋出的異常必須比父類的小,訪問權(quán)限必須不比父類的小,參數(shù)列表必須相同。
?
3.JDK、JRE和JVM的區(qū)別。
答:程序員利用JDK開發(fā)了Java程序后,通過JDK中編譯工具將Java程序編譯成字節(jié)碼,然后在JRE上運行這些字節(jié)碼,JVM解析字節(jié)碼并映射給CPU指令或者系統(tǒng)調(diào)用。
JDK: Java開發(fā)工具包,是整個Java的核心,包括JRE和編譯器、調(diào)試器等Java工具。
JRE: Java運行時環(huán)境,也就是常說的Java平臺,所有Java程序都要在JRE上才能運行,包括了JVM和Java核心類庫、支持文件,與JDK相比,不包括編譯器等開發(fā)工具。
JVM: Java虛擬機,是JRE的一部分,是虛構(gòu)出來的計算機,通過在計算機上仿真模擬各種計算機功能來實現(xiàn)的。主要工作是解釋字節(jié)碼并映射到本地的CPU指令集或者系統(tǒng)的調(diào)用中。不同的操作系統(tǒng),使用不同的JVM映射規(guī)則,使得Java代碼與操作系統(tǒng)無關(guān),實現(xiàn)跨平臺性。
4.Java的基本數(shù)據(jù)類型及其包裝類。
答:Java的基本數(shù)據(jù)類型有:char、short、byte、int、float、long、double、boolean;
對應(yīng)的包裝類:Character、Short、Byte、Integer、Float、Long、Double、Boolean;
由基本數(shù)據(jù)類型轉(zhuǎn)換成對應(yīng)的包裝類的過程稱為裝箱;
由包裝類轉(zhuǎn)換成對應(yīng)的基本數(shù)據(jù)類型的過程稱為拆箱;
?
5.String、StringBuilder和StringBuffer的區(qū)別。
答:String、StringBuilder和StringBuffer均可以用來存儲和操作字符串,但是,String是final類,是只讀字符串,也就是String引用的字符串不能被修改;而StringBuilder和StringBuffer引用的字符串都已被修改,StringBuilder和StringBuffer的區(qū)別是StringBuffer是線程安全的,方法被synchronized修飾,可以用在多線程環(huán)境中,效率比StringBuilder低。當(dāng)引用的字符串在字符串常量池中已經(jīng)存在時,使用"+"連接的字符串比使用StringBuilder和StringBuffer的append()方法快。
?
6.抽象類和接口的區(qū)別。
答:
(1)抽象類中有構(gòu)造方法,而接口中沒有;
(2)抽象類只能單繼承,接口可以多繼承;
(3)抽象類可以有普通方法,接口中所有方法都是抽象方法;
(4)接口中的屬性都是public static fianl的,而抽象類中不是。
?
7.static關(guān)鍵字有什么作用。
答:static可以修飾內(nèi)部類、方法、變量、代碼塊。
static修飾的類是靜態(tài)內(nèi)部類;
static修飾的方法是靜態(tài)方法,表示該方法屬于類的方法,不屬于任何一個對象。靜態(tài)方法不能被重寫,可以直接使用類名來調(diào)用,并且不能使用this或者super來調(diào)用。
static修飾變量叫靜態(tài)變量或全局變量,靜態(tài)變量被所有實例對象共享,不被任何一個對象所獨有。靜態(tài)變量在內(nèi)存中只有一份拷貝,在類加載的時候,只為其分配一次內(nèi)存。
static修飾的代碼塊叫靜態(tài)代碼塊,用于程序優(yōu)化。靜態(tài)代碼塊在整個類中只會加載一次,靜態(tài)代碼塊可以有多個,有多個時,按出現(xiàn)的先后順序執(zhí)行。
?
8.final關(guān)鍵字的作用。
答:final關(guān)鍵字可以修飾類、方法或者變量。
修飾類時,表示該類不能被繼承;
修飾方法時,表示該方法不能被重寫;
修飾變量時,表示該變量一次賦值后不能被修改;
?
9.為什么重寫equals方法的同時也要重寫hashcode方法?
答:我們知道,hashcode方法是調(diào)用native方法根據(jù)對象在內(nèi)存中的實際地址值來計算出的一個哈希碼值,所以要判斷一個對象是否相等,要么值和地址都相等,要么全部都不相等,所以說要重寫的時候應(yīng)該都重寫,否則可能導(dǎo)致相同對象的值或者地址的哈希碼值不相等,這樣會對使用散列表的數(shù)據(jù)結(jié)構(gòu)的數(shù)據(jù)類型產(chǎn)生影響,如hashmap、hashtable、hashset等。
如HashMap,如果hashCode和equals不同時相等,
當(dāng)兩個對象的key相同,hashCode相等時,能找到具體下標,但兩個對象equals方法不相等,,即值不相等,所以取不出對象;
當(dāng)兩個對象的key相同,hashCode不相等時,能找到具體不同的下標,這時equals相等也沒用了,因為下標沒找對。
?
--------最近沒空,有空再繼續(xù)寫了-----------
總結(jié)
以上是生活随笔為你收集整理的面试 -- Java基础(一)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: JSP中隐藏的变量
- 下一篇: 面试 -- 多线程( 一) -- 基础