標籤:
異常
異常:在Java中是指被一個方法拋出的對象。
分類:檢查異常、運行時異常、錯誤
運行時異常(uncheckd):RuntimeException和其子類
檢查異常(checkd/搜檢異常):指Exception和其子類,且不是RuntimeException的子類;它必須經過處理才會找到
文法:
try{ //被保護的代碼}catch(異常的名稱 e1){ //捕獲塊}
注意:應先捕獲特殊再捕獲一般異常;try沒有出現異常catch將不會執行
異常處理的三種選擇:
1)捕獲這個異常,不讓他沿著調用棧繼續向下拋出
2)捕獲這個異常,並繼續向下拋出
3)不捕獲這個異常,從而導致方法調用棧中被彈出,導致對象拋出給調用棧下面的main()方法。
聲明異常:
關鍵字:throws 在當一個方法沒有處理檢查異常時使用
例如:public void deposit(double amount) throws RuntimeException{}
拋出主動異常:
關鍵字:throw
運行時異常可以不用聲明異常,檢查異常必須聲明異常
final關鍵字:
用於在try塊後建立一個代碼塊,且他總會運行,不管異常是否發生
注意:在方法返回之前,final塊將會執行
使用者自訂異常:
1)所有的異常必須是Throwable的子類
2)想編寫一個會被異常自動處理過聲明的規則的檢查異常,就需要繼承Exception類;
3)如果編寫一個運行時異常,就需要繼承RuntimeException類
常用類
運行平台互動的類:
System類:記錄執行時間, 複製數組,確定當前系統的屬性和擷取擷取系統環境變數等
Runtime類:可以通過他的靜態方法getRuntime()擷取對象
String類:
StringBuffer類:代表一個類容可變的字串(方法是安全執行緒的)
StringBuilder類:代表字串對象,效能略高
Date類:
DateFormat抽象類別:方法返回特定地區格式的DateFormat對象
SimpleDateFormat類:建立其對象時需要傳入日期和時間格式作為格式化的模板
Calendar抽象類別
GregorianCalendar類:西曆日曆
隨機數:
格式例如:產生0-10的隨機數
Random r=new Random();int n1=r.nextInt();n1=Math.abs(r.nextInt()%10);System.out.println(n1);
裝箱:基本類型 向 參考型別
拆箱:參考型別 向 基本類型
Regex:
\; ^(開始); $(結束); *(0次或多次); +(1次或多次); ?(0次或一次); {n}(重複n次); {n,m}(最多m最少n); .(出\n之外的任何單個字元); x|y(x或y);
[xyz](所包含的任意一個字元);; [^xyz](未包含的任一字元); [a-z](範圍); [^a-z](不在範圍內); \b(單詞邊界); \B(非單詞邊界); \d(一個數字字元); \D(非數字);
\f(換頁); \n(換行); \r(斷行符號); \s(空白); \S(非空白); \w(底線和任一字元); \W(非單詞字元);
正確使用:
Pattern類:編譯Regex,建立對象,先調該靜態方法compile()返回一個Pattern對象
Matcher類:解析Pattern,獲得對象,調用Pattern對象的matcher()方法
格式例如:
String name="y_123456";Pattern p=Pattern 。compile(正則符);Matcher m=p.matcher(name);if(matcher.matches()){}else{}
反射
Jvam中所包含提供的載入器:
1)根類載入器:載入核心Java類(jiava.*開頭)
2)擴充類載入器:載入擴充的java類(java.*開頭中JAR的類包)
3)系統載入器:載入自身的類
類的載入機制:
1)類的class檔案讀入記憶體中後,建立java.lang.util.class對象,一但某個被載入JVM中,同一個類就不會被再次輸入
2)串連:把類的二進位系統資料合併到JRE中
3)初始化
反射:
含義:可以在運行期載入,探知和使用編譯期完全未知的類
載入:class c=class.forname("全限定類名");
查看所有方法:
Method[] motheds=cl.getDeclaredMethods(); for(Method me: motheds){ System.out.println(me.getName()); }
查看構造器:
Constructor[] co=cl.getDeclaredConstructors(); for(Constructor<?> con: co){ System.out.println(con); }
擷取欄位:
Field[] fields = clazz.getDeclaredFields(); for (Field field : fields) { System.out.println(field.getType().getName() + " " + field.getName()); }
建立對象:
1 Constructor<?> constructor = cl.getConstructor(String.class, Date.class);2 SimpleDateFormat s=new SimpleDateFormat("yyyy-MM-dd");3 String st="2000-10-12";4 Date da=s.parse(st);5 Object obj = constructor.newInstance("張三",da);
調用方法:
1 Method setAddress = cl.getMethod("setAddress",String.class);2 Object adress = setAddress.invoke(obj,"成都");3 Method setSex=cl.getMethod("setSex",String.class);4 Object sex=setSex.invoke(obj, "男");
...表示可變參數
Java集合架構
collection介面(控制單列資料):
分為兩個子介面:
Set介面(沒有順序且不能重複):
兩個重要實作類別:
HashSet:基於雜湊演算法的set介面實現,沒有順序,不允許出現重複元素
ThreeSet: 有順序的
List介面(有順序,可以重複)
兩個重要實作類別:
ArrayList:是以數組方式實現,查詢效率高,插入刪除效率低
LinkedList:是以鏈表方式實現,適合頻繁增加刪除元素時使用(速度快)
重要方法:
插入:對象名.add(); 返回指定:對象名.get(); 替換:對象名.set(); 刪除:對象名.remove();
泛型:
作用:1)保證在集合中元素型別安全; 2)資料類型不用強制轉化
實質:允許在定義介面、類時指定型別參數
例如:ArrayList<Integer> al=new ArrayList<Integer>;
Interator介面:用於遍曆集合的介面,有一個iterator方法,返回Interator對象
此介面方法:
更多元素:hasNaxt(); 下一個元素:nest(); 刪除iterator返回的最後一個元素:remove();
格式:
1 public static void main(String[] args) { 2 MyComparator my=new MyComparator(); 3 List<SortObject> l=new ArrayList<SortObject>(); 4 SortObject s1=new SortObject(1,4); 5 SortObject s2=new SortObject(7,9); 6 SortObject s3=new SortObject(5,6); 7 l.add(s1); 8 l.add(s2); 9 l.add(s3); 10 Collections.sort(l,my);11 Iterator it = l.iterator();12 while(it.hasNext()){ 13 Object obj = it.next();14 System.out.println(obj);15 }16 17 }18 19 }
Map介面(修飾鍵值對):
含義:對應的是一種從鍵(Key)到值(Value)的對應關係的集合(一對一)
兩個實作類別:HashMap; TreeMap;
基本方法:
返回指定鍵相關的值:get(); 向映射中添加索引值對: put(); 刪除所有元素:clear(); 刪除指定:remove();
輔助類Collections和Arrays
Collections類:用於對集合元素進行排序、查詢、修改(靜態方法)
例如排序:Collections.sort(list cmp);
Arrays類:運算元組
例如:Arrays.sort(arr);
集合當中用size擷取數組長度
JAVA異常處理、常用類、反射、集合