異常
異常:在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);
裝箱:基本類型 向 引用類型
拆箱:引用類型 向?基本類型
?
正則表達式:
\; ? ^(開始); $(結束); ?*(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類:編譯正則表達式,創建對象,先調該靜態方法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獲取數組長度
?