JAVA異常處理、常用類、反射、集合

異常

異常:在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();

?

輔助類CollectionsArrays

  Collections用于對集合元素進行排序、查詢、修改(靜態方法)

    例如排序:Collections.sort(list cmp);

  Arrays操作數組

    例如:Arrays.sort(arr);

?

集合當中用size獲取數組長度  

?

轉載于:https://www.cnblogs.com/wwg1426802735/p/4439147.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/376059.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/376059.shtml
英文地址,請注明出處:http://en.pswp.cn/news/376059.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Base64 百科詞條

Base64是一種基于64個可打印字符來表示二進制數據的表示方法。由于2的6次方等于64&#xff0c;所以每6個位元為一個單元&#xff0c;對應某個可打印字符。三個字節有24個位元&#xff0c;對應于4個Base64單元&#xff0c;即3個字節需要用4個可打印字符來表示。它可用來作為電子…

java獲取mysql執行計劃_好程序員Java學習路線之MySQL的執行計劃

好程序員Java學習路線之MySQL的執行計劃。什么是執行計劃&#xff1f;執行計劃通常是開發者優化SQL語句的第一步。MySQL在解析SQL語句時&#xff0c;會生成多套執行方案&#xff0c;然后內部會進行一個成本的計算&#xff0c;然后通過優化器選擇一個最優的方案執行&#xff0c;…

Web系統開發構架再思考-前后端的完全分離

前言 前后端完全分離其實一直是Web開發人員的夢想,也一直是我的夢想,遙想當年,無論是直接在代碼里面輸出HTML,還是在HTML里面嵌入各種代碼,都不能讓人感到滿意.期間的痛苦和糾結,我想所有Web開發人員都深有感觸. 由于最近幾年一直在MS平臺,從Web Form到MVC,MS平臺雖然易用好學,…

C++程序設計基礎

01 1 預編譯常用的有&#xff0c;宏定義和包含庫。2 庫&#xff1a;是實用工具的集和&#xff0c;由程序員編寫&#xff0c;可以完成一些特定的功能。3 <> 系統庫 ""用戶自定義庫。4 宏定義&#xff1a;定義符號常量&#xff0c;符號常量就是給常量取的名字。常…

文科思維Java_開源之Processing:這好玩的編程語言是為文科生藝術家準備的

說起編程語言&#xff0c;我們很多時候第一反應就是很難&#xff0c;都是理工科計算機相關行業的人才學的&#xff0c;都是為理科生掉頭發準備的。的確&#xff0c;計算機的嚴謹&#xff0c;注定要求開發應用的人有縝密的理工科的理性邏輯思維&#xff0c;然而一人客從另一方面…

第一章導言的筆記與思考

Writer&#xff1a;BYSocket&#xff08;泥沙磚瓦漿木匠&#xff09; 微博&#xff1a;BYSocket 豆瓣&#xff1a;BYSocket ~&#xff1a;較重要 ~~&#xff1a;重要 1.1 hello&#xff0c;world ~初學人來說還是一大障礙&#xff0c;手寫編寫程序文本&#xff0c;然后成功的進…

C 和 Object- C 中得 #ifdef 和#ifndef

很多宏是為了進行條件編譯。一般情況下&#xff0c;源程序中所有的行都參加編譯。但是有時希望對其中一部分內容只在滿足一定條件才進行編譯&#xff0c;也就是對一部分內容指定編譯的條件&#xff0c;這就是“條件編譯”。有時&#xff0c;希望當滿足某條件時對一組語句進行編…

C語言基礎小齋

一、C語言數據類型 ok&#xff0c;如我們所知&#xff0c;C語言作為大學工科專業的必學課程&#xff0c;其重要性不言而喻&#xff1b;它為我們提供了豐富的數據類型&#xff0c;所以它很適合程序員來編寫 數據庫 &#xff0c;如DB2、Oracale都是C語言編寫的。 那么C語言具體又…

《Cracking the Coding Interview》——第11章:排序和搜索——題目8

2014-03-21 22:23 題目&#xff1a;假設你一開始有一個空數組&#xff0c;你在讀入一些整數并將其插入到數組中&#xff0c;保證插入之后數組一直按升序排列。在讀入的過程中&#xff0c;你還可以進行一種操作&#xff1a;查詢某個值val是否存在于數組中&#xff0c;并給出這個…

gradle打包java項目_gradle打包java項目

轉載地址&#xff1a;http://www.gfzj.us/series/gradle/2014/12/12/gradle%E5%B0%8F%E7%B3%BB%E5%88%97(4)--gradle%E6%89%93%E5%8C%85java%E9%A1%B9%E7%9B%AE.html以gradle小系列所舉例子為示例&#xff0c;在此處介紹兩種gradle發布java項目的方法&#xff1a;fat jar方式該…

堡壘機2.0

一、編輯系統環境變量&#xff0c;讓用戶登錄后自動調用腳本 1 vim /etc/profile 2 python /baolei/ssh_login.py 3 # 判斷登錄用戶是否為 root 用戶&#xff0c;root用戶退出程序不進行logout操作&#xff0c;否則則logout 4 if [ $? ! 10 ];then 5 echo "Good …

Flex中利用ByteArray與BitmapData互相轉換實現圖片的二進制保存與復原

Flex中利用ByteArray與BitmapData互相轉換實現圖片的二進制保存與復原 近 日在項目當中需要將圖片保存到共享對象當中&#xff0c;開始用了倆天的時間做了對象的序列化&#xff0c;并以BitmapData的形式進行了圖片的序列化保存共享&#xff0c;因為系統 沒有提供更好的接口所以…

java8自定義收集器_使用自定義收集器進行Java 8分組?

我有以下課程。class Person {String name;LocalDate birthday;Sex gender;String emailAddress;public int getAge() {return birthday.until(IsoChronology.INSTANCE.dateNow()).getYears();}public String getName() {return name;}}我希望能夠按年齡分組&#xff0c;然后收…

poj 1862 Stripies/優先隊列

原題鏈接&#xff1a;http://poj.org/problem?id1862 簡單題&#xff0c;貪心優先隊列主要練習一下stl大根堆 寫了幾種實現方式寫成類的形式還是要慢一些。。。 手打的heap&#xff1a; 1&#xff1a; 1 #include<cstdio>2 #include<cstdlib>3 #include<cmath&…

java url下載ics_使用Microsoft Graph API處理外部(Internet / .ics)日歷URL

在新的Graph API中&#xff0c;是否可以根據外部.ics日歷網址為用戶創建新日歷&#xff1f;我d like to do is to use a daemon to inject a link to an external calendar into the list of calendars a user has if they don已經有了這樣一個鏈接 . 這將有效地復制用戶可以在…

命令行生成jar文件

1.打開cmd&#xff0c;進入編譯完后所有類的當前目錄 命令行 jar -cvf javaname.jar *.class 這時已經生成了 javaname.jar 不過如果有多個類&#xff0c;雙擊打不開 2.解壓javaname.jar 進入META-INF&#xff0c;編輯MANIFEST.MF: 尾行寫入Main-Class:&#xff08;&…

Github鏈接地址

https://github.com/kzj1/test轉載于:https://www.cnblogs.com/lalal/p/4456923.html

java foreach和for循環區別_java相關:老生常談foreach(增強for循環)和for的區別

java相關&#xff1a;老生常談foreach(增強for循環)和for的區別發布于 2020-8-18|復制鏈接下面小妖就為大家帶來一篇老生常談foreach(增強for循環)和for的區別。小妖覺得挺不錯的&#xff0c;現在就分享給大家&#xff0c;也給大家做個參考。一起跟隨小妖過來看看吧首先說一下f…

關于事件冒泡和捕獲的問題

由于習慣于jquery的方便操作&#xff0c;往往讓我們慢慢淡忘了原生js應有的功能和屬性&#xff0c;今天重溫一下事件冒泡和捕獲問題。 冒泡&#xff1a;從內向外&#xff0c;如&#xff1a;div > body > html (不同瀏覽器稍有不同) 捕獲&#xff1a;從外向內&#xff0c;…

root無法運行命令解決辦法

今天運行一個命令wget(wg再使用tab鍵無法使用)&#xff0c;如下提示 -bash: /usr/bin/wget: 權限不夠 [rootwww /]# ls -Z /usr/bin/wget-rw-r--r--. root root system_u:object_r:bin_t:s0 /usr/bin/wget發現沒有執行權限 chmod x /usr/bin/wget -bash: /usr/bin/wget: …