1.?????????????? Java基礎知識... 5
1.4.???? java程序經編譯后產生的字節碼文件擴展名是什么?... 5
1.5.???? 請說明環境變量Path 與 classpath 區別?... 5
1.8.???? 請解釋Java語言的跨平臺特性?... 6
1.9.???? 請說明JDK、JRE、JVM的區別?... 6
1.10.??????????? 注釋的分類及作用?... 6
1.11.??????????? 請說出Java中數據類型的分類?基本數據類型都有哪些?. 6
1.13.??????????? 變量的定義格式是什么?. 7
1.14.??????????? Java中數據的類型轉換有幾種?分別是什么?. 7
1.15.??????????? Java語言中的字符char可以存儲一個中文漢字嗎?為什么呢?. 7
1.16.??????????? 請說明 && 和 & 的區別?... 7
1.17.??????????? 請說明 == 與 = 的區別?... 7
1.18.??????????? 三元運算符的基本格式是什么?... 7
1.19.??????????? 三元運算符的執行流程是什么?... 8
1.20.??????????? 使用鍵盤錄入數據的三個步驟是什么?... 8
1.21.??????????? 請說明for、while、do...while三種循環的格式以及執行流程,以及它們的區別。??? 8
1.22.??????????? 定義一個方法的格式是什么,以及方法的注意事項?. 9
1.23.??????????? 請解釋什么是方法的重載?. 9
1.24.??????????? 數組有幾種創建的方式?分別是什么?... 9
2.1.???? 類是什么? 對象是什么?舉例說明... 9
2.4.???? 什么是匿名對象?什么時候使用匿名對象?... 10
2.5.???? 使用面向對象【封裝】的好處有哪些?... 10
2.6.???? private關鍵字在哪里使用? 被private 修飾的成員有什么特點?... 10
2.7.???? 為什么要有 this 關鍵字?this 關鍵字的含義?... 10
2.8.???? 構造方法的作用是什么?構造方法的特點是什么?構造方法的注意事項? 構造方法中可不可以寫return語句呢?... 11
2.9.???? 一個類的缺省構造方法可以有參數嗎?... 11
2.10.??????????? 靜態變量與成員變量的區別?... 11
2.11.??????????? 請說明一個對象的創建過程做了哪些事情?... 11
2.12.??????????? 繼承的好處是什么?... 12
2.13.??????????? Java中的類的繼承特點是什么以及繼承的注意事項?... 12
2.14.??????????? this和 super 分別是什么,他們各自的應用場景是什么?... 12
2.15.??????????? 什么是方法重寫?需要注意哪些問題?... 12
2.16.??????????? 方法重寫和重載有什么區別?... 12
2.17.??????????? 子父類中構造方法的執行有什么特點?為什么要這樣?... 13
2.18.??????????? 靜態代碼塊,構造代碼塊,構造方法的執行順序是什么以及執行特點?... 13
2.19.??????????? final關鍵字是什么意思,可以修飾那些成員?被修飾的成員有哪些特點???? 13
2.20.??????????? 什么是多態,多態的前提是什么?. 13
2.21.??????????? 多態中成員(成員變量,成員方法,靜態成員方法)的訪問特點是什么?. 13
2.23.??????????? 多態的弊端是什么,如果我們想訪問子類的特有的功能我們應該怎么辦?. 14
2.24.??????????? 抽象類是什么,抽象類的特點?. 14
2.25.??????????? 抽象類中有沒有構造方法,如果有它是用來做什么的?. 14
2.26.??????????? 接口中成員變量的特點,以及成員方法的特點?. 14
2.27.??????????? 請說出類與類,類與接口,以及接口與接口的關系以及特點?. 14
2.28.??????????? 抽象類和接口的區別?. 15
2.29.??????????? 形式參數是基本類型要的是什么?是類名要的是什么?是抽象類名要的是什么?是接口名要的是什么?? 15
2.30.??????????? 返回值類型是基本類型返回的是什么?是類名返回的是什么?是抽象類名返回的是什么?是接口名返回的是什么?. 15
2.31.??????????? package它有什么作用?... 16
2.32.??????????? import的作用?. 16
2.33.??????????? 內部類有哪些訪問特點?... 16
2.34.??????????? 匿名內部類的格式是什么?其本質是什么?. 16
3.1.???? 請解釋 ==與equals()方法的區別?... 16
3.2.???? 下面這條語句一共創建了多少個對象:String s = “a”+“b”+”c”; 分別都是什么?... 16
3.3.???? 如何實現StringBuffer和String的相互轉換?... 16
3.4.???? 如何實現String和int數據的相互轉換... 17
3.5.???? 如何實現 基本數據類型 與 基本數據封裝類 之間的相互轉換... 17
3.6.???? 請說明String與StringBuffer二者之間的區別?... 17
3.7.???? 請說明StringBuffer與StringBilder二者之間的區別?... 17
3.9.???? 如何實現Date與long相互轉換?. 17
3.10.??????????? 如何實現Date與String相互轉換?... 18
4.4.???? 請簡述ArrayList、Vector、LinkedList三者的特點?... 18
4.5.???? 請簡述ArrayList、Vector、LinkedList,分別在什么時候使用?... 18
4.6.???? 請簡述并發修改異常產生的原因?如何解決?... 19
4.7.???? 請簡述泛型是什么?有什么用?在哪里用?... 19
4.8.???? 請簡述List和List之間有什么區別?... 19
4.9.???? 如何編寫一個泛型方法,讓它能夠接受泛型參數并返回泛型類型?并舉例... 19
4.10.??????????? 請簡述Java中如何使用泛型編寫帶有參數的類?并舉例... 19
4.11.??????????? 請簡述Set集合的特點?... 20
4.12.??????????? 請簡述HashSet是如何保證元素唯一性的?. 20
4.13.??????????? 請簡述TreeSet是如何保證元素唯一性與排序的?... 20
4.14.??????????? 請說明Map接口和Collection接口的區別... 20
4.15.??????????? 請說出Map集合的遍歷方式... 20
4.16.??????????? 請說明HashMap和Hashtable的區別... 20
4.17.??????????? 請解釋Collection與Collections的區別... 20
5.1.???? 請說說什么是異常?異常的分類?... 20
5.3.???? 請說說編譯期異常和運行期異常的區別?... 22
5.4.???? 請說說throws與throw的區別?... 22
5.5.???? 請說說final、finally與finalize的區別?... 22
5.6.???? 請說說異常的注意事項及如何使用異常處理?... 22
5.7.???? 請說說文件名稱過濾器FilenameFilter的作用?... 23
5.8.???? 請說出最常見到的RuntimeException異常。... 23
5.9.???? 請簡述遞歸是什么?注意事項是什么?. 23
5.10.??????????? 請簡述IO流的分類... 23
5.11.??????????? 請簡述字符編碼是什么?請說出常見字符編碼表?... 23
5.12.??????????? 請說出學習過的IO流中的常用方法?... 24
5.13.??????????? 請說出轉換流OutputStreamWriter與InputStreamReader 的作用?... 24
5.14.??????????? 請簡述打印流(PrintStream、PrintWriter)的特點?... 24
[if !supportLists]1.?????? [endif]Java基礎知識
[if !supportLists]1.1.?????????[endif]Java源程序的擴展名是什么?
答案:擴展名是.java
[if !supportLists]1.2.?????????[endif]什么是標識符?
答案:在Java語言中凡是我們可以自己起名字的都是標識符。
[if !supportLists]1.3.?????????[endif]標識符有哪些特點?
答案:標識符由英文大小寫字母、數字字符、$和_組成,不能以數字開頭,也不能是java中關鍵字,并區分大小寫
[if !supportLists]1.4.?????????[endif]?java程序經編譯后產生的字節碼文件擴展名是什么?
答案:字節碼文件擴展名是.class
[if !supportLists]1.5.?????????[endif]請說明環境變量Path與 classpath 區別?
答案:path是系統用來指定可指定文件的完整路徑。Path是用來搜索所執行的可執行文件路徑的,如果執行的可執行文件不在當前目錄下,那就會依次搜索path中設置的路徑。
classpath是指定你在程序中所使用的類(.class)文件所在的位置。
[if !supportLists]1.6.?????????[endif]請說出常用的DOS命令并解釋?
答案:d: 回車 : 盤符切換
dir (directory) :列出當前目錄下的文件以及文件夾
cd (change directory) : 改變指定目錄(進入指定目錄)
cd.. : 退回到上一層目錄
cd\ : 退回到跟目錄
md (make directory) :創建目錄
rd (remove directory) :刪除目錄
del (delete) :刪除文件,刪除一堆后綴名一樣的文件*.txt
cls (clear screen) :清屏
exit:退出dos命令行
[if !supportLists]1.7.?????????[endif]請寫出以下標識符的命名規則
答案:包:全部小寫
單層包:小寫,舉例:itcast,com
多層包:小寫,并用 . 隔開,舉例:cn.itcast,com.baidu
類或者接口:
一個單詞:首字母大寫,舉例:Student,Demo
多個單詞:每個單詞首字母大寫,舉例:HelloWorld,StudentName
方法或者變量:
一個單詞:首字母小寫,舉例:name,main
多個單詞:從第二個單詞開始,每個單詞首字母大寫,舉例:studentAge,showStudentNames()
常量:全部大寫
一個單詞:大寫,舉例:PI
多個單詞:大寫,并用 _ 隔開,舉例:STUDENT_MAX_AGE
[if !supportLists]1.8.?????????[endif]請解釋Java語言的跨平臺特性?
答案:Java語言是跨平臺運行的,其實就是不同的操作系統,使用不同的JVM映射規則,讓其與操作系統無關,完成了跨平臺性。JVM對上層的Java源文件是不關心的,它關注的只是由源文件生成的類文件(class file)。
[if !supportLists]1.9.?????????[endif]請說明JDK、JRE、JVM的區別?
答案:JDK: Java Development
Kit(Java開發工具包)。JDK是整個JAVA的核心,包括了Java運行環境(Java Runtime Environment),一堆Java工具(javac/java/javap等)
JRE:Java Runtime Environment(java運行時環境)。也就是我們說的JAVA平臺。所有的Java程序都要在JRE下才能運行。包括JVM和JAVA核心類庫和支持文件。與JDK相比,它不包含開發工具(編譯器、調試器和其他工具)。
JVM:Java Virtual Mechinal(JAVA虛擬機)。JVM是JRE的一部分,它是一個虛構出來的計算機,是通過在實際的計算機上仿真模擬各種計算機功能來實現的。
[if !supportLists]1.10.????? [endif]注釋的分類及作用?
答案:單行注釋、多行注釋、文檔注釋
單行注釋:注釋單行代碼或為單行代碼添加描述的時候使用
多行注釋:注釋多行代碼或為代碼添加多行描述的時候使用
文檔注釋:生產java幫助文檔的時候使用,開發中常用來描述類、描述方法
[if !supportLists]1.11.?????[endif]請說出Java中數據類型的分類?基本數據類型都有哪些?
答案:
基本數據類型
|- byte?????????1
|- short?????????2
|- int???????????4
|- long?? ???????8
|- float?????????4
|- double???????8
|- char?????????2
|- boolean??????1
引用數據類型
|- 數組
|- 類
|- 接口
[if !supportLists]1.12.?????[endif]變量是什么?
答案:變量,在程序運行時,值可以被修改的量。
[if !supportLists]1.13.????? [endif]變量的定義格式是什么?
答案:數據類型 變量名 = 變量值;
[if !supportLists]1.14.?????[endif]Java中數據的類型轉換有幾種?分別是什么?
答案:強制類型轉換:容量大的類型向容量小的類型轉換時使用
隱式類型轉換:容器小的類型向容量大的類型轉換時使用
[if !supportLists]1.15.?????[endif]Java語言中的字符char可以存儲一個中文漢字嗎?為什么呢?
答案:char型變量是用來存儲Unicode編碼的字符的,unicode編碼字符集中包含了漢字,所以,char型變量中可以存儲漢字。不過,如果某個特殊的漢字沒有被包含在unicode編碼字符集中,那么,這個char型變量中就不能存儲這個特殊漢字。補充說明:unicode編碼占用兩個字節,所以,char類型的變量也是占用兩個字節。
[if !supportLists]1.16.?????[endif]請說明 && 和 & 的區別?
答案:&和&&都可以用作邏輯與的運算符,表示邏輯與(and),當運算符兩邊的表達式的結果都為true時,整個運算結果才為true,否則,只要有一方為false,則結果為false。
&&還具有短路的功能,即如果第一個表達式為false,則不再計算第二個表達式
&還可以用作位運算符,當&操作符兩邊的表達式不是boolean類型時,&表示按位與操作。
[if !supportLists]1.17.?????[endif]請說明 == 與 =的區別?
答案:==: 比較運算符,用來比較操作符兩邊的變量的值是否相等。
= : 賦值運算符,把操作符右邊的值,賦值給左邊的變量
[if !supportLists]1.18.?????[endif]三元運算符的基本格式是什么?
答案:? 三元運算符的格式是:???? 條件表達式 ? 表達式1 : 表達式2 ;
[if !supportLists]1.19.????? [endif]三元運算符的執行流程是什么?
答案:? 三元運算符的執行流程: 首先計算條件表達式的值看其返回結果是true還是false,如果是true就執行表達式1,如果是false就執行表達式2
[if !supportLists]1.20.?????[endif]使用鍵盤錄入數據的三個步驟是什么?
答案:? 第一步導包:格式:???? importjava.util.Scanner ;位置:?????? 在class上邊
第二步創建Scanner對象,格式:??? Scanner sc = new Scanner(System.in) ;
第三步獲取鍵盤錄入數據:格式:????? int x= sc.nextInt() ;
[if !supportLists]1.21.?????[endif]請說明for、while、do...while三種循環的格式以及執行流程,以及它們的區別。
答案:for循環語句格式:
for(初始化語句;判斷條件語句;控制條件語句) {
???????? 循環體語句;
}
執行流程:
a) 執行初始化語句
b) 執行判斷條件語句,看其結果是true還是false,如果是false,循環結束;如果是true,繼續執行。
c) 執行循環體語句
d) 執行控制條件語句
e) 回到b繼續
while循環語句格式:
while(判斷條件語句) {
??????? 循環體語句;
}
執行流程:
a) 執行判斷條件語句,看其結果是true還是false
如果是false,循環結束。
如果是true,繼續執行。
b) 執行循環體語句
c) 回到a繼續
do…while循環語句格式:
do {
循環體語句;
}while((判斷條件語句);
執行流程:
a) 執行循環體語句
b) 執行判斷條件語句,看其結果是true還是false,如果是false,循環結束;如果是true,繼續執行。
c) 回到a繼續
三種循環語句的區別:
a) do...while循環至少會執行一次循環體
b) for循環和while循環只有在條件成立的時候才會去執行循環體
注意:寫程序優先考慮for循環,再考慮while循環,最后考慮do...while循環
[if !supportLists]1.22.?????[endif]定義一個方法的格式是什么,以及方法的注意事項?
答案:修飾符 返回值類型 方法名(參數類型 參數名1, 參數類型 參數名2 ….){
方法體;
??? return返回值;
}
注意事項:
??? A:?? 方法不調用不執行
??? B:?? 方法與方法是平級關系,不能嵌套定義
??? C:?? 方法定義的時候參數之間用逗號隔開
??? D:?? 方法調用的時候不用在傳遞數據類型
??? E:??? 如果方法有明確的返回值,一定要有return帶回一個值
[if !supportLists]1.23.????? [endif]請解釋什么是方法的重載?
答案:方法重載指在同一個類中,允許存在一個以上的同名方法,只要它們的參數個數或者參數類型不同即可。
方法重載特點:
a) 與返回值類型無關,只看方法名和參數列表
b) 在調用時,虛擬機通過參數列表的不同來區分同名方法
[if !supportLists]1.24.?????[endif]數組有幾種創建的方式?分別是什么?
答案:2種。動態創建和靜態創建。
[if !supportLists]2.?????? [endif]面向對象
[if !supportLists]2.1.?????????[endif]類是什么? 對象是什么?舉例說明
答案:類是一組相關屬性和行為的集合是一個抽象的東西,對象則是該類的一個具體的體現。
舉例:? 學生就是一個類,然后每一個學生都是學生的一個個具體的體現,所以每一個學生就是一個學生。
[if !supportLists]2.2.?????????[endif]類由哪些內容組成?
答案:類由成員變量和成員方法組成
成員變量對應的就是事物的屬性(就是事物固有的信息,比如: 人的屬性有身高 , 姓名 , 年齡 , 學歷...) , 成員方法對應的是行為(行為: 就是該事物可以做的事情,比如:人的行為有: 吃飯,睡覺....)
[if !supportLists]2.3.?????????[endif]成員變量與局部變量的區別?
答案:
??? A:在類中的位置不同
?????????? 成員變量:在類中方法外
?????????? 局部變量:在方法定義中或者方法聲明上
??? B:在內存中的位置不同
?????????? 成員變量:在堆內存
?????????? 局部變量:在棧內存
??? C:生命周期不同
?????????? 成員變量:隨著對象的創建而存在,隨著對象的消失而消失
?????????? 局部變量:隨著方法的調用而存在,隨著方法的調用完畢而消失
??? D:初始化值不同
?????????? 成員變量:有默認初始化值
?????????? 局部變量:沒有默認初始化值,必須定義,賦值,然后才能使用。
[if !supportLists]2.4.?????????[endif]什么是匿名對象?什么時候使用匿名對象?
答案:匿名對象指:沒有起名字的對象
使用匿名對象:
a:調用方法,僅僅只調用一次的時候
b:匿名對象可以作為實際參數傳遞
[if !supportLists]2.5.?????????[endif]使用面向對象【封裝】的好處有哪些?
答案:隱藏實現細節,提供公共的訪問方式;
提高了代碼的復用性;
提高安全性。
[if !supportLists]2.6.?????????[endif]private 關鍵字在哪里使用? 被 private 修飾的成員有什么特點?
答案:類中的成員需要私有的時候使用private關鍵字
特點:
是一個權限修飾符。
可以修飾成員(成員變量和成員方法)
被private修飾的成員只在本類中才能訪問
[if !supportLists]2.7.?????????[endif]為什么要有 this 關鍵字?this 關鍵字的含義??
答案:this用來解決成員變量與局部變量重名問題
this關鍵字代表的是本類對象引用;誰調用我,this就代表誰.
[if !supportLists]2.8.?????????[endif]構造方法的作用是什么?構造方法的特點是什么?構造方法的注意事項? 構造方法中可不可以寫return 語句呢?
答案:構造方法的作用是用于給類的成員變量賦值,完成類的初始化工作
?????? 構造方法的特點:
????????????? 構造方法的名稱和類名相同
????????????? 構造方法沒有返回值類型,連void也沒有
????????????? 構造方法沒有具體的返回值
?????? 構造方法的注意事項:
a: 如果一個類沒有給出構造方法,系統將會提供一個默認無參的構造方法
b: 如果我們給出類構造方法,系統將不會提供默認無參的構造方法,這個時候如果我們還想使用無參的構造方法來創建對象,那么就需要我們給出無參的構造方法
?????? 可以寫空的return語句.
[if !supportLists]2.9.?????????[endif]一個類的缺省構造方法可以有參數嗎?
答案:? 一個類的缺省構造方法沒有參數
[if !supportLists]2.10.?????[endif]靜態變量與成員變量的區別?
答案:1:所屬不同
?????????? 靜態變量屬于類,所以也稱為為類變量
?????????? 成員變量屬于對象,所以也稱為實例變量(對象變量)
??? 2:內存中位置不同
?????????? 靜態變量存儲于方法區的靜態區
?????????? 成員變量存儲于堆內存
??? 3:內存出現時間不同
?????????? 靜態變量隨著類的加載而加載,隨著類的消失而消失
?????????? 成員變量隨著對象的創建而存在,隨著對象的消失而消失
??? 4:調用不同
?????????? 靜態變量可以通過類名調用,也可以通過對象調用
?????????? 成員變量只能通過對象名調用
[if !supportLists]2.11.?????[endif]請說明一個對象的創建過程做了哪些事情?
答案:Student s = newStudent();
1:將Student.class 字節碼文件加載到內存
2: 在棧內存中,開辟一個空間存儲 s變量,用來記錄Student對象的引用
3: 在堆內存中,開辟一個空間存儲 new Student()對象的成員信息
2:加載類中靜態成員
3:執行類中靜態代碼塊
4:加載對象中普通成員
5:執行構造代碼塊
6:執行構造方法
7:將new Student()的地址賦值給 s 變量
[if !supportLists]2.12.????? [endif]繼承的好處是什么?
答案: A: 提高了代碼的維護型
??? B:提供了代碼的復用性
??? C:讓類與類之間產生了關系, 是多態的前提
[if !supportLists]2.13.?????[endif]Java 中的類的繼承特點是什么以及繼承的注意事項?
答案:繼承的特點:????? 在java語言中類的繼承只支持單繼承,不支持多繼承.但是可以多層繼承。
繼承的注意事項:
A: 子類只能繼承父類非私有的成員
B: 子類不能繼承父類的構造方法,但是可以通過super去訪問父類的構造方法
??? C:不要為了某個功能去使用繼承
[if !supportLists]2.14.?????[endif]this 和 super 分別是什么,他們各自的應用場景是什么?
答案:this代表的是本類對象的引用 , 誰調用我這個方法,這個方法里邊的this就代表誰。一般的使用場景是,當局部變量隱藏了成員變量的時候,我們可以使用this去明確指定要訪問的是成員變量
super代表的是父類存儲空間的一個標志(可以理解為父類對象的引用),我們可以使用super來訪問父類的成員
[if !supportLists]2.15.?????[endif]什么是方法重寫?需要注意哪些問題?
答案:方法重寫:指子類中出現了和父類中一模一樣的方法聲明,也被稱為方法覆蓋,方法復寫
需要注意的問題:
父類中私有方法不能被重寫
子類重寫父類方法時,訪問權限不能更低
父類靜態方法,子類也必須通過靜態方法進行重寫。(其實這個算不上方法重寫,但是現象確實如此)
[if !supportLists]2.16.?????[endif]方法重寫和重載有什么區別?
答案:重載Overload表示同一個類中可以有多個名稱相同的方法,但這些方法的參數列表各不相同(即參數個數或類型不同),與返回值類型無關。
重寫Override是發生在子父類中的一個現象, 子類中出現了和父類中一模一樣的方法,與返回值有關.
[if !supportLists]2.17.?????[endif]子父類中構造方法的執行有什么特點?為什么要這樣?
答案:1、子類有所有的構造方法默認都會訪問父類中空參數的構造方法。
因為子類會繼承父類中的數據,可能還會使用父類的數據。所以,子類初始化之前,一定要先完成父類數據的初始化。每一個構造方法的第一條語句默認都是:super()
2、如果父類中沒有空參數的構造方法,通過下列方式解決
a) 子類通過super去顯示調用父類其他的帶參的構造方法
b) 子類通過this去調用本類的其他構造方法(本類其他構造也必須首先可以訪問了父類構造)
注意:super(...)或者this(...)必須出現在第一條語句上,否則,就會有父類數據的多次初始化
[if !supportLists]2.18.?????[endif]靜態代碼塊,構造代碼塊,構造方法的執行順序是什么以及執行特點?
答案:A: 先執行所有的靜態代碼塊,再執行所有的構造代碼塊,最后執行構造方法??
B: 靜態代碼塊只執行一次, 構造代碼塊和構造方法,每創建一次對象就執行一次
[if !supportLists]2.19.?????[endif]final 關鍵字是什么意思,可以修飾那些成員?被修飾的成員有哪些特點?
答案:final最終的意思。
final可以修飾類,成員變量,成員方法
final修飾類,此類不能被繼承。
final修飾變量,變量就成了常量,只能被賦值一次
final修飾方法,方法不能被重寫
[if !supportLists]2.20.?????[endif]什么是多態,多態的前提是什么?
答案:一種事物在不同時刻表現出來的狀態就是多態
多態的前提:
a: 需要有繼承
b: 需要有方法重寫(其實沒有也是可以的,但是沒有意義),不同狀態的表現就是就是靠方法重寫體現的
c: 需要有父類的引用指向子類對象:Fu f = new 子類();
[if !supportLists]2.21.?????[endif]多態中成員(成員變量,成員方法,靜態成員方法)的訪問特點是什么?
答案:???????? 訪問成員變量:? 編譯看左邊 , 運行看左邊?? (因為成員變量其實就是屬性,屬性就是只該事物的描述信息,所以使用父類在訪問的時候,訪問的就是父類的成員變量)
成員方法:編譯看左邊,運行看右邊(這個是多態的本質,存在動態綁定的機制)
靜態成員方法:? 編譯看左邊,運行看左邊(所以說靜態算不上重寫)
[if !supportLists]2.22.????? [endif]多態的好處?
答案:? A:提供了代碼的維護性(通過繼承保證)
B:提供了代碼的擴展性(通過多態保證),這個特點也體現了多態的最常見的應用,作為參數傳遞.
[if !supportLists]2.23.?????[endif]多態的弊端是什么,如果我們想訪問子類的特有的功能我們應該怎么辦?
答案:? 多態的弊端,不能訪問子類中特有的功能
如果我們還想使用子類中特有的功能,我們需要使用向下轉型(向下轉型: 就是將父類的引用強制轉換成子類的引用,在向下轉型的過程中需要注意一個異常: ClassCastException)
[if !supportLists]2.24.?????[endif]抽象類是什么,抽象類的特點?
答案:使用了關鍵字abstract聲明的類叫做“抽象類”。如果一個類里包含了一個或多個抽象方法,類就必須指定成abstract(抽象)。“抽象方法”,屬于一種不完整的方法,只含有一個聲明,沒有方法主體。
抽象類的特點:
A: 抽象類的定義格式: abstractclass類名{}
抽象方法的定義格式:?? publicabstract返回值類型 方法名();
B:抽象類中可以存在抽象方法,也可以存在非抽象方法
??? C:抽象類不能直接進行實例化,我們可以使用多態的形式進行進行間接實例化
D:抽象類的子類
可以是抽象類(沒有意思,如果子類還是抽象類,那么我們還是不能進行實例化,還需要一個子類去繼承),也可以是非抽象類(存在一個前提: 子類必須重寫父類的抽象方法)
[if !supportLists]2.25.?????[endif]抽象類中有沒有構造方法,如果有它是用來做什么的?
答案: 抽象類雖然不能進行實例化,但是抽象類中是存在構造方法,該構造方法的作用是用于子類訪問父類數據是的初始化.
[if !supportLists]2.26.?????[endif]接口中成員變量的特點,以及成員方法的特點?
答案:接口中的成員變量都是常量,存在默認的訪問修飾符:public static final
接口中的成員方法的特點: 都是抽象方法,存在默認的訪問修飾符: public abstract
[if !supportLists]2.27.?????[endif]請說出類與類,類與接口,以及接口與接口的關系以及特點?
答案:類與類是繼承的關系,只支持單繼承,可以是多層繼承。
類與接口是實現的關系,可以是多實現
一個類可以繼承一個類的同時,還可以實現多個接口
接口與接口是繼承的關系,可以是單繼承也可以是多繼承
[if !supportLists]2.28.?????[endif]抽象類和接口的區別?
答案:A:成員區別
抽象類:
成員變量:可以變量,也可以常量
構造方法:有
成員方法:可以抽象,也可以非抽象
??? 接口:
??? ?????? 成員變量:只可以常量
??? ?????? 成員方法:只可以抽象?
B:關系區別
類與類
繼承,單繼承
??? 類與接口
?????????? 實現,單實現,多實現
??? 接口與接口
?????????? 繼承,單繼承,多繼承?
C:設計理念區別
??? 抽象類?????? 被繼承體現的是:”is a”的關系。? 抽象類中定義的是該繼承體系的共性功能。
??? 接口??? 被實現體現的是:”like a”的關系。????? 接口中定義的是該繼承體系的擴展功能。
[if !supportLists]2.29.????? [endif]形式參數是基本類型要的是什么?是類名要的是什么?是抽象類名要的是什么?是接口名要的是什么?
答案: 形式參數是基本類型要的是一個基本類型的變量或者具體的常量值
是類名的時候要的是一個該類的對象
是抽象類名的時候的要的是一個繼承自該類的一個子類對象
是接口的時候要的是一個實現了該接口的子類對象
[if !supportLists]2.30.????? [endif]返回值類型是基本類型返回的是什么?是類名返回的是什么?是抽象類名返回的是什么?是接口名返回的是什么?
答案:返回值是基本數據類型的時候返回的是一個具體的值
是類名的時候,本質上返回的是一個該類對應的子類對象
是抽象類名的時候返回的應該是一個繼承自該類的子類對象
是接口名的時候返回的是一個實現了該接口的子類對象
[if !supportLists]2.31.????? [endif]package它有什么作用?
答案:package,包的意思,其實就是文件夾,它可以對類進行分類管理
[if !supportLists]2.32.????? [endif]import的作用?
答案:在不同包下的類之間相互訪問的時候,發現,每次使用不同包下的類的時候,都需要加包的全路徑。比較麻煩,這個時候,java就提供了( import )導包的功能。使用import可以將包中的類導入進來,以后使用類的時候,不需導包,直接使用,簡化了書寫。
[if !supportLists]2.33.????? [endif]內部類有哪些訪問特點?
答案:1. 內部類可以直接訪問外部類的成員,包括私有
2. 外部類要訪問內部類的成員,必須先創建內部類對象
[if !supportLists]2.34.?????[endif]匿名內部類的格式是什么?其本質是什么?
答案:? 匿名內部類的格式:
new 類名或者接口名() {
方法重寫;
} ;
本質:? 匿名內部類本質是一個繼承了某一個類或者實現了某一個接口的子類對象
[if !supportLists]3.?????? [endif]常用API
[if !supportLists]3.1.?????????[endif]請解釋 ==與equals()方法的區別?
答案:== 號比較基本數據類型比較的是值,比較引用數據類型比較的是地址值
equals方法只能比較引用數據類型,默認比較的是地址值,如果我們想要建立自己的比較方式,我們就需要復寫equals方法
[if !supportLists]3.2.?????????[endif]下面這條語句一共創建了多少個對象:String s =
“a”+“b”+”c”; 分別都是什么?
答案:5個對象,分別是"a" , "b" , "c" , "ab" ,
"abc",因為字符串的特點是一旦被創建就不能被改變,所有在使用常量進行相加的時候,都是在創建新的字符串對象,最后在把字符串"abc"這個常量值賦值給引用變量s
[if !supportLists]3.3.?????????[endif]如何實現StringBuffer和String的相互轉換?
答案:StringBuffer轉換到 String的方式:
1.??? 通過String類的構造方法
2.??? 通過StringBuffer類中的toString()方法
3.??? 通過StringBuffer類中的substring()方法 (注:不常用)
String 轉換到 StringBuffer的方式:
1.??? 通過StringBuffer類的構造方法
2.??? 通過StringBuffer類的append()、insert()方法
[if !supportLists]3.4.?????????[endif]如何實現String和int數據的相互轉換
答案:String轉換到 int的方式:
1.??? String–Integer -- int通過Integer類的intValue()方法
2.??? 通過Integer類的parseInt(String
s)方法
Int 轉換到 String的方式:
1.??? Int– Integer–String? Integer的toSting()
2.??? 通過String類的valueOf()方法
3.??? 通過Integer類的toSting(int
i)方法
4.??? 通過與字符串""相連接
[if !supportLists]3.5.?????????[endif]如何實現 基本數據類型 與 基本數據封裝類 之間的相互轉換
答案:基本數據類型 轉換到 包裝類的方式:
1.??? 通過包裝類的構造方法
2.??? 通過包裝類的靜態方法valueOf()
包裝類 轉換到 基本數據類型的方式:
1.??? 通過包裝類的方法xxxValue()
[if !supportLists]3.6.?????????[endif]請說明String與StringBuffer二者之間的區別?
答案:Java平臺提供了兩個類:String和StringBuffer,他們可以存儲和操作字符串,即包含多個字符的字符數據。String類表示內容不可以改變的字符串;而StringBuffer類表示內容可以被修改的字符串。
[if !supportLists]3.7.?????????[endif]請說明StringBuffer與StringBilder二者之間的區別?
答案:StringBuffer和StringBuilder類都表示內容可以被修改的字符串,StringBilder是線程不安全的,運行效率高,如果一個字符串變量是在方法里面定義,這種情況只可能有一個線程訪問它,不存在不安全的因素了,則用StringBuilder。如果要在類里面定義成員變量,并且這個類的實例對象會在多線程環境下使用,那么最好用StringBuffer。
[if !supportLists]3.8.?????????[endif]什么是正則表達式?
答案:正則表達式使用單個字符串來描述、匹配一系列符合某個句法規則的字符串。在很多文本編輯器里,正則達表示通常被用來檢索、替換那些符合某個模式的文本。
[if !supportLists]3.9.?????????[endif]如何實現Date與long相互轉換?
答案:Date 轉換到 long的方式:通過Date類的getTime()方法
long 轉換到 Date的方式:通過Date類的構造方法
[if !supportLists]3.10.?????[endif]如何實現Date與String相互轉換?
答案:Date 轉換到String的方式:
1.??? Date類的toString()方法
2.??? DateFormat類的format()方法
String 轉換到 Date的方式:
1. Date類的構造方法(已過時,被DateFormat類的parse(String
s)方法取代)
2. DateFormat類的parse()方法
[if !supportLists]4.?????? [endif]集合框架
[if !supportLists]4.1.?????????[endif]請簡述集合和數組的異同點?
答案:集合:
可以存儲不同類型的元素(通常使用存儲一種類型元素)
集合的長度可以改變
數組:
?????????? 必須存儲相同一類型的元素
?????????? 數組的長度固定
[if !supportLists]4.2.?????????[endif]請簡述迭代器是一個什么玩意?
答案:迭代器就是對容器中的元素進行遍歷,每次取出一個元素,然后對元素進行操作。
[if !supportLists]4.3.?????????[endif]請簡述常見的數據結構有哪些?
答案:線性表、鏈表、棧、隊列、樹、哈希表
[if !supportLists]4.4.?????????[endif]請簡述ArrayList、Vector、LinkedList三者的特點?
答案:ArrayList:底層數組結構;線程不同步,效率高;元素查找快、增刪慢;
Vector:底層數組結構;線程同步,安全;元素查找快、增刪慢;
LinkedList:底層鏈表結構,線程不同步,效率高;元素增刪快、查找慢
[if !supportLists]4.5.?????????[endif]請簡述ArrayList、Vector、LinkedList,分別在什么時候使用?
答案:程序是否要考慮線程安全?
是:Vector
否: 查找操作多還是增刪操作多?
查找多:ArrayList
增刪多:LinkedList
[if !supportLists]4.6.?????????[endif]請簡述并發修改異常產生的原因?如何解決??????
答案:ConcurrentModificationException并發修改異常,在迭代器迭代的過程中,集合中的元素個數發生了改變,此時導致并發修改異常。
解決方式:
1. 通過列表迭代器自帶的方法完成元素增刪操作。
2. 通過for循環遍歷集合,使用集合中的方法完成元素增刪操作。
[if !supportLists]4.7.?????????[endif]請簡述泛型是什么?有什么用?在哪里用?
答案:泛型是一種特殊的類型,它把指定類型的工作推遲到客戶端代碼聲明并實例化類或方法的使用進行。也被稱為參數化類型,可以把類型當做參數一樣傳遞過來,在傳遞過來之前我不明確,但是在使用的時候就就明確了。
泛型的好處:
1.提高了程序的安全性
2.將運行期遇到的問題轉移到了編譯期
3.省去了類型強轉的麻煩
泛型的常見應用:
1.泛型類
2.泛型方法
3.泛型接口
[if !supportLists]4.8.?????????[endif]請簡述List和List之間有什么區別?
答案:List:向下限制
List :向上限制
? extends T : 代表接收的泛型類型為T類型或T子類類型
? super T :代表接收的泛型類型為T類型或T父類類型
[if !supportLists]4.9.?????????[endif]如何編寫一個泛型方法,讓它能夠接受泛型參數并返回泛型類型?并舉例
答案:泛型方法,指把泛型定義在方法上,使用泛型類型來替代原始類型
public static T[] sort(T[] t){
Arrays.sort(t);
return t;
}
[if !supportLists]4.10.?????[endif]請簡述Java中如何使用泛型編寫帶有參數的類?并舉例
答案:泛型類,指把泛型定義在類上,使用泛型類型來替代原始類型
class GenericClass {
private T t;
public void setT(T t) {
this.t = t;
}
public T getT() {
return t;
}
}????
[if !supportLists]4.11.????? [endif]請簡述Set集合的特點?
答案:Set集合中不能存儲重復元素;
Set集合中的元素是按照某種排序規則存儲的
[if !supportLists]4.12.?????[endif]請簡述HashSet是如何保證元素唯一性的?
答案:HashSet集合中存儲的元素,通過重寫hashCode() 與 equals()方法來保證元素唯一性?????
[if !supportLists]4.13.?????[endif]請簡述TreeSet是如何保證元素唯一性與排序的?
答案:TreeSet集合中保證元素唯一性與排序有兩種方式:
方式1:實現自然排序接口 Comparable,重寫 compareTo(T t)方法
方式2:實現比較器排序接口 Comparator,重寫 compare(T t1, T t2)方法
[if !supportLists]4.14.?????[endif]請說明Map接口和Collection接口的區別
答案:Map接口是雙列集合頂層接口,每個位置存儲一對元素(key, value)
Collection接口是單列集合頂層接口,每個位置存儲一個元素
[if !supportLists]4.15.????? [endif]請說出Map集合的遍歷方式???
答案:Map集合遍歷方式有兩種:
方式一: 鍵找值
方式二: 鍵值對對象,找鍵,找值
[if !supportLists]4.16.?????[endif]請說明HashMap和Hashtable的區別
答案:HashMap:線程不同步,效率高;可以存儲null鍵null值
Hashtable:線程同步,數據安全;不可以存儲null鍵null值
[if !supportLists]4.17.?????[endif]請解釋Collection與Collections的區別
答案:Collection:單列集合的頂層接口,包含集合中常用的方法。
?????? Collections:集合工具類,包含獲取集合最大元素值、集合排序等方法。
[if !supportLists]5.?????? [endif]IO流
[if !supportLists]5.1.?????????[endif]請說說什么是異常?異常的分類?
答案:Java異常是java提供的用于處理程序中錯誤的一種機制。
所謂錯誤是指在程序運行的過程中發生的一些異常事件(如:除0錯誤,數組下標越界,所要讀取的文件不存在)。設計良好地程序應該在程序異常發生時提供處理這些錯誤的方法,使得程序不會因為異常的發送而阻斷或產生不可預見的結果。
Java程序的執行過程中如出現異常事件,可以生成一個異常類對象,該異常對象封裝了異常事件的信息,并將被提交給java運行時系統,這個過程稱為拋出異常。
當java運行時系統接收到異常對象時,會尋找能處理這一異常的代碼并把當前異常對象交其處理,這一過程稱為捕獲異常。
異常的分類:
Error:稱為錯誤,由java虛擬機生成并拋出,包括動態鏈接失敗,虛擬機錯誤等,程序對其不做處理。
Exception:所有異常類的父類,其子類對應了各種各樣的可能出現的異常事件,一般需要用戶顯示的聲明或捕獲。
Runtime Exception:一類特殊的異常,如被0除、數組下標超范圍等,其產生比較頻繁,處理麻煩,如果顯示的聲明或捕獲將會對程序可讀性和運行效率影響很大。因此由系統自動檢測并將它們交給缺省的異常處理程序(用戶可不必對其處理)。
[if !supportLists]5.2.?????????[endif]請說出異常處理的兩種方式?
答案:捕獲異常:try...catch...finally
??? 拋出異常:throw
\ throws()
??? 其實異常部分主要講的就是五個關鍵字:try、catch、finally、throw、throws
??? try語句:
try{...}語句制定了一段代碼,這段代碼就是一次捕獲并處理異常的范圍。在執行過程中,這段代碼可能會產生并拋出一種或幾種類型的異常對象,它后面的catch語句要分別對這些異常做相應的處理。如果沒有異常發生,所有的catch代碼段都被略過不執行。
??? catch語句???
在catch語句塊中是對異常進行處理的代碼,每個try語句塊可以伴隨一個或多個catch語句,用于處理可能產生的不同類型的異常對象。在catch中聲明的異常對象(catch(XxxException e))封裝了異常事件發生的信息,在catch語句塊中可以使用這個對象的一些方法獲取這些信息。
??? finally語句:
finally語句為異常處理提供一個統一的出口,使得在控制流程轉到程序的其他部分以前,能夠對程序的狀態做統一的管理。無論try所指定的程序塊中是否拋出異常,finally所指定的代碼都要執行。通常在finally語句中可以進行資源的清除工作。
throws關鍵字通常被應用在聲明方法時,用來指定可能拋出的異常。多個異常可以使用逗號隔開。當在主函數中調用該方法時,如果發生異常,就會將異常拋給指定異常對象。
throw關鍵字通常用在方法體中,并且拋出一個異常對象。程序在執行到throw語句時立即停止,它后面的語句都不執行。通常throw拋出異常后,如果想在上一級代碼中捕獲并處理異常,則需要在拋出異常的方法中使用throws關鍵字在方法聲明中指定要拋出的異常;如果要捕獲throw拋出的異常,則必須使用try{}catch{}語句。
[if !supportLists]5.3.?????????[endif]請說說編譯期異常和運行期異常的區別?
答案:編譯時異常:程序正確,但因為外在的環境條件不滿足引發。對商用軟件系統,程序開發者必須考慮并處理這類異常。Java編譯器強制要求處理這類異常,如果不捕獲這類異常,程序將不能被編譯。
??? 運行期異常:這意味著程序存在bug,如數組越界,0被除,傳入參數不滿足規則等,這類異常需要更改程序來避免,java編譯器強制要求處理這類異常。
??? 錯誤:一般很少見,也很難通過程序解決。它可能源于程序的bug,但一般更可能源于環境問題,如內存耗盡。錯誤在程序中無須處理,而由運行環境處理。
[if !supportLists]5.4.?????????[endif]請說說throws與throw的區別?
答案:throws關鍵字通常被應用在聲明方法時,用來指定可能拋出的異常。多個異常可以使用逗號隔開。當在主函數中調用該方法時,如果發生異常,就會將異常拋給指定異常對象。
throw關鍵字通常用在方法體中,并且拋出一個異常對象。程序在執行到throw語句時立即停止,它后面的語句都不執行。通常throw拋出異常后,如果想在上一級代碼中捕獲并處理異常,則需要在拋出異常的方法中使用throws關鍵字在方法聲明中指定要拋出的異常;如果要捕獲throw拋出的異常,則必須使用try{}catch{}語句。
[if !supportLists]5.5.?????????[endif]請說說final、finally與finalize的區別?
答案:final用于聲明屬性,方法和類,分別表示屬性不可變,方法不可覆蓋,類不可繼承。內部類要訪問局部變量,局部變量必須定義成final類型。
??? finally是異常處理語句結構的一部分,表示總是執行。
??? finalize是Object類的一個方法,在垃圾收集器執行的時候會調用被回收對象的此方法,可以覆蓋此方法提高垃圾收集時的其他資源回收,例如關閉文件等。JVM不保證此方法總被調用。
[if !supportLists]5.6.?????????[endif]請說說異常的注意事項及如何使用異常處理?
答案:1. 子類重寫父類方法時,子類的方法必須拋出相同的異常或父類異常的子類。
??? 2.如果父類拋出了多個異常,子類重寫父類時,只能拋出相同的異常或者是他的子集,子類不能拋出父類沒有的異常。
??? 3.如果被重寫的方法沒有異常拋出,那么子類的方法絕對不可以拋出異常,如果子類方法內有異常發生,那么子類只能try...catch,不能throws
[if !supportLists]5.7.?????????[endif]請說說文件名稱過濾器FilenameFilter的作用?
答案:FilenameFilter是文件名過濾器,用來過濾不符合規則的文件名,并返回合格的文件。
[if !supportLists]5.8.?????????[endif]請說出最常見到的RuntimeException異常。
答案:
NullPointerException - 空指針引用異常
ClassCastException - 類型強制轉換異常
IllegalArgumentException - 傳遞非法參數異常
ArithmeticException - 算術運算異常
ArrayStoreException - 向數組中存放與聲明類型不兼容對象異常
IndexOutOfBoundsException - 下標越界異常
NumberFormatException - 數字格式異常???????
[if !supportLists]5.9.?????????[endif]請簡述遞歸是什么?注意事項是什么?
答案:所謂遞歸,是指程序調用自身。注意,遞歸不會無休止地調用下去,它必然有一個出口,當滿足條件時程序也就結束了,不然的話,那就是死循環了。
[if !supportLists]5.10.????? [endif]請簡述IO流的分類
答案:IO流
?????????? |-字節流
????????????????? |-字節輸入流InputStream
????????????????? |-字節輸出流OutputStream
?????????? |-字符流
????????????????? |-字符輸入流Reader
????????????????? |-字符輸出流Writer
[if !supportLists]5.11.?????[endif]請簡述字符編碼是什么?請說出常見字符編碼表?
答案:字符編碼(英語:Character
encoding)也稱字集碼,是把字符集中的字符編碼為指定集合中某一對象,以便文本在計算機中存儲和通過通信網絡的傳遞。常見的例子包括將拉丁字母表編碼成摩斯電碼和ASCII。其中,ASCII將字母、數字和其他符號編號,并用7比特的二進制來表示這個整數。通常會額外使用一個擴充的比特,以便以1個字節的方式存儲。
常見的字符編碼表如下:
??? ASCII
??? GB2312:是一個簡體中文字符集,由6763個常用漢字和682個全角的非漢字字符組成。
GBK:GBK編碼標準兼容GB2312,共收錄漢字21003個、符號883個,并提供1894個造字碼位,簡、繁體字融于一庫
GB18030:是在GBK基礎上增加了一部分漢字
??? Big5:在臺灣、香港與澳門地區,使用的是繁體中文字符集
Unicode:將世界上所有的符號都納入其中,無論是英文、日文、還是中文等,大家都使用這個編碼表,這樣就利于同一的管理,在這個編碼表中每一個字符占兩個字節
??? UTF-8:為了提高Unicode的編碼效率,于是就出現了UTF-8編碼。UTF-8可以根據不同的符號自動選擇編碼的長短。比如英文字母可以只用1個字節就夠了。
[if !supportLists]5.12.?????[endif]請說出學習過的IO流中的常用方法?
答案:字節輸入流InputStream
??? read()讀取一個字節
??? read(byte[])讀取一個字節數組
字節輸出流
??? write(int)寫入一個字節
??? write(byte[])寫入一個字節數組
字符輸入流
??? read()讀取一個字符
??? read(char[])讀取一個字符數組
字符緩沖輸入流
??? readLine()讀取一行字符串
字符輸出流
??? write(int)寫入一個字符
??? write(char[])寫入一個字符數組
??? write(String)寫入一個字符串
字符緩沖輸出流
??? newLine()寫入一個換行符
[if !supportLists]5.13.?????[endif]請說出轉換流OutputStreamWriter與InputStreamReader 的作用?
答案:OutputStreamWriter:使用編碼表對字節流的數據進行編碼
InputStreamReader:使用編碼表對字節流中的數據進行解碼
[if !supportLists]5.14.?????[endif]請簡述打印流(PrintStream、PrintWriter)的特點?
答案:PrintStream在OutputStream基礎之上提供了增強的功能,即可以方便地輸出各種類型的數據(而不僅限于byte類型)的格式化表示形式。PrintStream的方法從不拋出IOException
??? PrintWriter提供了PrintStream的所有打印方法,其方法也從不拋出IOException。
與PrintStream的區別:作為處理流使用時,PrintStream只能封裝OutputStream類型的字節流,而PrintWriter既可以封裝OutputStream類型的字節流,還能夠封裝Writer類型的字符輸出流并增強其功能。