1.finally語(yǔ)句塊什么情況不會(huì)執(zhí)行
四種情況:
? ? (1)finally語(yǔ)句塊第一行出現(xiàn)異常
? ? (2)程序拋出異常(或者return)之前,調(diào)用system.exits(),退出程序
? ? (3)程序拋出異常(或者return)之前,線程死亡
? ? (4)程序拋出異常(或者return)之前,關(guān)閉CPU
2.java有了基本類型,為什么還要設(shè)計(jì)對(duì)應(yīng)的引用類型
? ? (1)可以使用為該引用類型而編寫的方法
? ? (2)Java集合(map、set、list)等所有集合只能存放引用類型數(shù)據(jù),不能存放基本類型數(shù)據(jù)(容器中實(shí)際存放的是對(duì)象的引用)。
? ? (3)引用類型對(duì)象存儲(chǔ)在堆上,可以控制其生命周期;而基本類型存儲(chǔ)在棧上,會(huì)隨著代碼塊運(yùn)行結(jié)束被回收。
? ? (4)java泛型使用類型擦除法實(shí)現(xiàn),基本類型無(wú)法實(shí)現(xiàn)泛型。
3.怎么理解多態(tài)(多態(tài)的好處)
是什么:多態(tài)是引用變量指向的實(shí)例對(duì)象在程序運(yùn)行期才確定;
好處:1.提高的代碼的可維護(hù)性(即可以通過(guò)改寫父類屬性與方法來(lái)改寫子類共有屬性與方法)
? ? ? ? ? ?2.提高了代碼的可擴(kuò)展性(即子類方法可以被父類的引用變量調(diào)用)
怎么實(shí)現(xiàn):繼承父類、實(shí)現(xiàn)接口
4.什么是反射?
(1)反射是可以在運(yùn)行時(shí)得到某個(gè)類的完整信息;
(2)獲取類的信息首先要得到該類對(duì)應(yīng)的Class對(duì)象,拿到Class對(duì)象的方式如下;

(3)拿到class對(duì)象后,就可以調(diào)用class對(duì)象的成員方法,得到類的信息,如 getMethod、getField,getConstructor,newInstance
(4)反射的原理:
(5)反射的應(yīng)用:
5.自動(dòng)拆裝箱
什么時(shí)候發(fā)生、具體怎么實(shí)現(xiàn)
自動(dòng)拆箱:當(dāng)基礎(chǔ)類型與引用類型進(jìn)行 “==、+、-、×、÷” 運(yùn)算時(shí),會(huì)對(duì)引用類型進(jìn)行自動(dòng)拆箱;
????具體實(shí)現(xiàn),引用類型對(duì)象內(nèi)部包含對(duì)應(yīng)基本類型的成員變量,自動(dòng)拆箱時(shí)返回該成員變量即可;
自動(dòng)裝箱:使用基礎(chǔ)類型給引用類型變量賦值
? ? 具體實(shí)現(xiàn):調(diào)用引用類型對(duì)應(yīng)的靜態(tài)方法valueOf,本質(zhì)是在該方法內(nèi)部調(diào)用構(gòu)造函數(shù)創(chuàng)建對(duì)象。
6.java泛型相關(guān)問(wèn)題

(1)是什么:泛型就是將類型參數(shù)化,在編譯時(shí)才確定具體的參數(shù)。這種參數(shù)類型可以用在類、接口和方法的創(chuàng)建中,分別稱為泛型類、泛型接口、泛型方法。
(2)為什么(好處):為了創(chuàng)建容器類,可以實(shí)現(xiàn)類型安全且消除了很多的強(qiáng)制類型轉(zhuǎn)換;
(3)原理:??泛型只存在于編譯階段,不存在與運(yùn)行階段(編譯后的class文件不存在泛型的概念)
? ? 編譯時(shí),使用Object代替泛型參數(shù)T,如果使用T extends XXX 或者 T super XXX,則使用XXX代替泛型參數(shù)T


7.序列化反序列化相關(guān)問(wèn)題
(1)是什么:序列化是將對(duì)象轉(zhuǎn)換為字節(jié)序列,以便在網(wǎng)絡(luò)中傳輸或保存在本地;
? ? ? ? ? ? ? ? ? ? ? 反序列化是把字節(jié)序列轉(zhuǎn)換為對(duì)象。(通過(guò)讀取字節(jié)流中對(duì)象的屬性,創(chuàng)建出一個(gè)有著同樣屬性的? ? 對(duì)象)
(2)為什么:需要對(duì)內(nèi)存中的對(duì)象進(jìn)行持久化或者網(wǎng)絡(luò)傳輸。序列化反序列化還可以用于深拷貝(因?yàn)樾蛄谢梢詫⒄麄€(gè)對(duì)象層次寫入字節(jié)流中)
(3)怎么實(shí)現(xiàn):實(shí)現(xiàn)Serializable接口或者Externalizable接口。

(4)serialVersionUID:用來(lái)表明類不同版本之間的兼容性
理解:JVM會(huì)在序列化的時(shí)候,自動(dòng)創(chuàng)建一個(gè)serialVersionUID字段,一起序列化成字節(jié)流,如果在類中顯示指定了該字段并賦值,則序列化的值會(huì)用顯示指定的;在反序列化的時(shí)候,JVM也會(huì)創(chuàng)建一個(gè)serialVersionUID(根據(jù)反序列化這邊所在的程序,和字節(jié)流無(wú)關(guān)),如果反序列化這邊的類同樣指定了serialVersionUID字段,則JVM創(chuàng)建的serialVersionUID的值就是顯示指定的。在反序列化的時(shí)候,JVM會(huì)比較創(chuàng)建的serialVersionUID值和字節(jié)流中的serialVersionUID值是否一致,一致則可以反序列化,不一致會(huì)異常。
? ? 如果不顯示指定,則不能保證序列化和反序列化兩邊JVM創(chuàng)建的serialVersionUID值相等。
(5)對(duì)于不想序列化的字段,使用 transient 關(guān)鍵字修飾,該字段在被反序列化的時(shí)候,會(huì)被設(shè)置為零值。
(6)序列化和反序列化是針對(duì)對(duì)象的,靜態(tài)字段不會(huì)被序列化(也不需要被序列化)
8.java異常相關(guān)問(wèn)題
(1)是什么:?Throwable派生出Error、Exception。Exception又分為運(yùn)行時(shí)異常和非運(yùn)行時(shí)異常。
error:程序無(wú)法處理的嚴(yán)重錯(cuò)誤 ,不能通過(guò)?catch?來(lái)進(jìn)行捕獲,通常會(huì)導(dǎo)致程序終止。例如系統(tǒng)崩潰、內(nèi)存不足;
exception:程序可以處理的異常,需要對(duì)其進(jìn)行處理 ;
其中非運(yùn)行時(shí)異常必須對(duì)其進(jìn)行處理,運(yùn)行時(shí)異常可以由程序員自己決定(因?yàn)檫\(yùn)行時(shí)異常中有很多是代碼本身寫錯(cuò)了,需要的不是處理異常,而是修改代碼,如空指針異常、數(shù)據(jù)訪問(wèn)越界異常)。
(2)java常見異常:
java.lang.InstantiationError:實(shí)例化錯(cuò)誤。當(dāng)一個(gè)應(yīng)用試圖通過(guò)new操作符構(gòu)造一個(gè)抽象類或者接口時(shí)拋出該異常.
java.lang.OutOfMemoryError:內(nèi)存不足錯(cuò)誤。當(dāng)可用內(nèi)存不足以讓Java虛擬機(jī)分配給一個(gè)對(duì)象時(shí)拋出該錯(cuò)誤。
java.lang.StackOverflowError:堆棧溢出錯(cuò)誤。當(dāng)一個(gè)應(yīng)用遞歸調(diào)用的層次太深而導(dǎo)致堆棧溢出或者陷入死循環(huán)時(shí)拋出該錯(cuò)誤。
java.lang.IndexOutOfBoundsException:索引越界異常。當(dāng)訪問(wèn)某個(gè)序列的索引值小于0或大于等于序列大小時(shí),拋出該異常。
java.lang.NullPointerException:空指針異常。
java.lang.ArithmeticException:算術(shù)條件異常。譬如:整數(shù)除零等。
9.java IO流相關(guān)問(wèn)題
(1)IO流分類:
按流向:輸入流、輸出流
按操作的數(shù)據(jù)單元:字節(jié)流、字符流
按流的角色:節(jié)點(diǎn)流、處理流

(2)字節(jié)流和字符流區(qū)別