java面試常用問題的總結
1:JDK,JRE,JVM分別是什麼?它們之間有什麼關係?
jdk是Java開發環境,jre是Java執行環境,jvm是Java虛擬機器,jre包含jvm。
2:什麼是環境變數?使用者變數與系統變數有什麼區別?
環境變數相當給系統和使用者程式設定引數的,具體起什麼作用跟具體的環境變數有關,也可以說環境變數
是給windows命令指路的,讓Windows能找到可執行的命令。
使用者變數只對當前使用者有效
系統變數對所有使用者有效
如果同一個命令在使用者變數和系統變數都包含了,則會優先執行系統變數
3:Java中有哪些分支語句?
有if,if...else,if...else if...else ,switch
4:Java中有哪些關鍵字控制迴圈,它們有什麼區別?
有continue,break,return,
continue是終止本次迴圈
break是終止迴圈
return是結束方法
5:陣列的特徵是什麼?
1,陣列一旦完成初始化陣列的長度就不可以改變
2,陣列中的元素型別必須是同一型別
3,陣列不僅可以儲存基本型別資料也可以儲存引用型別的資料
4,陣列本身是一種引用型別
6:方法過載的要求?
在同一個類裡,方法名相同,引數列表不同(個數,型別,順序);
7:成員變數與區域性變數的區別?
成員變數:有類成員變數(有static修飾)和例項成員變數(無static修飾)兩種
區域性變數:有程式碼塊區域性變數,形參,方法區域性變數三種
區別:作用範圍不同,成員變數對整個類有效,區域性變數只對該方法或程式碼塊有用
定義成員變數是可以不初始化,區域性變數除了形參之外,必須初始化
8:Equals與 == 的區別
==既可以比較基本型別,也可以比較引用型別,比較引用型別時,必須是父子關係
equals只能比較引用型別,比較是地址
9:介面與抽象類的區別
區別:
相同點:
1,都不能例項化
2,都有抽象方法
不同點:
1,介面只能定義常量,抽象類既可以定義常量也可以定義變數
2,接口裡沒有構造器和初始化塊,抽象類有構造器和初始化塊
3,接口裡只有抽象方法,抽象類裡有抽象方法和普通方法
4,介面可以實現多個,抽象類的繼承只能繼承一個
5,介面只能實現介面,不能實現其他類,抽象類即可實現介面,也可繼承其他類
6,介面定義用interface,抽象類定義用extends
10:String,Stringbuffer與Stringbuilder的區別
區別:String是不可變得字元序列,Stringbuffer和Stringbuilder是可變字元序列
Stringbuffer是執行緒安全,Stringbuilder是執行緒不安全
Stringbuffer比Stringbuilder效率低
11:列出Collection介面常用方法
常用方法:add(),addAll(),remove(),removeAll(),retainAll(),size()
isEmpty(),contains(),containsAll(),toArray(),clear(),iterator()
12:用兩種方法遍歷集合元素,要求寫出詳細程式碼
第一種
List<Integer> list=new ArrayList<>();
for(int temp:list){
System.out.println(temp);
}
第二種
List<Integer> list=new ArrayList<>();
Iterator<Integer> iter=list.iterator();
while(iter.hasNext()){
int value=iter.next();
System.out.println(value);
}
13:述LinkedList與ArrayList的區別
區別:LinkedList是以連結串列的形式儲存元素的,ArrayList是以陣列的形式儲存元素的
LinkedList增加和刪除比ArrayList要快,ArrayList查詢比LinkedList要快
14:簡述HashMap與Hashtable的區別
區別:HashMap是執行緒不安全,Hashtable是執行緒安全
HashMap的key,value可以為null,Hashtable的key,value不能為null
Hashtable是繼承Dictionary類,HashMap是繼承Map類
15:Calendar物件裡add和roll有什麼區別
區別:add溢位時,會發生進位,roll溢位時,不會發生進位
16:處理Checked異常的方法
1:當前方法明確知道如何處理異常,程式應用try...catch塊來捕捉異常,然後在對應的catch修復該異常
2:當前方法不知道如何處理該異常,應該在定義方法時宣告丟擲該異常
17:TreeSet的兩種排序方法
自然排序:
class User implements Compareable<User>{
@Override
public int compareTo(User o1){
if(o1.getId()==getId()){
return 0;
}else if(o1.getId()>getId()){
return 1;
}
return -1;
}
}
定製排序:
TreeSet<User> tree=new TreeSet<>(new Comparetor<User>(){
@Override
public int compare(User o1,User o2){
if(o1.getId()==o2.getId()){
return 0
}else if(o1.getId()>o2.getId()){
return 1;
}
return -1;
}
});
18:自定義泛型
public class User<T>{
T id;
T name;
}
19:高階語言的分類以及區別
高階語言分為:編譯性語言和解釋性語言,
編譯性語言:是指使用專門的翻譯器,針對特定的平臺(系統),將某種高階語言一次性翻譯成該平臺硬體執行的
的機器碼,幷包裝成該平臺可識別的程式格式
解釋性語言:是指使用專門的直譯器對源程式逐行解釋成該平臺的機器碼並立刻執行的語言
區別:解釋性語言比編譯性語言跨平臺性要好
編譯性語言效率要比解釋性語言高
20:jvm如何實現跨平臺的?
jvm是跨平臺的關鍵,只要為不同平臺實現了相應的虛擬機器,編譯後的java位元組碼就可以在該平臺上執行。
顯然,相同的位元組碼程式需要在不同的平臺上執行,這幾乎是不可能的,只有通過中間的轉換器材可以實現
jvm就是這個轉換器。
21:Java程式的執行步驟
一,編譯java程式,生成class檔案
二,執行class檔案
22:Java原始檔命名規則
1:Java原始檔的字尾必須是.java,不能是其他的字尾
2:在通常情況下,Java原始檔的主檔案可以是任意的,但有一種情況除外,
Java原始檔裡定義了一個public,那麼原始檔的主檔名必須和public類的類名相同。
23:程式的三大結構
順序結構,選擇結構(分支結構),迴圈結構三種結構。
選擇結構又分為:if和switch,其中if有if(單選),if...else (雙選),if...else if ...else(多選)。
迴圈結構又分為:for,foreach,while,do...while。
24:switch支援的型別以及注意的地方
支援的型別:int,char,short,byte,列舉,String(Java1.7)
注意的地方:case後的break不能省略,一旦省略,就會往滿足後的條件和條件後面的程式碼執行
25:類和物件的定義以及他們的關係
類:是指具有相同特徵的一類事物的總稱
物件:是一個具體存在的實體
類是有多個物件組成的。
26:面向物件的三個特徵
封裝:將物件的實現細節隱藏起來,通過一些公用的方法,把它的功能暴露出來
繼承:繼承是面向物件實現軟體複用的重要手段,子類繼承父類,子類作為一個特殊的父類,
將直接繼承父類的屬性和方法。
多型:是指子類物件可以直接賦給父類變數,但執行時依然表現為子類的行為特徵,
這意味著同一個型別的物件,呼叫同一個方法,呈現出多種行為特徵
27:有那些分隔符以及他們的作用
有分號(;),圓括號(()),方括號([]),花括號({}),圓點(.),空格
分號:作為一行語句的結束
圓括號:定義形參和傳入實參
方括號:訪問陣列的元素
圓點:用來類和物件訪問它的成員
花括號:定義一段程式碼塊
空格:分割一條語句的不同部分,合理縮排Java程式碼
28:識別符號的規則
1,識別符號可以包含數字,字母,下劃線,美元符,但數字不能打頭
2,識別符號不能是關鍵字和保留字,但可以包含關鍵字和保留字
3,識別符號不能有空格
4,識別符號只能包含美元符,但不能是其他的特殊符號
29:什麼是保留字和關鍵字?
保留字:是指Java現在還沒有把它作為關鍵字,但在以後的版本中可能會把它當做關鍵字
關鍵字:是指具有特殊用途的單詞
30:八大基本型別以及位元組數
byte 1個位元組
short 2個位元組
int 4個位元組
long 8個位元組
boolean 1位
char 2個位元組
float 4個位元組
double 8個位元組
31:整數常量的表示方法
二進位制 用0b開頭
八進位制 用0開頭
十六進位制 用0x開頭
32:常用的轉義字元
\n 換行符
\t 製表符
\r 回車符
\b 退格符
\“ 雙引號
\' 單引號
\\ 反斜線
33:浮點數的兩種表達方式
十進位制數表達示和科學記數法
34:變數的概念和定義以及常量的特點
概念:變數是Java最基本的儲存單位,它是用來儲存資訊的,變數在重新執行中值是可以改變的
定義:一個型別,一個變數名,也可以對其進行初始化
常量:在程式執行中值不可以改變的,用final修飾,常量名一般用大寫字母,多個單詞需用下劃線連線
35:自動轉換和強制轉換
自動轉換:把某個基本型別的數值或變數直接賦給另一個基本型別的變數
強制轉換:把範圍大的數值或變數賦給範圍小的變數
36:有那些運算子?
算術運算子
比較運算子
賦值運算子
邏輯運算子
位運算子
型別相關運算子
37:&和&&的區別
區別:
&是不短路與,if裡的第一個條件不成立,後面的會繼續執行
&&是短路與,if裡的第一個條件不成立,後面的則不會執行
38:數值的特徵
1,數值裡的元素型別必須一致
2,陣列一旦初始化結束,長度就確定下來了
3,陣列不僅可以儲存基本型別,也可以儲存引用型別
4,陣列本身也是一種引用型別
39:陣列的初始化
陣列的初始化分為:靜態初始化和動態初始化
靜態初始化:由程式設計師賦值,系統給定長度
動態初始化:程式設計師給定長度,系統預設初始化
byte,short,int,long系統預設的初始化值為0
double,float系統預設的初始化為0.0
char系統預設的初始化為\u0000
String和其他引用型別為null
boolean系統預設的初始值為false
40:this關鍵字的作用
this作為物件的預設引用有兩種情況:
1,在構造器中引用該構造器正在初始化的物件
2,在方法中引用呼叫該方法的物件
this最大的作用是該類一個方法裡呼叫該列另一個方法或屬性
注意this不能出現在static修飾的方法中,在構造器中用this呼叫另一個構造器,this必須在第一行
this誰呼叫它,this就代表誰
41:方法屬性的主要體現
1,方法不能獨立,只能在類裡定義
2,從邏輯上來看,方法要麼屬於類本身,要麼該類的一個物件
3,方法永遠不能獨立執行,執行方法必須是類或物件作為呼叫者
42:可變長引數
1,一個方法只能定義一個可變長引數
2,傳入的實參可以是一個變數,也可以是一個數組
3,可變長引數只能放在方法形參的最後一個
4,可變長引數只能用陣列來接收
43:方法過載
方法過載:如果同一個類中包含了兩個或兩個以上方法的方法名相同,但形參列表不同,則叫方法過載
形參列表不同是指形參的個數,順序,型別三個方面不同
注意的是方法過載與方法返回值型別,修飾符等其他部分沒有任何關係
44:變數的特點
1,在同一個類裡,成員變數對整個類有效,一個類裡不能定義兩個同名的成員變數,即便一個是類成員,
一個是例項成員也不行
2,一個方法裡不能定義兩個同名的方法區域性變數,形參和方法區域性變數也不能同名
3,同一個方法裡不同的程式碼塊區域性變數可以同名
4,如果先定義程式碼塊區域性變數,後定義方法區域性變數,那麼程式碼塊區域性變數和方法區域性變數可以同名
5,Java允許成員變數和區域性變數可以同名,如果方法區域性變數和成員變數同名,那麼區域性變數會覆蓋
成員變數,如果需要被覆蓋的成員變數,則可以用this或類來作為呼叫者
45:變數的使用規則
儘可能的縮小變數的作用範圍,能使用區域性變數就別使用成員變數,能使用程式碼塊區域性變數就別使用方法
區域性變數,縮小變數作用範圍,使得變數的生命週期變短,使得程式執行的效能更好
使用成員變數的情況:
1,一個屬性需要在同一個類裡的幾個方法裡共享
2,用於儲存類或物件執行時的狀態資訊
3,用於描述類和物件固有的資訊
46:封裝的目的
1,隱藏類的實現細節,通過一些公共方法暴露該類的功能,從而加入一些邏輯控制語句,防止一些不合理的訪問
2,便於修改,提高程式碼的可維護性
3,可進行資料檢查,有利於物件資訊的完整性
47:訪問控制符的分類
default:包訪問許可權,可以訪問同一個類中和同一個包中
private:當前類訪問許可權,只能在同一個類中訪問
protected:子類訪問許可權,在同一個類中,同一個包中,子類中(不同的包)可以訪問
public:公共訪問許可權,可以訪問任意的類和包
48:package的作用以及定義
用於解決類的命名衝突,類檔案管理等問題
定義:package必須放在該類的非註釋(除了註釋)的第一行,一個類裡只有一個package
49:編譯帶包名的類和執行帶包名的類
一編譯帶包名的類
1,類檔案和指定的包在同一個目錄下
javac 目錄/Java檔名+副檔名
2,類檔案和指定的包不在同一個目錄下
javac -d . Java檔名+副檔名
二執行帶包名的類
Java 包名.Java檔名
50:如何訪問帶包名的類
1,同一個包下可以自由訪問
2,不同的包則需要帶包名
3,用import匯入包名
51:重寫父類方法的規則
1,方法名相同
2,方法的形參列表相同
3,子類的返回值型別比父類的返回值型別要小或相等
4,子類宣告丟擲的異常類要比父類宣告丟擲的異常類小或相等
5,子類的訪問許可權要比父類的訪問許可權要大或相等
注意的是:重寫父類的方法,要麼兩個是例項方法,要麼兩個是類方法,不能一個是例項方法,一個類方法
52:Field在繼承體系中查詢的順序
1,查詢該方法是否有該Field的區域性變數
2,查詢該類中是否有該Field
3,查詢該類的直接父類,直接父類沒有話,則就會一直上溯,直到Object都沒有找到,
系統則會重新編譯錯誤
53:強制型別轉換需要注意的地方
1,基本型別之間的轉換隻能發生在數值型別之間進行
2:引用型別之間的轉換隻能發生在具有繼承關係的兩個型別之間
54:靜態初始化塊,初始化塊和構造器的執行順序
1,最先執行Java.lang.Object類的靜態初始化塊,然後執行父類的靜態初始化塊,
最後執行該類的靜態初始化塊
2,先執行java.lang.Object類的初始化塊,然後執行java.lang.Object的構造器
異常向下執行其父類的初始化塊,開始執行其父類的構造器,最後執行該類的初始化塊和構造器,
最後返回該類的物件。
55:什麼是包裝類?
為了解決八大基本型別不能當做Object型別使用的問題,Java提供了包裝類的概念,分別為其定義了相應的
引用型別,稱之為包裝類,
56:自動裝箱和自動拆箱的概念以及之間的轉換
自動裝箱:就是把一個基本型別直接賦給相對應的包裝類變數,或者賦給Object變數
自動拆箱:就是把包裝類變數直接賦給相對應的基本型別變數
基本型別——>包裝類:1,構造器 2,自動裝箱 3,valueOf
包裝類——>基本型別:1,自動拆箱 2,value
57:為什麼要重寫toString?
因為Object裡的toString打印出來的資訊是一串看不懂得資訊,如果使用者需要自定義類實現自己想看到的
資訊,就必須重寫Object類裡toString方法
58:為什麼要重寫equals方法以及重寫equals方法的規則?
因為Object類提供的equals方法沒有太大的實際意義,equals方法和==比較引用型別時,
他們的規則是一樣的,都是比較兩個型別的地址,如果希望採用自定義的相等標準,則可採用
重寫equals方法來實現。
規則:
1,自反性:對於任意x,x.equals(x)一定返回true
2,對稱性:對於任意x和y,x.equal(y)和y.equals(x)返回的結果是一樣的
3:一致性:對任意x和y,如果物件中的等價比較的資訊沒有改變,那麼呼叫x.equals(y)
多少次,返回的結果是一致的
4:對任意不是null的x,x.equals(null)必定返回false
59:final的特點
1,final修飾的類是最終類,不能被繼承
2,final修飾的方法是最終方法,不能被覆蓋
3,final修飾的變數是常量,只能被賦值一次,常量名需大寫,修飾基本型別時,常量值是不可改
變的,修飾引用型別時,不可改變的是地址,值是可以改變的。
4,final修飾的成員變數必須給定初始值,區域性變數定義時可以不給定初始值
60:抽象類和介面的區別
相同點:
1,都不能建立例項
2,都有抽象方法
不同點:
1,介面只能定義常量,抽象類裡既可定義常量,也可定義變數
2,介面只能定義抽象方法,抽象類既可定義抽象方法,也可定義普通方法
3,接口裡沒有構造器和初始化塊,抽象類既有構造器,也有初始化塊
4,介面使用的是interface來定義,抽象類使用的abstract class來定義
5,介面只能實現介面,不能實現其他類,抽象類可以繼承其他類,也可以實現介面
6,介面可以實現多個介面,抽象類的繼承只能是單繼承
7,介面用implement來實現,抽象類用extends來繼承
61:抽象類的規則
1,抽象類必須用abstract來修飾,抽象方法也必須用abstract來修飾,抽象方法不能有方法體
2,抽象類不能被例項化,無法使用new來呼叫抽象類的構造器來建立抽象類的例項
3,抽象類包含構造器,初始化塊,屬性,方法,列舉,內部類六種成分,抽象類的構造器主要
是讓子類來呼叫的
4,含有抽象方法的類只能被定義為抽象類
62:抽象類和介面需要注意的地方
1,abstract和final不能同時使用,abstract修飾的方法和類都必須被繼承,而final修飾的類和方法
是不能被繼承和覆蓋的
2,abstract不能修飾屬性,區域性變數和構造方法
3,abstract不能和static同時使用,static修飾的方法,是屬於類本身,類可以直接呼叫,如果再用
abstract修飾的話,那麼類呼叫沒有方法體的方法,則會出錯。
4,abstract不能和private同時使用,private修飾的方法是不能被繼承的,而abstract修飾的方法則
是需要被繼承的,所以兩者不能同時使用
63:內部類的作用
內部類提供了更好的封裝,可以把內部類隱藏在外部類之內,不允許同一個包中的其他的類訪問該類
64:成員內部類的語法
1,成員內部類可以是private,protected,public等任意修飾符
2,包含內部類在內的類檔案編譯生成N(內部類的個數)+1個class檔案,
成員內部類class檔案的形式總是為:外部類$內部類.class
3,非靜態內部類可以訪問外部類的任意成員
4,靜態外部類不能訪問非靜態內部類
5,在非靜態內部類方法查詢某個變數的順序:內部類區域性變數——>內部類成員變數——>外部類成員變數
——>無(系統提示找不到)
6,如果外部類成員變數,內部類成員變數,內部類區域性變數重名,則可是要this,外部類名.this來區分
7,外部類訪問內部類的成員,需內部類建立物件來訪問其例項成員
8,外部類的靜態成員不能訪問非靜態內部類
9,非靜態內部類不可以有靜態初始化塊,但可以有普通初始化塊
10,非靜態內部類可以有靜態成員,也可以有非靜態成員,靜態內部類不能訪問外部類的例項成員
但可以訪問外部類的類成員
65:列舉類和普通類的區別
1,列舉類可以實現一個到多個介面,使用enum定義的列舉類繼承的Java.lang.Enum類,而不是繼承Object類
2,使用enum定義,非抽象的列舉類預設會使用final修飾,因此列舉類不能派生子類
3,列舉類的構造器只能是private修飾,如果省略了也會預設private修飾
4,列舉類的例項都必須在類的第一行顯示列出,否則列舉類就永遠不能產生例項,列出這些例項時,
系統會自動新增public static final修飾,無須程式設計師顯示新增
5,所有的列舉類度提供了一個values方法,該方法可以很方便的遍歷所有的列舉值
66:如何手動實現列舉類?
1,通過private把構造器隱藏起來
2,把該類的所有例項都用public static final修飾的類變數來儲存
3,如果有必要,可以提供一些靜態方法,允許其他程式根據特定引數來獲取與之匹配的例項
67:Java集合的作用
Java集合是一種特別的有用的工具類,可以儲存數量不等的多個物件,並可以實現常規的資料結構,如棧,佇列,
列表等,Java集合還可以儲存具有對映關係的關聯陣列
68:Java的分類
set:無序且不可以重複的集合
List:有序且可以重複的集合
Queue:代表一種佇列集合
Map:代表具有對映關係的集合
69:Vector和ArrayList的區別
Vector和ArrayList都是以陣列實現的
Vector是執行緒安全,ArrayList是執行緒不安全
70:Stack常用的方法
peek:獲取Stack的第一個元素
pop:刪除Stack的第一個元素
push:將元素推進棧
71:HashSet的特點
1:不能保證元素的排序順序,順序可能和新增的不一樣,可能是發生變化
2:HashSet不是同步的,如果多個執行緒來訪問HashSet的話,需要程式碼來保證同步
3,集合元素值可以為null
72:TreeSet的額外方法
lower: 返回集合中小於指定元素的最大元素,
higher: 返回集合中大於指定元素的最小元素,
first: 返回集合的第一個元素,
last: 返回集合的最後一個元素,
subSet: 返回集合的set子集,
headSet:返回集合從頭開始,到指定位置的set子集,
tailSet:返回集合從指定位置開始到集合最後一個元素的set子集
73:TreeSet需要注意的地方
TreeSet集合裡的物件所屬類必須實現Java.lang.Comparable介面,否則將引發ClassCaseException異常
TreeSet集合判斷兩個物件物件是否相等的唯一標準:兩個物件通過compareTo方法班級是否返回0
74:Arrays常用的方法
asList:把陣列轉換為List集合
copyOf:把舊陣列複製到新數組裡
fill: 把陣列的值都賦值為fill指定的元素
sort: 對陣列進行排序
75:Queue常用的方法
add:把元素加入佇列的尾部
element:獲取佇列的第一個元素
offer:把元素加入佇列的尾部
peek:獲取佇列的第一個元素
poll:刪除佇列的第一個元素
remove:刪除佇列的第一個元素
76:Map常用的方法
clear: 清除Map裡的使用key—value對
containsKey: 查詢Map裡是否包含了指定的key
containsValue:查詢Map裡是否包含了指定的value
entryKey: 返回Map裡key-value對所組成的Set集合
get: 獲取Map裡指定key下的value值
isEmpty: 判斷Map是否為空
keySet: 返回Map裡由key組成的Set集合
put: 向Map裡增加一個key-value對
putAll: 向Map裡增加一個Map集合
remove: 刪除Map裡的key-value對
size: 返回Map裡key-value的個數
values: 返回Map裡所有value組成的Collection
77:Collections集合工具類常用的方法
reverse:反轉指定List集合的元素順序
sort: 對List進行自然排序並按升序排列
swap: 對List的指定兩個下標元素進行交換
rotate: List裡的元素整體向後移動指定個數位置
max: 返回List裡的最大的元素
min: 返回List裡的最小的元素
fill: 把集合裡的所有元素都替換成指定的元素
frequency:統計指定元素出現的次數
replaceAll:用新的元素替換所有包含指定元素的舊元素
indexOfSubList:查詢子List在父List首次出現的位置
lastIndexOfSubList:查詢子List在父List最後出現的位置
sort對list集合的自定義排序:
Collections.sort(list,new Comparator<Integer>(){
@Override
public int compare(Integer o1,Integer o2){
if(o1==o2){
return 0;
}else if(o1>o2){
return -1;
}
return 1;
}
});
78:Date和Calendar之間的轉換
Calendar——>Date
Calendar calendar=Calendar.getInstance();
Date date=calendar.getTime();
Date——>Calendar
Calendar calenar=Calendar.getInstance();
calendar.setTime(new Date());
79:Calendar常用的方法
add:為給定的日曆欄位增加或減少時間量,當給定欄位超過允許的範圍時,會發生進位
get:返回給定日曆欄位的值
roll:為給定的日曆欄位增加或減少時間量,當給定欄位超過允許的範圍時,不會發生進位
set:將給定的日曆欄位設定為指定的值
80:完成國際化的三個步驟
1,獲取Locale物件
2,繫結資原始檔
3,獲取訊息
81:國際化涉及的三個類
1,Java.util.ResourceBundle 載入國家,語言資源包
2,java.util.Locale 用於封裝特定的國家/區域,語言環境
3,java.util.MessageFormal 用於格式帶佔位符的字串
82:國際化資原始檔命名的三種形式
1,baseName_langage_country.properties
2,baseName_langage.properties
3,baseNaem.properties
83:NumberFormat對數字進行格式化的四種類型
1,getCurrencyInstance 格式化貨幣語言環境
2,getIntegerInstance 格式化整數語言環境
3,getNumberInstance 格式化通用數字語言環境
4,getPercentInstance 格式化百分比語言環境
84:泛型的定義
泛型就是指定義類,介面,方法時使用的形參
85:什麼時候使用型別萬用字元?
當我們定義集合形參時並不知道要定義什麼型別,所以,為了表示各種泛型List的父類,我們就使用的泛型
萬用字元上限:只想表示它是某一類泛型List的父類
86:異常的五大關鍵字
try,catch,finally,throw,throws
87:異常的分類
分為Checked異常和Runtime異常
Checked異常:是在編譯階段出現的異常
Runtime異常:是程式執行中出現的異常
88:Error錯誤
一般是指與虛擬機器相關的問題,如系統崩潰,虛擬機器錯誤等,這種錯誤無法恢復或不可能捕捉,將導致
程式中斷
89:捕捉異常常用的幾個方法
1,getMessage 返回該異常的詳細描述字串
2,printStackTrace 將該異常的跟蹤棧資訊輸出到標準錯誤輸出
3,printStackTrace(PrintStream s) 將該異常的跟蹤棧資訊輸出到指定輸出流
4,getStackTrace 返回該異常的跟蹤棧資訊
90:異常處理規則
成功的異常處理需要實現4個目標
1,使程式程式碼混亂最小化
2,捕捉並保留診斷資訊
3,通知合適的人員
4,採用合適的方法結束異常活動
達到4個目標的基本準則
1,不要過度使用異常
2,不要使用龐大的try塊
3,避免使用catch All語句
4,不要忽略捕捉到的異常
91:File訪問檔案常用的方法
1,getName 返回File物件的檔名或目錄名
2,getPath 返回File物件的檔案或目錄的路徑
3,getAbsoluteFile 返回File物件所對應的絕對路徑對應的File物件
4,getAbsolutePath 電話File物件的絕對路徑名
5,renameTo 重新命名File物件的檔名
6,getParent 返回File物件的上一級的父目錄
92:File檔案檢查常用的方法
1,exist 判斷File物件所對應的檔名或目錄名是否存在
2,canReader 判斷File物件所對應的檔案或目錄是否可讀
3,canWriter 判斷File物件所對應的檔案或目錄是否可寫
4,isFile 判斷File物件是否為檔案,而不是目錄
5,isDirectory 判斷File物件是否為目錄,而不是檔案
6,isAbsolute 判斷File物件所對應的路徑是否是絕對路徑
93:什麼是節點流,什麼是處理流,哪些流是節點流,哪些是處理流?
節點流:從/向一個特定的I/O裝置讀/寫資料的流
處理流:對一個已存在的節點流進行連線和封裝,通過封裝後的流來實現資料的讀/寫功能
節點流有:
FileInputStream 訪問檔案 從檔案中以位元組的形式把資訊讀到Java程式中
FileOutputStream 訪問檔案 從Java程式中把資訊以位元組的形式寫入檔案中
ByteArrayInputStream 訪問陣列 從緩衝陣列中以位元組的形式把資訊讀中到Java程式
ByteArrayOutputStream 訪問陣列 從Java程式中以位元組的形式把資訊寫入緩衝數組裡
FileReader 訪問檔案 從檔案中以字元的形式把資訊讀到Java程式中
FileWriter 訪問檔案 從Java程式中以字元的形式把資訊寫入檔案中
CharArrayReader 訪問陣列 從緩衝陣列中以字元的形式把資訊讀中到Java程式
CharArrayWriter 訪問陣列 從Java程式中以字元的形式把資訊寫入緩衝數組裡
StringReader 訪問字串 把字串的字元流讀到Java程式中
StringWriter 訪問字串 把字串寫入到StringWriter流中
處理流有:
BufferedInputStream 緩衝流 從緩衝區裡以位元組的形式把資訊讀到Java程式中
BufferedOutputStream 緩衝流 把Java程式中的資訊位元組的形式寫入緩衝區裡
PrintStream 列印流 把Java程式中資訊以位元組的形式列印到輸出臺或指定的檔案裡
PushbackInputStream 推回輸入流 把指定的位元組重新推回到輸入流中
ObjectInputStream 物件流 把檔案中的物件資訊以位元組的形式讀入到Java程式中
ObjectOutputStream 物件流 把物件以位元組的形式寫入到檔案中,並以二進位制的形式儲存在檔案裡
DataInputStream 特殊流 把檔案中儲存的八大基本型別和字串讀入到Java程式中
DataOutputSteam 特殊流 把八大基本型別和字串寫入到指定的檔案中
BufferedReader 緩衝流 從緩衝區中把資訊以字元的形式讀入到Java程式中
BufferedWriter 緩衝流 把Java程式中資訊以字元的形式寫入到檔案中
PrintWriter 列印流 把Java程式中的資訊以字元的形式列印到輸出臺或指定的檔案中
InputStreamReader 轉換流 把檔案的位元組資訊以字元的形式讀入到Java程式中
OutputStreamWriter 轉換流 從Java程式中把字元以位元組的形式寫入到指定的檔案中
PushbackReader 推回輸入流 把指定的字元重新推回到輸入流中
94:寫出所遇到常見的異常
FileNotFoundException 找不到檔案異常
IOException IO異常
NullPointerException 空指標異常
ArrayIndexOutOfBoundsException 陣列越界異常
ClassCastException 型別強轉異常
ArithmeticException 算術異常
ClassNotFoundException 類找不到異常
95:怎麼自定義一個異常類
1,新建一個類檔案,並繼承Exception或RuntimeException
2,建立兩個構造器,一個為空,一個列印資訊
3,在方法中用throw丟擲該異常類
4,用建立的自定義類類名作為catch的形參來捕捉丟擲的異常
96:ArrayList要加入10000條資料,該怎麼提高效率?
ArrayList的底層是陣列實現的,陣列的預設長度為10,如果插入10000條資料,就會要不斷的
擴容,這樣就會耗時間,所以,我們在建立ArrayList集合時,改變預設的容量,這樣效率就提高了
97:Collection和Collections的區別
區別:
Collections是操作List和Set的工具類,
Collection是一個介面,List和Set的父介面
98:比較集合和陣列的優缺點
集合是可以儲存多個物件的容器,它可以儲存不同型別的物件
陣列只能儲存相同型別的資料,但陣列是大多數語言都支援的底層資料結構,效能上是最高的
99:變數和常量的區別
相同點:
都是儲存資料的容器
不同點:
常量在執行中是不可以被改變的,變數在執行中是可以被改變的
常量的命名一般是大寫,多個單詞之間是用下劃線來連線的
變數是根據駝峰法來命名的
常量在型別前面必須加上final修飾
常量定義成員變數時,必須初始化,定義區域性變數時,可以不初始化
變數定義成員變數時,可以不初始化,定義區域性變數時,必須要初始化
100:遞迴概述
定義:遞迴就是在方法裡自己呼叫自己
遞迴的出口:使用return語句
好處:程式碼更加簡潔清晰,可讀性更好
壞處:遞迴太深的話,資源不夠,或者直接棧溢位
經常使用的地方:迭代樹和迭代連結串列
101:佇列和棧的比較
佇列是先進先出(FIFO)
棧是後進先出(LIFO)
102:二叉樹的查詢
前序查詢:中,左,右
中序查詢:左,中,右
後序查詢:左,右,中