1.?????????????? Java基礎(chǔ)知識... 5
1.1.???? Java源程序的擴(kuò)展名是什么?... 5
1.3.???? 標(biāo)識符有哪些特點(diǎn)?... 5
1.4.???? java程序經(jīng)編譯后產(chǎn)生的字節(jié)碼文件擴(kuò)展名是什么撮竿?... 5
1.5.???? 請說明環(huán)境變量Path 與 classpath 區(qū)別?... 5
1.7.???? 請寫出以下標(biāo)識符的命名規(guī)則... 5
1.8.???? 請解釋Java語言的跨平臺特性运怖?... 6
1.9.???? 請說明JDK、JRE夏伊、JVM的區(qū)別摇展?... 6
1.10.??????????? 注釋的分類及作用?... 6
1.11.??????????? 請說出Java中數(shù)據(jù)類型的分類?基本數(shù)據(jù)類型都有哪些?. 6
1.13.??????????? 變量的定義格式是什么?. 7
1.14.??????????? Java中數(shù)據(jù)的類型轉(zhuǎn)換有幾種?分別是什么?. 7
1.15.??????????? Java語言中的字符char可以存儲一個(gè)中文漢字嗎?為什么呢?. 7
1.16.??????????? 請說明 && 和 & 的區(qū)別溺忧?... 7
1.17.??????????? 請說明 == 與 = 的區(qū)別咏连?... 7
1.18.??????????? 三元運(yùn)算符的基本格式是什么盯孙?... 7
1.19.??????????? 三元運(yùn)算符的執(zhí)行流程是什么?... 8
1.20.??????????? 使用鍵盤錄入數(shù)據(jù)的三個(gè)步驟是什么祟滴?... 8
1.21.??????????? 請說明for镀梭、while、do...while三種循環(huán)的格式以及執(zhí)行流程踱启,以及它們的區(qū)別报账。??? 8
1.22.??????????? 定義一個(gè)方法的格式是什么,以及方法的注意事項(xiàng)?. 9
1.23.??????????? 請解釋什么是方法的重載?. 9
1.24.??????????? 數(shù)組有幾種創(chuàng)建的方式?分別是什么埠偿?... 9
2.1.???? 類是什么透罢? 對象是什么?舉例說明... 9
2.2.???? 類由哪些內(nèi)容組成冠蒋?... 9
2.3.???? 成員變量與局部變量的區(qū)別羽圃?... 10
2.4.???? 什么是匿名對象?什么時(shí)候使用匿名對象抖剿?... 10
2.5.???? 使用面向?qū)ο蟆痉庋b】的好處有哪些朽寞?... 10
2.6.???? private關(guān)鍵字在哪里使用? 被private 修飾的成員有什么特點(diǎn)斩郎?... 10
2.7.???? 為什么要有 this 關(guān)鍵字脑融?this 關(guān)鍵字的含義?... 10
2.9.???? 一個(gè)類的缺省構(gòu)造方法可以有參數(shù)嗎妓布?... 11
2.10.??????????? 靜態(tài)變量與成員變量的區(qū)別?... 11
2.11.??????????? 請說明一個(gè)對象的創(chuàng)建過程做了哪些事情宋梧?... 11
2.12.??????????? 繼承的好處是什么匣沼?... 12
2.13.??????????? Java中的類的繼承特點(diǎn)是什么以及繼承的注意事項(xiàng)?... 12
2.14.??????????? this和 super 分別是什么捂龄,他們各自的應(yīng)用場景是什么释涛?... 12
2.15.??????????? 什么是方法重寫?需要注意哪些問題跺讯?... 12
2.16.??????????? 方法重寫和重載有什么區(qū)別枢贿?... 12
2.17.??????????? 子父類中構(gòu)造方法的執(zhí)行有什么特點(diǎn)殉农?為什么要這樣刀脏?... 13
2.18.??????????? 靜態(tài)代碼塊,構(gòu)造代碼塊超凳,構(gòu)造方法的執(zhí)行順序是什么以及執(zhí)行特點(diǎn)愈污?... 13
2.19.??????????? final關(guān)鍵字是什么意思耀态,可以修飾那些成員?被修飾的成員有哪些特點(diǎn)暂雹???? 13
2.20.??????????? 什么是多態(tài),多態(tài)的前提是什么?. 13
2.21.??????????? 多態(tài)中成員(成員變量,成員方法,靜態(tài)成員方法)的訪問特點(diǎn)是什么?. 13
2.22.??????????? 多態(tài)的好處?. 14
2.23.??????????? 多態(tài)的弊端是什么,如果我們想訪問子類的特有的功能我們應(yīng)該怎么辦?. 14
2.24.??????????? 抽象類是什么,抽象類的特點(diǎn)?. 14
2.25.??????????? 抽象類中有沒有構(gòu)造方法,如果有它是用來做什么的?. 14
2.26.??????????? 接口中成員變量的特點(diǎn),以及成員方法的特點(diǎn)?. 14
2.27.??????????? 請說出類與類,類與接口,以及接口與接口的關(guān)系以及特點(diǎn)?. 14
2.28.??????????? 抽象類和接口的區(qū)別?. 15
2.29.??????????? 形式參數(shù)是基本類型要的是什么?是類名要的是什么?是抽象類名要的是什么?是接口名要的是什么?? 15
2.30.??????????? 返回值類型是基本類型返回的是什么?是類名返回的是什么?是抽象類名返回的是什么?是接口名返回的是什么?. 15
2.31.??????????? package它有什么作用首装?... 16
2.32.??????????? import的作用?. 16
2.33.??????????? 內(nèi)部類有哪些訪問特點(diǎn)?... 16
2.34.??????????? 匿名內(nèi)部類的格式是什么?其本質(zhì)是什么?. 16
3.1.???? 請解釋 ==與equals()方法的區(qū)別杭跪?... 16
3.2.???? 下面這條語句一共創(chuàng)建了多少個(gè)對象:String s = “a”+“b”+”c”; 分別都是什么仙逻?... 16
3.3.???? 如何實(shí)現(xiàn)StringBuffer和String的相互轉(zhuǎn)換?... 16
3.4.???? 如何實(shí)現(xiàn)String和int數(shù)據(jù)的相互轉(zhuǎn)換... 17
3.5.???? 如何實(shí)現(xiàn) 基本數(shù)據(jù)類型 與 基本數(shù)據(jù)封裝類 之間的相互轉(zhuǎn)換... 17
3.6.???? 請說明String與StringBuffer二者之間的區(qū)別涧尿?... 17
3.7.???? 請說明StringBuffer與StringBilder二者之間的區(qū)別系奉?... 17
3.9.???? 如何實(shí)現(xiàn)Date與long相互轉(zhuǎn)換?. 17
3.10.??????????? 如何實(shí)現(xiàn)Date與String相互轉(zhuǎn)換姑廉?... 18
4.1.???? 請簡述集合和數(shù)組的異同點(diǎn)缺亮?... 18
4.2.???? 請簡述迭代器是一個(gè)什么玩意?... 18
4.3.???? 請簡述常見的數(shù)據(jù)結(jié)構(gòu)有哪些桥言?... 18
4.4.???? 請簡述ArrayList萌踱、Vector、LinkedList三者的特點(diǎn)号阿?... 18
4.5.???? 請簡述ArrayList并鸵、Vector、LinkedList扔涧,分別在什么時(shí)候使用能真?... 18
4.6.???? 請簡述并發(fā)修改異常產(chǎn)生的原因?如何解決扰柠?... 19
4.7.???? 請簡述泛型是什么?有什么用?在哪里用粉铐?... 19
4.8.???? 請簡述List和List之間有什么區(qū)別?... 19
4.9.???? 如何編寫一個(gè)泛型方法卤档,讓它能夠接受泛型參數(shù)并返回泛型類型蝙泼?并舉例... 19
4.10.??????????? 請簡述Java中如何使用泛型編寫帶有參數(shù)的類?并舉例... 19
4.11.??????????? 請簡述Set集合的特點(diǎn)劝枣?... 20
4.12.??????????? 請簡述HashSet是如何保證元素唯一性的?. 20
4.13.??????????? 請簡述TreeSet是如何保證元素唯一性與排序的汤踏?... 20
4.14.??????????? 請說明Map接口和Collection接口的區(qū)別... 20
4.15.??????????? 請說出Map集合的遍歷方式... 20
4.16.??????????? 請說明HashMap和Hashtable的區(qū)別... 20
4.17.??????????? 請解釋Collection與Collections的區(qū)別... 20
5.1.???? 請說說什么是異常?異常的分類舔腾?... 20
5.2.???? 請說出異常處理的兩種方式溪胶?... 21
5.3.???? 請說說編譯期異常和運(yùn)行期異常的區(qū)別?... 22
5.4.???? 請說說throws與throw的區(qū)別稳诚?... 22
5.5.???? 請說說final哗脖、finally與finalize的區(qū)別?... 22
5.6.???? 請說說異常的注意事項(xiàng)及如何使用異常處理?... 22
5.7.???? 請說說文件名稱過濾器FilenameFilter的作用才避?... 23
5.8.???? 請說出最常見到的RuntimeException異常橱夭。... 23
5.9.???? 請簡述遞歸是什么?注意事項(xiàng)是什么?. 23
5.10.??????????? 請簡述IO流的分類... 23
5.11.??????????? 請簡述字符編碼是什么?請說出常見字符編碼表桑逝?... 23
5.12.??????????? 請說出學(xué)習(xí)過的IO流中的常用方法棘劣?... 24
5.13.??????????? 請說出轉(zhuǎn)換流OutputStreamWriter與InputStreamReader 的作用?... 24
5.14.??????????? 請簡述打印流(PrintStream楞遏、PrintWriter)的特點(diǎn)茬暇?... 24
[if !supportLists]1.?????? [endif]Java基礎(chǔ)知識
[if !supportLists]1.1.?????????[endif]Java源程序的擴(kuò)展名是什么?
答案:擴(kuò)展名是.java
[if !supportLists]1.2.?????????[endif]什么是標(biāo)識符寡喝?
答案:在Java語言中凡是我們可以自己起名字的都是標(biāo)識符而钞。
[if !supportLists]1.3.?????????[endif]標(biāo)識符有哪些特點(diǎn)?
答案:標(biāo)識符由英文大小寫字母拘荡、數(shù)字字符臼节、$和_組成,不能以數(shù)字開頭珊皿,也不能是java中關(guān)鍵字网缝,并區(qū)分大小寫
[if !supportLists]1.4.?????????[endif]?java程序經(jīng)編譯后產(chǎn)生的字節(jié)碼文件擴(kuò)展名是什么?
答案:字節(jié)碼文件擴(kuò)展名是.class
[if !supportLists]1.5.?????????[endif]請說明環(huán)境變量Path與 classpath 區(qū)別蟋定?
答案:path是系統(tǒng)用來指定可指定文件的完整路徑粉臊。Path是用來搜索所執(zhí)行的可執(zhí)行文件路徑的,如果執(zhí)行的可執(zhí)行文件不在當(dāng)前目錄下驶兜,那就會依次搜索path中設(shè)置的路徑扼仲。
classpath是指定你在程序中所使用的類(.class)文件所在的位置。
[if !supportLists]1.6.?????????[endif]請說出常用的DOS命令并解釋抄淑?
答案:d: 回車 : 盤符切換
dir (directory) :列出當(dāng)前目錄下的文件以及文件夾
cd (change directory) : 改變指定目錄(進(jìn)入指定目錄)
cd.. : 退回到上一層目錄
cd\ : 退回到跟目錄
md (make directory) :創(chuàng)建目錄
rd (remove directory) :刪除目錄
del (delete) :刪除文件屠凶,刪除一堆后綴名一樣的文件*.txt
cls (clear screen) :清屏
exit:退出dos命令行
[if !supportLists]1.7.?????????[endif]請寫出以下標(biāo)識符的命名規(guī)則
答案:包:全部小寫
單層包:小寫,舉例:itcast肆资,com
多層包:小寫矗愧,并用 . 隔開,舉例:cn.itcast郑原,com.baidu
類或者接口:
一個(gè)單詞:首字母大寫唉韭,舉例:Student,Demo
多個(gè)單詞:每個(gè)單詞首字母大寫犯犁,舉例:HelloWorld属愤,StudentName
方法或者變量:
一個(gè)單詞:首字母小寫,舉例:name酸役,main
多個(gè)單詞:從第二個(gè)單詞開始住诸,每個(gè)單詞首字母大寫驾胆,舉例:studentAge,showStudentNames()
常量:全部大寫
一個(gè)單詞:大寫只壳,舉例:PI
多個(gè)單詞:大寫俏拱,并用 _ 隔開暑塑,舉例:STUDENT_MAX_AGE
[if !supportLists]1.8.?????????[endif]請解釋Java語言的跨平臺特性吼句?
答案:Java語言是跨平臺運(yùn)行的,其實(shí)就是不同的操作系統(tǒng)事格,使用不同的JVM映射規(guī)則惕艳,讓其與操作系統(tǒng)無關(guān),完成了跨平臺性驹愚。JVM對上層的Java源文件是不關(guān)心的远搪,它關(guān)注的只是由源文件生成的類文件(class file)。
[if !supportLists]1.9.?????????[endif]請說明JDK逢捺、JRE、JVM的區(qū)別?
答案:JDK: Java Development
Kit(Java開發(fā)工具包)着逐。JDK是整個(gè)JAVA的核心砚婆,包括了Java運(yùn)行環(huán)境(Java Runtime Environment),一堆Java工具(javac/java/javap等)
JRE:Java Runtime Environment(java運(yùn)行時(shí)環(huán)境)志于。也就是我們說的JAVA平臺涮因。所有的Java程序都要在JRE下才能運(yùn)行。包括JVM和JAVA核心類庫和支持文件伺绽。與JDK相比养泡,它不包含開發(fā)工具(編譯器、調(diào)試器和其他工具)奈应。
JVM:Java Virtual Mechinal(JAVA虛擬機(jī))澜掩。JVM是JRE的一部分,它是一個(gè)虛構(gòu)出來的計(jì)算機(jī)杖挣,是通過在實(shí)際的計(jì)算機(jī)上仿真模擬各種計(jì)算機(jī)功能來實(shí)現(xiàn)的输硝。
[if !supportLists]1.10.????? [endif]注釋的分類及作用?
答案:單行注釋程梦、多行注釋点把、文檔注釋
單行注釋:注釋單行代碼或?yàn)閱涡写a添加描述的時(shí)候使用
多行注釋:注釋多行代碼或?yàn)榇a添加多行描述的時(shí)候使用
文檔注釋:生產(chǎn)java幫助文檔的時(shí)候使用,開發(fā)中常用來描述類屿附、描述方法
[if !supportLists]1.11.?????[endif]請說出Java中數(shù)據(jù)類型的分類?基本數(shù)據(jù)類型都有哪些?
答案:
基本數(shù)據(jù)類型
|- byte?????????1
|- short?????????2
|- int???????????4
|- long?? ???????8
|- float?????????4
|- double???????8
|- char?????????2
|- boolean??????1
引用數(shù)據(jù)類型
|- 數(shù)組
|- 類
|- 接口
[if !supportLists]1.12.?????[endif]變量是什么?
答案:變量郎逃,在程序運(yùn)行時(shí),值可以被修改的量挺份。
[if !supportLists]1.13.????? [endif]變量的定義格式是什么?
答案:數(shù)據(jù)類型 變量名 = 變量值;
[if !supportLists]1.14.?????[endif]Java中數(shù)據(jù)的類型轉(zhuǎn)換有幾種?分別是什么?
答案:強(qiáng)制類型轉(zhuǎn)換:容量大的類型向容量小的類型轉(zhuǎn)換時(shí)使用
隱式類型轉(zhuǎn)換:容器小的類型向容量大的類型轉(zhuǎn)換時(shí)使用
[if !supportLists]1.15.?????[endif]Java語言中的字符char可以存儲一個(gè)中文漢字嗎?為什么呢?
答案:char型變量是用來存儲Unicode編碼的字符的褒翰,unicode編碼字符集中包含了漢字,所以,char型變量中可以存儲漢字优训。不過朵你,如果某個(gè)特殊的漢字沒有被包含在unicode編碼字符集中,那么揣非,這個(gè)char型變量中就不能存儲這個(gè)特殊漢字抡医。補(bǔ)充說明:unicode編碼占用兩個(gè)字節(jié),所以早敬,char類型的變量也是占用兩個(gè)字節(jié)忌傻。
[if !supportLists]1.16.?????[endif]請說明 && 和 & 的區(qū)別?
答案:&和&&都可以用作邏輯與的運(yùn)算符搞监,表示邏輯與(and)水孩,當(dāng)運(yùn)算符兩邊的表達(dá)式的結(jié)果都為true時(shí),整個(gè)運(yùn)算結(jié)果才為true琐驴,否則俘种,只要有一方為false,則結(jié)果為false绝淡。
&&還具有短路的功能宙刘,即如果第一個(gè)表達(dá)式為false,則不再計(jì)算第二個(gè)表達(dá)式
&還可以用作位運(yùn)算符够委,當(dāng)&操作符兩邊的表達(dá)式不是boolean類型時(shí)荐类,&表示按位與操作。
[if !supportLists]1.17.?????[endif]請說明 == 與 =的區(qū)別茁帽?
答案:==: 比較運(yùn)算符玉罐,用來比較操作符兩邊的變量的值是否相等。
= : 賦值運(yùn)算符潘拨,把操作符右邊的值吊输,賦值給左邊的變量
[if !supportLists]1.18.?????[endif]三元運(yùn)算符的基本格式是什么?
答案:? 三元運(yùn)算符的格式是:???? 條件表達(dá)式 ? 表達(dá)式1 : 表達(dá)式2 ;
[if !supportLists]1.19.????? [endif]三元運(yùn)算符的執(zhí)行流程是什么铁追?
答案:? 三元運(yùn)算符的執(zhí)行流程: 首先計(jì)算條件表達(dá)式的值看其返回結(jié)果是true還是false,如果是true就執(zhí)行表達(dá)式1,如果是false就執(zhí)行表達(dá)式2
[if !supportLists]1.20.?????[endif]使用鍵盤錄入數(shù)據(jù)的三個(gè)步驟是什么季蚂?
答案:? 第一步導(dǎo)包:格式:???? importjava.util.Scanner ;位置:?????? 在class上邊
第二步創(chuàng)建Scanner對象,格式:??? Scanner sc = new Scanner(System.in) ;
第三步獲取鍵盤錄入數(shù)據(jù):格式:????? int x= sc.nextInt() ;
答案:for循環(huán)語句格式:
for(初始化語句;判斷條件語句;控制條件語句) {
???????? 循環(huán)體語句;
}
執(zhí)行流程:
a) 執(zhí)行初始化語句
b) 執(zhí)行判斷條件語句料滥,看其結(jié)果是true還是false,如果是false艾船,循環(huán)結(jié)束葵腹;如果是true高每,繼續(xù)執(zhí)行。
c) 執(zhí)行循環(huán)體語句
d) 執(zhí)行控制條件語句
e) 回到b繼續(xù)
while循環(huán)語句格式:
while(判斷條件語句) {
??????? 循環(huán)體語句;
}
執(zhí)行流程:
a) 執(zhí)行判斷條件語句践宴,看其結(jié)果是true還是false
如果是false鲸匿,循環(huán)結(jié)束。
如果是true阻肩,繼續(xù)執(zhí)行带欢。
b) 執(zhí)行循環(huán)體語句
c) 回到a繼續(xù)
do…while循環(huán)語句格式:
do {
循環(huán)體語句;
}while((判斷條件語句);
執(zhí)行流程:
a) 執(zhí)行循環(huán)體語句
b) 執(zhí)行判斷條件語句,看其結(jié)果是true還是false磺浙,如果是false洪囤,循環(huán)結(jié)束徒坡;如果是true撕氧,繼續(xù)執(zhí)行。
c) 回到a繼續(xù)
三種循環(huán)語句的區(qū)別:
a) do...while循環(huán)至少會執(zhí)行一次循環(huán)體
b) for循環(huán)和while循環(huán)只有在條件成立的時(shí)候才會去執(zhí)行循環(huán)體
注意:寫程序優(yōu)先考慮for循環(huán)喇完,再考慮while循環(huán)伦泥,最后考慮do...while循環(huán)
[if !supportLists]1.22.?????[endif]定義一個(gè)方法的格式是什么,以及方法的注意事項(xiàng)?
答案:修飾符 返回值類型 方法名(參數(shù)類型 參數(shù)名1, 參數(shù)類型 參數(shù)名2 ….){
方法體;
??? return返回值;
}
注意事項(xiàng):
??? A:?? 方法不調(diào)用不執(zhí)行
??? B:?? 方法與方法是平級關(guān)系,不能嵌套定義
??? C:?? 方法定義的時(shí)候參數(shù)之間用逗號隔開
??? D:?? 方法調(diào)用的時(shí)候不用在傳遞數(shù)據(jù)類型
??? E:??? 如果方法有明確的返回值锦溪,一定要有return帶回一個(gè)值
[if !supportLists]1.23.????? [endif]請解釋什么是方法的重載?
答案:方法重載指在同一個(gè)類中不脯,允許存在一個(gè)以上的同名方法,只要它們的參數(shù)個(gè)數(shù)或者參數(shù)類型不同即可刻诊。
方法重載特點(diǎn):
a) 與返回值類型無關(guān)防楷,只看方法名和參數(shù)列表
b) 在調(diào)用時(shí),虛擬機(jī)通過參數(shù)列表的不同來區(qū)分同名方法
[if !supportLists]1.24.?????[endif]數(shù)組有幾種創(chuàng)建的方式则涯?分別是什么复局?
答案:2種。動(dòng)態(tài)創(chuàng)建和靜態(tài)創(chuàng)建粟判。
[if !supportLists]2.?????? [endif]面向?qū)ο?/a>
[if !supportLists]2.1.?????????[endif]類是什么亿昏? 對象是什么?舉例說明
答案:類是一組相關(guān)屬性和行為的集合是一個(gè)抽象的東西,對象則是該類的一個(gè)具體的體現(xiàn)档礁。
舉例:? 學(xué)生就是一個(gè)類,然后每一個(gè)學(xué)生都是學(xué)生的一個(gè)個(gè)具體的體現(xiàn),所以每一個(gè)學(xué)生就是一個(gè)學(xué)生角钩。
[if !supportLists]2.2.?????????[endif]類由哪些內(nèi)容組成?
答案:類由成員變量和成員方法組成
成員變量對應(yīng)的就是事物的屬性(就是事物固有的信息,比如: 人的屬性有身高 , 姓名 , 年齡 , 學(xué)歷...) , 成員方法對應(yīng)的是行為(行為: 就是該事物可以做的事情,比如:人的行為有: 吃飯,睡覺....)
[if !supportLists]2.3.?????????[endif]成員變量與局部變量的區(qū)別呻澜?
答案:
??? A:在類中的位置不同
?????????? 成員變量:在類中方法外
?????????? 局部變量:在方法定義中或者方法聲明上
??? B:在內(nèi)存中的位置不同
?????????? 成員變量:在堆內(nèi)存
?????????? 局部變量:在棧內(nèi)存
??? C:生命周期不同
?????????? 成員變量:隨著對象的創(chuàng)建而存在递礼,隨著對象的消失而消失
?????????? 局部變量:隨著方法的調(diào)用而存在,隨著方法的調(diào)用完畢而消失
??? D:初始化值不同
?????????? 成員變量:有默認(rèn)初始化值
?????????? 局部變量:沒有默認(rèn)初始化值羹幸,必須定義脊髓,賦值,然后才能使用睹欲。
[if !supportLists]2.4.?????????[endif]什么是匿名對象供炼?什么時(shí)候使用匿名對象一屋?
答案:匿名對象指:沒有起名字的對象
使用匿名對象:
a:調(diào)用方法,僅僅只調(diào)用一次的時(shí)候
b:匿名對象可以作為實(shí)際參數(shù)傳遞
[if !supportLists]2.5.?????????[endif]使用面向?qū)ο蟆痉庋b】的好處有哪些袋哼?
答案:隱藏實(shí)現(xiàn)細(xì)節(jié)冀墨,提供公共的訪問方式;
提高了代碼的復(fù)用性涛贯;
提高安全性诽嘉。
[if !supportLists]2.6.?????????[endif]private 關(guān)鍵字在哪里使用? 被 private 修飾的成員有什么特點(diǎn)弟翘?
答案:類中的成員需要私有的時(shí)候使用private關(guān)鍵字
特點(diǎn):
是一個(gè)權(quán)限修飾符虫腋。
可以修飾成員(成員變量和成員方法)
被private修飾的成員只在本類中才能訪問
[if !supportLists]2.7.?????????[endif]為什么要有 this 關(guān)鍵字?this 關(guān)鍵字的含義稀余??
答案:this用來解決成員變量與局部變量重名問題
this關(guān)鍵字代表的是本類對象引用悦冀;誰調(diào)用我,this就代表誰.
答案:構(gòu)造方法的作用是用于給類的成員變量賦值,完成類的初始化工作
?????? 構(gòu)造方法的特點(diǎn):
????????????? 構(gòu)造方法的名稱和類名相同
????????????? 構(gòu)造方法沒有返回值類型,連void也沒有
????????????? 構(gòu)造方法沒有具體的返回值
?????? 構(gòu)造方法的注意事項(xiàng):
a: 如果一個(gè)類沒有給出構(gòu)造方法,系統(tǒng)將會提供一個(gè)默認(rèn)無參的構(gòu)造方法
b: 如果我們給出類構(gòu)造方法,系統(tǒng)將不會提供默認(rèn)無參的構(gòu)造方法,這個(gè)時(shí)候如果我們還想使用無參的構(gòu)造方法來創(chuàng)建對象,那么就需要我們給出無參的構(gòu)造方法
?????? 可以寫空的return語句.
[if !supportLists]2.9.?????????[endif]一個(gè)類的缺省構(gòu)造方法可以有參數(shù)嗎师骗?
答案:? 一個(gè)類的缺省構(gòu)造方法沒有參數(shù)
[if !supportLists]2.10.?????[endif]靜態(tài)變量與成員變量的區(qū)別历等?
答案:1:所屬不同
?????????? 靜態(tài)變量屬于類,所以也稱為為類變量
?????????? 成員變量屬于對象辟癌,所以也稱為實(shí)例變量(對象變量)
??? 2:內(nèi)存中位置不同
?????????? 靜態(tài)變量存儲于方法區(qū)的靜態(tài)區(qū)
?????????? 成員變量存儲于堆內(nèi)存
??? 3:內(nèi)存出現(xiàn)時(shí)間不同
?????????? 靜態(tài)變量隨著類的加載而加載寒屯,隨著類的消失而消失
?????????? 成員變量隨著對象的創(chuàng)建而存在,隨著對象的消失而消失
??? 4:調(diào)用不同
?????????? 靜態(tài)變量可以通過類名調(diào)用黍少,也可以通過對象調(diào)用
?????????? 成員變量只能通過對象名調(diào)用
[if !supportLists]2.11.?????[endif]請說明一個(gè)對象的創(chuàng)建過程做了哪些事情寡夹?
答案:Student s = newStudent();
1:將Student.class 字節(jié)碼文件加載到內(nèi)存
2: 在棧內(nèi)存中,開辟一個(gè)空間存儲 s變量仍侥,用來記錄Student對象的引用
3: 在堆內(nèi)存中要出,開辟一個(gè)空間存儲 new Student()對象的成員信息
2:加載類中靜態(tài)成員
3:執(zhí)行類中靜態(tài)代碼塊
4:加載對象中普通成員
5:執(zhí)行構(gòu)造代碼塊
6:執(zhí)行構(gòu)造方法
7:將new Student()的地址賦值給 s 變量
[if !supportLists]2.12.????? [endif]繼承的好處是什么?
答案: A: 提高了代碼的維護(hù)型
??? B:提供了代碼的復(fù)用性
??? C:讓類與類之間產(chǎn)生了關(guān)系, 是多態(tài)的前提
[if !supportLists]2.13.?????[endif]Java 中的類的繼承特點(diǎn)是什么以及繼承的注意事項(xiàng)农渊?
答案:繼承的特點(diǎn):????? 在java語言中類的繼承只支持單繼承,不支持多繼承.但是可以多層繼承患蹂。
繼承的注意事項(xiàng):
A: 子類只能繼承父類非私有的成員
B: 子類不能繼承父類的構(gòu)造方法,但是可以通過super去訪問父類的構(gòu)造方法
??? C:不要為了某個(gè)功能去使用繼承
[if !supportLists]2.14.?????[endif]this 和 super 分別是什么,他們各自的應(yīng)用場景是什么砸紊?
答案:this代表的是本類對象的引用 , 誰調(diào)用我這個(gè)方法,這個(gè)方法里邊的this就代表誰传于。一般的使用場景是,當(dāng)局部變量隱藏了成員變量的時(shí)候,我們可以使用this去明確指定要訪問的是成員變量
super代表的是父類存儲空間的一個(gè)標(biāo)志(可以理解為父類對象的引用),我們可以使用super來訪問父類的成員
[if !supportLists]2.15.?????[endif]什么是方法重寫?需要注意哪些問題醉顽?
答案:方法重寫:指子類中出現(xiàn)了和父類中一模一樣的方法聲明沼溜,也被稱為方法覆蓋,方法復(fù)寫
需要注意的問題:
父類中私有方法不能被重寫
子類重寫父類方法時(shí)游添,訪問權(quán)限不能更低
父類靜態(tài)方法系草,子類也必須通過靜態(tài)方法進(jìn)行重寫通熄。(其實(shí)這個(gè)算不上方法重寫,但是現(xiàn)象確實(shí)如此)
[if !supportLists]2.16.?????[endif]方法重寫和重載有什么區(qū)別找都?
答案:重載Overload表示同一個(gè)類中可以有多個(gè)名稱相同的方法唇辨,但這些方法的參數(shù)列表各不相同(即參數(shù)個(gè)數(shù)或類型不同),與返回值類型無關(guān)。
重寫Override是發(fā)生在子父類中的一個(gè)現(xiàn)象, 子類中出現(xiàn)了和父類中一模一樣的方法,與返回值有關(guān).
[if !supportLists]2.17.?????[endif]子父類中構(gòu)造方法的執(zhí)行有什么特點(diǎn)能耻?為什么要這樣赏枚?
答案:1、子類有所有的構(gòu)造方法默認(rèn)都會訪問父類中空參數(shù)的構(gòu)造方法晓猛。
因?yàn)樽宇悤^承父類中的數(shù)據(jù)饿幅,可能還會使用父類的數(shù)據(jù)。所以戒职,子類初始化之前栗恩,一定要先完成父類數(shù)據(jù)的初始化。每一個(gè)構(gòu)造方法的第一條語句默認(rèn)都是:super()
2帕涌、如果父類中沒有空參數(shù)的構(gòu)造方法摄凡,通過下列方式解決
a) 子類通過super去顯示調(diào)用父類其他的帶參的構(gòu)造方法
b) 子類通過this去調(diào)用本類的其他構(gòu)造方法(本類其他構(gòu)造也必須首先可以訪問了父類構(gòu)造)
注意:super(...)或者this(...)必須出現(xiàn)在第一條語句上续徽,否則蚓曼,就會有父類數(shù)據(jù)的多次初始化
答案:A: 先執(zhí)行所有的靜態(tài)代碼塊,再執(zhí)行所有的構(gòu)造代碼塊客情,最后執(zhí)行構(gòu)造方法??
B: 靜態(tài)代碼塊只執(zhí)行一次, 構(gòu)造代碼塊和構(gòu)造方法,每創(chuàng)建一次對象就執(zhí)行一次
[if !supportLists]2.19.?????[endif]final 關(guān)鍵字是什么意思其弊,可以修飾那些成員?被修飾的成員有哪些特點(diǎn)膀斋?
答案:final最終的意思梭伐。
final可以修飾類,成員變量,成員方法
final修飾類,此類不能被繼承仰担。
final修飾變量糊识,變量就成了常量,只能被賦值一次
final修飾方法摔蓝,方法不能被重寫
[if !supportLists]2.20.?????[endif]什么是多態(tài),多態(tài)的前提是什么?
答案:一種事物在不同時(shí)刻表現(xiàn)出來的狀態(tài)就是多態(tài)
多態(tài)的前提:
a: 需要有繼承
b: 需要有方法重寫(其實(shí)沒有也是可以的,但是沒有意義)赂苗,不同狀態(tài)的表現(xiàn)就是就是靠方法重寫體現(xiàn)的
c: 需要有父類的引用指向子類對象:Fu f = new 子類();
[if !supportLists]2.21.?????[endif]多態(tài)中成員(成員變量,成員方法,靜態(tài)成員方法)的訪問特點(diǎn)是什么?
答案:???????? 訪問成員變量:? 編譯看左邊 , 運(yùn)行看左邊?? (因?yàn)槌蓡T變量其實(shí)就是屬性,屬性就是只該事物的描述信息,所以使用父類在訪問的時(shí)候,訪問的就是父類的成員變量)
成員方法:編譯看左邊,運(yùn)行看右邊(這個(gè)是多態(tài)的本質(zhì),存在動(dòng)態(tài)綁定的機(jī)制)
靜態(tài)成員方法:? 編譯看左邊,運(yùn)行看左邊(所以說靜態(tài)算不上重寫)
[if !supportLists]2.22.????? [endif]多態(tài)的好處?
答案:? A:提供了代碼的維護(hù)性(通過繼承保證)
B:提供了代碼的擴(kuò)展性(通過多態(tài)保證),這個(gè)特點(diǎn)也體現(xiàn)了多態(tài)的最常見的應(yīng)用,作為參數(shù)傳遞.
[if !supportLists]2.23.?????[endif]多態(tài)的弊端是什么,如果我們想訪問子類的特有的功能我們應(yīng)該怎么辦?
答案:? 多態(tài)的弊端,不能訪問子類中特有的功能
如果我們還想使用子類中特有的功能,我們需要使用向下轉(zhuǎn)型(向下轉(zhuǎn)型: 就是將父類的引用強(qiáng)制轉(zhuǎn)換成子類的引用,在向下轉(zhuǎn)型的過程中需要注意一個(gè)異常: ClassCastException)
[if !supportLists]2.24.?????[endif]抽象類是什么,抽象類的特點(diǎn)?
答案:使用了關(guān)鍵字abstract聲明的類叫做“抽象類”。如果一個(gè)類里包含了一個(gè)或多個(gè)抽象方法贮尉,類就必須指定成abstract(抽象)拌滋。“抽象方法”猜谚,屬于一種不完整的方法败砂,只含有一個(gè)聲明赌渣,沒有方法主體。
抽象類的特點(diǎn):
A: 抽象類的定義格式: abstractclass類名{}
抽象方法的定義格式:?? publicabstract返回值類型 方法名();
B:抽象類中可以存在抽象方法,也可以存在非抽象方法
??? C:抽象類不能直接進(jìn)行實(shí)例化,我們可以使用多態(tài)的形式進(jìn)行進(jìn)行間接實(shí)例化
D:抽象類的子類
可以是抽象類(沒有意思,如果子類還是抽象類,那么我們還是不能進(jìn)行實(shí)例化昌犹,還需要一個(gè)子類去繼承)锡垄,也可以是非抽象類(存在一個(gè)前提: 子類必須重寫父類的抽象方法)
[if !supportLists]2.25.?????[endif]抽象類中有沒有構(gòu)造方法,如果有它是用來做什么的?
答案: 抽象類雖然不能進(jìn)行實(shí)例化,但是抽象類中是存在構(gòu)造方法,該構(gòu)造方法的作用是用于子類訪問父類數(shù)據(jù)是的初始化.
[if !supportLists]2.26.?????[endif]接口中成員變量的特點(diǎn),以及成員方法的特點(diǎn)?
答案:接口中的成員變量都是常量,存在默認(rèn)的訪問修飾符:public static final
接口中的成員方法的特點(diǎn): 都是抽象方法,存在默認(rèn)的訪問修飾符: public abstract
[if !supportLists]2.27.?????[endif]請說出類與類,類與接口,以及接口與接口的關(guān)系以及特點(diǎn)?
答案:類與類是繼承的關(guān)系,只支持單繼承,可以是多層繼承。
類與接口是實(shí)現(xiàn)的關(guān)系,可以是多實(shí)現(xiàn)
一個(gè)類可以繼承一個(gè)類的同時(shí),還可以實(shí)現(xiàn)多個(gè)接口
接口與接口是繼承的關(guān)系,可以是單繼承也可以是多繼承
[if !supportLists]2.28.?????[endif]抽象類和接口的區(qū)別?
答案:A:成員區(qū)別
抽象類:
成員變量:可以變量祭隔,也可以常量
構(gòu)造方法:有
成員方法:可以抽象货岭,也可以非抽象
??? 接口:
??? ?????? 成員變量:只可以常量
??? ?????? 成員方法:只可以抽象?
B:關(guān)系區(qū)別
類與類
繼承,單繼承
??? 類與接口
?????????? 實(shí)現(xiàn)疾渴,單實(shí)現(xiàn)千贯,多實(shí)現(xiàn)
??? 接口與接口
?????????? 繼承,單繼承搞坝,多繼承?
C:設(shè)計(jì)理念區(qū)別
??? 抽象類?????? 被繼承體現(xiàn)的是:”is a”的關(guān)系搔谴。? 抽象類中定義的是該繼承體系的共性功能。
??? 接口??? 被實(shí)現(xiàn)體現(xiàn)的是:”like a”的關(guān)系桩撮。????? 接口中定義的是該繼承體系的擴(kuò)展功能敦第。
[if !supportLists]2.29.????? [endif]形式參數(shù)是基本類型要的是什么?是類名要的是什么?是抽象類名要的是什么?是接口名要的是什么?
答案: 形式參數(shù)是基本類型要的是一個(gè)基本類型的變量或者具體的常量值
是類名的時(shí)候要的是一個(gè)該類的對象
是抽象類名的時(shí)候的要的是一個(gè)繼承自該類的一個(gè)子類對象
是接口的時(shí)候要的是一個(gè)實(shí)現(xiàn)了該接口的子類對象
[if !supportLists]2.30.????? [endif]返回值類型是基本類型返回的是什么?是類名返回的是什么?是抽象類名返回的是什么?是接口名返回的是什么?
答案:返回值是基本數(shù)據(jù)類型的時(shí)候返回的是一個(gè)具體的值
是類名的時(shí)候,本質(zhì)上返回的是一個(gè)該類對應(yīng)的子類對象
是抽象類名的時(shí)候返回的應(yīng)該是一個(gè)繼承自該類的子類對象
是接口名的時(shí)候返回的是一個(gè)實(shí)現(xiàn)了該接口的子類對象
[if !supportLists]2.31.????? [endif]package它有什么作用?
答案:package店量,包的意思芜果,其實(shí)就是文件夾,它可以對類進(jìn)行分類管理
[if !supportLists]2.32.????? [endif]import的作用?
答案:在不同包下的類之間相互訪問的時(shí)候融师,發(fā)現(xiàn)右钾,每次使用不同包下的類的時(shí)候,都需要加包的全路徑旱爆。比較麻煩舀射,這個(gè)時(shí)候,java就提供了( import )導(dǎo)包的功能怀伦。使用import可以將包中的類導(dǎo)入進(jìn)來脆烟,以后使用類的時(shí)候,不需導(dǎo)包房待,直接使用邢羔,簡化了書寫。
[if !supportLists]2.33.????? [endif]內(nèi)部類有哪些訪問特點(diǎn)吴攒?
答案:1. 內(nèi)部類可以直接訪問外部類的成員张抄,包括私有
2. 外部類要訪問內(nèi)部類的成員,必須先創(chuàng)建內(nèi)部類對象
[if !supportLists]2.34.?????[endif]匿名內(nèi)部類的格式是什么?其本質(zhì)是什么?
答案:? 匿名內(nèi)部類的格式:
new 類名或者接口名() {
方法重寫;
} ;
本質(zhì):? 匿名內(nèi)部類本質(zhì)是一個(gè)繼承了某一個(gè)類或者實(shí)現(xiàn)了某一個(gè)接口的子類對象
[if !supportLists]3.?????? [endif]常用API
[if !supportLists]3.1.?????????[endif]請解釋 ==與equals()方法的區(qū)別洼怔?
答案:== 號比較基本數(shù)據(jù)類型比較的是值,比較引用數(shù)據(jù)類型比較的是地址值
equals方法只能比較引用數(shù)據(jù)類型,默認(rèn)比較的是地址值,如果我們想要建立自己的比較方式,我們就需要復(fù)寫equals方法
[if !supportLists]3.2.?????????[endif]下面這條語句一共創(chuàng)建了多少個(gè)對象:String s =
“a”+“b”+”c”; 分別都是什么署惯?
答案:5個(gè)對象,分別是"a" , "b" , "c" , "ab" ,
"abc"镣隶,因?yàn)樽址奶攸c(diǎn)是一旦被創(chuàng)建就不能被改變,所有在使用常量進(jìn)行相加的時(shí)候,都是在創(chuàng)建新的字符串對象极谊,最后在把字符串"abc"這個(gè)常量值賦值給引用變量s
[if !supportLists]3.3.?????????[endif]如何實(shí)現(xiàn)StringBuffer和String的相互轉(zhuǎn)換诡右?
答案:StringBuffer轉(zhuǎn)換到 String的方式:
1.??? 通過String類的構(gòu)造方法
2.??? 通過StringBuffer類中的toString()方法
3.??? 通過StringBuffer類中的substring()方法 (注:不常用)
String 轉(zhuǎn)換到 StringBuffer的方式:
1.??? 通過StringBuffer類的構(gòu)造方法
2.??? 通過StringBuffer類的append()、insert()方法
[if !supportLists]3.4.?????????[endif]如何實(shí)現(xiàn)String和int數(shù)據(jù)的相互轉(zhuǎn)換
答案:String轉(zhuǎn)換到 int的方式:
1.??? String–Integer -- int通過Integer類的intValue()方法
2.??? 通過Integer類的parseInt(String
s)方法
Int 轉(zhuǎn)換到 String的方式:
1.??? Int– Integer–String? Integer的toSting()
2.??? 通過String類的valueOf()方法
3.??? 通過Integer類的toSting(int
i)方法
4.??? 通過與字符串""相連接
答案:基本數(shù)據(jù)類型 轉(zhuǎn)換到 包裝類的方式:
1.??? 通過包裝類的構(gòu)造方法
2.??? 通過包裝類的靜態(tài)方法valueOf()
包裝類 轉(zhuǎn)換到 基本數(shù)據(jù)類型的方式:
1.??? 通過包裝類的方法xxxValue()
[if !supportLists]3.6.?????????[endif]請說明String與StringBuffer二者之間的區(qū)別轻猖?
答案:Java平臺提供了兩個(gè)類:String和StringBuffer帆吻,他們可以存儲和操作字符串,即包含多個(gè)字符的字符數(shù)據(jù)咙边。String類表示內(nèi)容不可以改變的字符串猜煮;而StringBuffer類表示內(nèi)容可以被修改的字符串。
[if !supportLists]3.7.?????????[endif]請說明StringBuffer與StringBilder二者之間的區(qū)別败许?
答案:StringBuffer和StringBuilder類都表示內(nèi)容可以被修改的字符串王带,StringBilder是線程不安全的,運(yùn)行效率高市殷,如果一個(gè)字符串變量是在方法里面定義愕撰,這種情況只可能有一個(gè)線程訪問它,不存在不安全的因素了醋寝,則用StringBuilder搞挣。如果要在類里面定義成員變量,并且這個(gè)類的實(shí)例對象會在多線程環(huán)境下使用音羞,那么最好用StringBuffer囱桨。
[if !supportLists]3.8.?????????[endif]什么是正則表達(dá)式?
答案:正則表達(dá)式使用單個(gè)字符串來描述黄选、匹配一系列符合某個(gè)句法規(guī)則的字符串蝇摸。在很多文本編輯器里,正則達(dá)表示通常被用來檢索办陷、替換那些符合某個(gè)模式的文本。
[if !supportLists]3.9.?????????[endif]如何實(shí)現(xiàn)Date與long相互轉(zhuǎn)換?
答案:Date 轉(zhuǎn)換到 long的方式:通過Date類的getTime()方法
long 轉(zhuǎn)換到 Date的方式:通過Date類的構(gòu)造方法
[if !supportLists]3.10.?????[endif]如何實(shí)現(xiàn)Date與String相互轉(zhuǎn)換律歼?
答案:Date 轉(zhuǎn)換到String的方式:
1.??? Date類的toString()方法
2.??? DateFormat類的format()方法
String 轉(zhuǎn)換到 Date的方式:
1. Date類的構(gòu)造方法(已過時(shí)民镜,被DateFormat類的parse(String
s)方法取代)
2. DateFormat類的parse()方法
[if !supportLists]4.?????? [endif]集合框架
[if !supportLists]4.1.?????????[endif]請簡述集合和數(shù)組的異同點(diǎn)?
答案:集合:
可以存儲不同類型的元素(通常使用存儲一種類型元素)
集合的長度可以改變
數(shù)組:
?????????? 必須存儲相同一類型的元素
?????????? 數(shù)組的長度固定
[if !supportLists]4.2.?????????[endif]請簡述迭代器是一個(gè)什么玩意险毁?
答案:迭代器就是對容器中的元素進(jìn)行遍歷制圈,每次取出一個(gè)元素,然后對元素進(jìn)行操作畔况。
[if !supportLists]4.3.?????????[endif]請簡述常見的數(shù)據(jù)結(jié)構(gòu)有哪些鲸鹦?
答案:線性表、鏈表跷跪、棧馋嗜、隊(duì)列、樹吵瞻、哈希表
[if !supportLists]4.4.?????????[endif]請簡述ArrayList葛菇、Vector甘磨、LinkedList三者的特點(diǎn)?
答案:ArrayList:底層數(shù)組結(jié)構(gòu)眯停;線程不同步济舆,效率高;元素查找快莺债、增刪慢滋觉;
Vector:底層數(shù)組結(jié)構(gòu);線程同步齐邦,安全椎瘟;元素查找快、增刪慢侄旬;
LinkedList:底層鏈表結(jié)構(gòu)肺蔚,線程不同步,效率高儡羔;元素增刪快宣羊、查找慢
[if !supportLists]4.5.?????????[endif]請簡述ArrayList、Vector汰蜘、LinkedList仇冯,分別在什么時(shí)候使用?
答案:程序是否要考慮線程安全族操?
是:Vector
否: 查找操作多還是增刪操作多苛坚?
查找多:ArrayList
增刪多:LinkedList
[if !supportLists]4.6.?????????[endif]請簡述并發(fā)修改異常產(chǎn)生的原因?如何解決色难??????
答案:ConcurrentModificationException并發(fā)修改異常泼舱,在迭代器迭代的過程中,集合中的元素個(gè)數(shù)發(fā)生了改變枷莉,此時(shí)導(dǎo)致并發(fā)修改異常娇昙。
解決方式:
1. 通過列表迭代器自帶的方法完成元素增刪操作。
2. 通過for循環(huán)遍歷集合笤妙,使用集合中的方法完成元素增刪操作冒掌。
[if !supportLists]4.7.?????????[endif]請簡述泛型是什么?有什么用?在哪里用?
答案:泛型是一種特殊的類型蹲盘,它把指定類型的工作推遲到客戶端代碼聲明并實(shí)例化類或方法的使用進(jìn)行股毫。也被稱為參數(shù)化類型,可以把類型當(dāng)做參數(shù)一樣傳遞過來召衔,在傳遞過來之前我不明確铃诬,但是在使用的時(shí)候就就明確了。
泛型的好處:
1.提高了程序的安全性
2.將運(yùn)行期遇到的問題轉(zhuǎn)移到了編譯期
3.省去了類型強(qiáng)轉(zhuǎn)的麻煩
泛型的常見應(yīng)用:
1.泛型類
2.泛型方法
3.泛型接口
[if !supportLists]4.8.?????????[endif]請簡述List和List之間有什么區(qū)別?
答案:List:向下限制
List :向上限制
? extends T : 代表接收的泛型類型為T類型或T子類類型
? super T :代表接收的泛型類型為T類型或T父類類型
[if !supportLists]4.9.?????????[endif]如何編寫一個(gè)泛型方法氧急,讓它能夠接受泛型參數(shù)并返回泛型類型颗胡?并舉例
答案:泛型方法,指把泛型定義在方法上吩坝,使用泛型類型來替代原始類型
public static T[] sort(T[] t){
Arrays.sort(t);
return t;
}
[if !supportLists]4.10.?????[endif]請簡述Java中如何使用泛型編寫帶有參數(shù)的類毒姨?并舉例
答案:泛型類,指把泛型定義在類上钉寝,使用泛型類型來替代原始類型
class GenericClass {
private T t;
public void setT(T t) {
this.t = t;
}
public T getT() {
return t;
}
}????
[if !supportLists]4.11.????? [endif]請簡述Set集合的特點(diǎn)弧呐?
答案:Set集合中不能存儲重復(fù)元素;
Set集合中的元素是按照某種排序規(guī)則存儲的
[if !supportLists]4.12.?????[endif]請簡述HashSet是如何保證元素唯一性的?
答案:HashSet集合中存儲的元素嵌纲,通過重寫hashCode() 與 equals()方法來保證元素唯一性?????
[if !supportLists]4.13.?????[endif]請簡述TreeSet是如何保證元素唯一性與排序的俘枫?
答案:TreeSet集合中保證元素唯一性與排序有兩種方式:
方式1:實(shí)現(xiàn)自然排序接口 Comparable,重寫 compareTo(T t)方法
方式2:實(shí)現(xiàn)比較器排序接口 Comparator逮走,重寫 compare(T t1, T t2)方法
[if !supportLists]4.14.?????[endif]請說明Map接口和Collection接口的區(qū)別
答案:Map接口是雙列集合頂層接口鸠蚪,每個(gè)位置存儲一對元素(key, value)
Collection接口是單列集合頂層接口,每個(gè)位置存儲一個(gè)元素
[if !supportLists]4.15.????? [endif]請說出Map集合的遍歷方式???
答案:Map集合遍歷方式有兩種:
方式一: 鍵找值
方式二: 鍵值對對象师溅,找鍵茅信,找值
[if !supportLists]4.16.?????[endif]請說明HashMap和Hashtable的區(qū)別
答案:HashMap:線程不同步,效率高墓臭;可以存儲null鍵null值
Hashtable:線程同步蘸鲸,數(shù)據(jù)安全;不可以存儲null鍵null值
[if !supportLists]4.17.?????[endif]請解釋Collection與Collections的區(qū)別
答案:Collection:單列集合的頂層接口窿锉,包含集合中常用的方法酌摇。
?????? Collections:集合工具類,包含獲取集合最大元素值嗡载、集合排序等方法窑多。
[if !supportLists]5.?????? [endif]IO流
[if !supportLists]5.1.?????????[endif]請說說什么是異常?異常的分類鼻疮?
答案:Java異常是java提供的用于處理程序中錯(cuò)誤的一種機(jī)制怯伊。
所謂錯(cuò)誤是指在程序運(yùn)行的過程中發(fā)生的一些異常事件(如:除0錯(cuò)誤,數(shù)組下標(biāo)越界判沟,所要讀取的文件不存在)。設(shè)計(jì)良好地程序應(yīng)該在程序異常發(fā)生時(shí)提供處理這些錯(cuò)誤的方法崭篡,使得程序不會因?yàn)楫惓5陌l(fā)送而阻斷或產(chǎn)生不可預(yù)見的結(jié)果挪哄。
Java程序的執(zhí)行過程中如出現(xiàn)異常事件,可以生成一個(gè)異常類對象琉闪,該異常對象封裝了異常事件的信息迹炼,并將被提交給java運(yùn)行時(shí)系統(tǒng),這個(gè)過程稱為拋出異常。
當(dāng)java運(yùn)行時(shí)系統(tǒng)接收到異常對象時(shí)斯入,會尋找能處理這一異常的代碼并把當(dāng)前異常對象交其處理砂碉,這一過程稱為捕獲異常。
異常的分類:
Error:稱為錯(cuò)誤刻两,由java虛擬機(jī)生成并拋出增蹭,包括動(dòng)態(tài)鏈接失敗,虛擬機(jī)錯(cuò)誤等磅摹,程序?qū)ζ洳蛔鎏幚怼?/p>
Exception:所有異常類的父類滋迈,其子類對應(yīng)了各種各樣的可能出現(xiàn)的異常事件,一般需要用戶顯示的聲明或捕獲户誓。
Runtime Exception:一類特殊的異常饼灿,如被0除、數(shù)組下標(biāo)超范圍等帝美,其產(chǎn)生比較頻繁碍彭,處理麻煩,如果顯示的聲明或捕獲將會對程序可讀性和運(yùn)行效率影響很大悼潭。因此由系統(tǒng)自動(dòng)檢測并將它們交給缺省的異常處理程序(用戶可不必對其處理)庇忌。
[if !supportLists]5.2.?????????[endif]請說出異常處理的兩種方式?
答案:捕獲異常:try...catch...finally
??? 拋出異常:throw
\ throws()
??? 其實(shí)異常部分主要講的就是五個(gè)關(guān)鍵字:try女责、catch漆枚、finally、throw抵知、throws
??? try語句:
try{...}語句制定了一段代碼墙基,這段代碼就是一次捕獲并處理異常的范圍。在執(zhí)行過程中刷喜,這段代碼可能會產(chǎn)生并拋出一種或幾種類型的異常對象残制,它后面的catch語句要分別對這些異常做相應(yīng)的處理。如果沒有異常發(fā)生掖疮,所有的catch代碼段都被略過不執(zhí)行初茶。
??? catch語句???
在catch語句塊中是對異常進(jìn)行處理的代碼,每個(gè)try語句塊可以伴隨一個(gè)或多個(gè)catch語句浊闪,用于處理可能產(chǎn)生的不同類型的異常對象恼布。在catch中聲明的異常對象(catch(XxxException e))封裝了異常事件發(fā)生的信息,在catch語句塊中可以使用這個(gè)對象的一些方法獲取這些信息搁宾。
??? finally語句:
finally語句為異常處理提供一個(gè)統(tǒng)一的出口折汞,使得在控制流程轉(zhuǎn)到程序的其他部分以前,能夠?qū)Τ绦虻臓顟B(tài)做統(tǒng)一的管理盖腿。無論try所指定的程序塊中是否拋出異常爽待,finally所指定的代碼都要執(zhí)行损同。通常在finally語句中可以進(jìn)行資源的清除工作。
throws關(guān)鍵字通常被應(yīng)用在聲明方法時(shí)鸟款,用來指定可能拋出的異常膏燃。多個(gè)異常可以使用逗號隔開何什。當(dāng)在主函數(shù)中調(diào)用該方法時(shí)组哩,如果發(fā)生異常,就會將異常拋給指定異常對象富俄。
throw關(guān)鍵字通常用在方法體中禁炒,并且拋出一個(gè)異常對象。程序在執(zhí)行到throw語句時(shí)立即停止霍比,它后面的語句都不執(zhí)行幕袱。通常throw拋出異常后,如果想在上一級代碼中捕獲并處理異常悠瞬,則需要在拋出異常的方法中使用throws關(guān)鍵字在方法聲明中指定要拋出的異常们豌;如果要捕獲throw拋出的異常,則必須使用try{}catch{}語句浅妆。
[if !supportLists]5.3.?????????[endif]請說說編譯期異常和運(yùn)行期異常的區(qū)別望迎?
答案:編譯時(shí)異常:程序正確,但因?yàn)橥庠诘沫h(huán)境條件不滿足引發(fā)凌外。對商用軟件系統(tǒng)辩尊,程序開發(fā)者必須考慮并處理這類異常。Java編譯器強(qiáng)制要求處理這類異常康辑,如果不捕獲這類異常摄欲,程序?qū)⒉荒鼙痪幾g。
??? 運(yùn)行期異常:這意味著程序存在bug疮薇,如數(shù)組越界胸墙,0被除,傳入?yún)?shù)不滿足規(guī)則等按咒,這類異常需要更改程序來避免迟隅,java編譯器強(qiáng)制要求處理這類異常。
??? 錯(cuò)誤:一般很少見励七,也很難通過程序解決智袭。它可能源于程序的bug,但一般更可能源于環(huán)境問題掠抬,如內(nèi)存耗盡补履。錯(cuò)誤在程序中無須處理,而由運(yùn)行環(huán)境處理剿另。
[if !supportLists]5.4.?????????[endif]請說說throws與throw的區(qū)別?
答案:throws關(guān)鍵字通常被應(yīng)用在聲明方法時(shí),用來指定可能拋出的異常雨女。多個(gè)異逞柙埽可以使用逗號隔開。當(dāng)在主函數(shù)中調(diào)用該方法時(shí)氛堕,如果發(fā)生異常馏臭,就會將異常拋給指定異常對象。
throw關(guān)鍵字通常用在方法體中讼稚,并且拋出一個(gè)異常對象括儒。程序在執(zhí)行到throw語句時(shí)立即停止滑沧,它后面的語句都不執(zhí)行螺垢。通常throw拋出異常后亮靴,如果想在上一級代碼中捕獲并處理異常勺鸦,則需要在拋出異常的方法中使用throws關(guān)鍵字在方法聲明中指定要拋出的異常荚孵;如果要捕獲throw拋出的異常爷辙,則必須使用try{}catch{}語句左权。
[if !supportLists]5.5.?????????[endif]請說說final拘领、finally與finalize的區(qū)別藕帜?
答案:final用于聲明屬性烫罩,方法和類,分別表示屬性不可變洽故,方法不可覆蓋贝攒,類不可繼承。內(nèi)部類要訪問局部變量时甚,局部變量必須定義成final類型隘弊。
??? finally是異常處理語句結(jié)構(gòu)的一部分,表示總是執(zhí)行撞秋。
??? finalize是Object類的一個(gè)方法长捧,在垃圾收集器執(zhí)行的時(shí)候會調(diào)用被回收對象的此方法,可以覆蓋此方法提高垃圾收集時(shí)的其他資源回收吻贿,例如關(guān)閉文件等串结。JVM不保證此方法總被調(diào)用。
[if !supportLists]5.6.?????????[endif]請說說異常的注意事項(xiàng)及如何使用異常處理舅列?
答案:1. 子類重寫父類方法時(shí)肌割,子類的方法必須拋出相同的異常或父類異常的子類帐要。
??? 2.如果父類拋出了多個(gè)異常把敞,子類重寫父類時(shí),只能拋出相同的異痴セ荩或者是他的子集奋早,子類不能拋出父類沒有的異常盛霎。
??? 3.如果被重寫的方法沒有異常拋出,那么子類的方法絕對不可以拋出異常耽装,如果子類方法內(nèi)有異常發(fā)生愤炸,那么子類只能try...catch,不能throws
[if !supportLists]5.7.?????????[endif]請說說文件名稱過濾器FilenameFilter的作用掉奄?
答案:FilenameFilter是文件名過濾器规个,用來過濾不符合規(guī)則的文件名,并返回合格的文件姓建。
[if !supportLists]5.8.?????????[endif]請說出最常見到的RuntimeException異常诞仓。
答案:
NullPointerException - 空指針引用異常
ClassCastException - 類型強(qiáng)制轉(zhuǎn)換異常
IllegalArgumentException - 傳遞非法參數(shù)異常
ArithmeticException - 算術(shù)運(yùn)算異常
ArrayStoreException - 向數(shù)組中存放與聲明類型不兼容對象異常
IndexOutOfBoundsException - 下標(biāo)越界異常
NumberFormatException - 數(shù)字格式異常???????
[if !supportLists]5.9.?????????[endif]請簡述遞歸是什么?注意事項(xiàng)是什么?
答案:所謂遞歸,是指程序調(diào)用自身速兔。注意墅拭,遞歸不會無休止地調(diào)用下去,它必然有一個(gè)出口憨栽,當(dāng)滿足條件時(shí)程序也就結(jié)束了帜矾,不然的話,那就是死循環(huán)了屑柔。
[if !supportLists]5.10.????? [endif]請簡述IO流的分類
答案:IO流
?????????? |-字節(jié)流
????????????????? |-字節(jié)輸入流InputStream
????????????????? |-字節(jié)輸出流OutputStream
?????????? |-字符流
????????????????? |-字符輸入流Reader
????????????????? |-字符輸出流Writer
[if !supportLists]5.11.?????[endif]請簡述字符編碼是什么屡萤?請說出常見字符編碼表?
答案:字符編碼(英語:Character
encoding)也稱字集碼掸宛,是把字符集中的字符編碼為指定集合中某一對象死陆,以便文本在計(jì)算機(jī)中存儲和通過通信網(wǎng)絡(luò)的傳遞。常見的例子包括將拉丁字母表編碼成摩斯電碼和ASCII唧瘾。其中措译,ASCII將字母、數(shù)字和其他符號編號饰序,并用7比特的二進(jìn)制來表示這個(gè)整數(shù)领虹。通常會額外使用一個(gè)擴(kuò)充的比特,以便以1個(gè)字節(jié)的方式存儲求豫。
常見的字符編碼表如下:
??? ASCII
??? GB2312:是一個(gè)簡體中文字符集塌衰,由6763個(gè)常用漢字和682個(gè)全角的非漢字字符組成。
GBK:GBK編碼標(biāo)準(zhǔn)兼容GB2312蝠嘉,共收錄漢字21003個(gè)最疆、符號883個(gè),并提供1894個(gè)造字碼位蚤告,簡努酸、繁體字融于一庫
GB18030:是在GBK基礎(chǔ)上增加了一部分漢字
??? Big5:在臺灣、香港與澳門地區(qū)杜恰,使用的是繁體中文字符集
Unicode:將世界上所有的符號都納入其中获诈,無論是英文仍源、日文、還是中文等烙荷,大家都使用這個(gè)編碼表镜会,這樣就利于同一的管理,在這個(gè)編碼表中每一個(gè)字符占兩個(gè)字節(jié)
??? UTF-8:為了提高Unicode的編碼效率,于是就出現(xiàn)了UTF-8編碼终抽。UTF-8可以根據(jù)不同的符號自動(dòng)選擇編碼的長短。比如英文字母可以只用1個(gè)字節(jié)就夠了桶至。
[if !supportLists]5.12.?????[endif]請說出學(xué)習(xí)過的IO流中的常用方法昼伴?
答案:字節(jié)輸入流InputStream
??? read()讀取一個(gè)字節(jié)
??? read(byte[])讀取一個(gè)字節(jié)數(shù)組
字節(jié)輸出流
??? write(int)寫入一個(gè)字節(jié)
??? write(byte[])寫入一個(gè)字節(jié)數(shù)組
字符輸入流
??? read()讀取一個(gè)字符
??? read(char[])讀取一個(gè)字符數(shù)組
字符緩沖輸入流
??? readLine()讀取一行字符串
字符輸出流
??? write(int)寫入一個(gè)字符
??? write(char[])寫入一個(gè)字符數(shù)組
??? write(String)寫入一個(gè)字符串
字符緩沖輸出流
??? newLine()寫入一個(gè)換行符
[if !supportLists]5.13.?????[endif]請說出轉(zhuǎn)換流OutputStreamWriter與InputStreamReader 的作用?
答案:OutputStreamWriter:使用編碼表對字節(jié)流的數(shù)據(jù)進(jìn)行編碼
InputStreamReader:使用編碼表對字節(jié)流中的數(shù)據(jù)進(jìn)行解碼
[if !supportLists]5.14.?????[endif]請簡述打印流(PrintStream镣屹、PrintWriter)的特點(diǎn)圃郊?
答案:PrintStream在OutputStream基礎(chǔ)之上提供了增強(qiáng)的功能,即可以方便地輸出各種類型的數(shù)據(jù)(而不僅限于byte類型)的格式化表示形式女蜈。PrintStream的方法從不拋出IOException
??? PrintWriter提供了PrintStream的所有打印方法持舆,其方法也從不拋出IOException。
與PrintStream的區(qū)別:作為處理流使用時(shí)伪窖,PrintStream只能封裝OutputStream類型的字節(jié)流逸寓,而PrintWriter既可以封裝OutputStream類型的字節(jié)流,還能夠封裝Writer類型的字符輸出流并增強(qiáng)其功能覆山。