java学习笔记2022.1.13
異常
System.exit(非0整數):用來終止程序,可以避免執行finally,如下可以參考
?import java.util.Scanner;?public class one {{System.out.println("ajkdjak");}?public static void main(String[] args ){one o = new one();Scanner input = new Scanner(System.in);int a,b;try{System.out.print("輸入第一個數:");a = input.nextInt();System.out.print("輸入第二個數:");b = input.nextInt();System.out.println("他們的商為:" + a / b);}catch(Exception e) {System.exit(1);System.out.println("這是結束點1");e.printStackTrace();}finally{System.out.println(這是結束點3);}System.out.println("這是結束點2");?}}return關鍵字在異常處理中的作用
因為finally是必然會執行的語句,那么如果finally中存在一個返回值,那么不管try塊或者catch塊中的返回值是什么,它都會被覆蓋成return語句中的返回值,然后注意下System,exit的執行優先度大于return,所以執行完exit()以后,其他函數就沒用了,下面給你們個例子
? import java.util.Scanner;?public class one {{System.out.println("ajkdjak");}?public static void main(String[] args ){one o = new one();System.out.println("返回值為"+test());}public static int test(){int a,b;Scanner input = new Scanner(System.in);System.out.println("this is a test");try{System.out.print("輸入第一個數:");a = input.nextInt();System.out.print("輸入第二個數:");b = input.nextInt();System.out.println("他們的商為:" + a / b);return 21793;}catch(Exception e) {System.exit(1);System.out.println("這是結束點1");e.printStackTrace();return 1231;}finally{System.out.println("這是結束點3");return -1;}//System.out.println("這是結束點2");}}然后注意下上面的寫法,最后的32條語句是會報錯的,因為你都已經return完了,所以導致32號語句寫了根本沒用,只是增加了代碼量,所以就直接無了,所以你要讓最后的語句輸出出來,可以參考下面
? import java.util.Scanner;?public class one {{System.out.println("ajkdjak");}?public static void main(String[] args ){one o = new one();System.out.println("返回值為"+test());}public static int test(){int a,b;Scanner input = new Scanner(System.in);System.out.println("this is a test");try{System.out.print("輸入第一個數:");a = input.nextInt();System.out.print("輸入第二個數:");b = input.nextInt();System.out.println("他們的商為:" + a / b);//return 21793;}catch(Exception e) {//System.exit(1);System.out.println("這是結束點1");e.printStackTrace();//return 1231;}finally{System.out.println("這是結束點3");//return -1;}System.out.println("這是結束點2");return 0;}?使用throw關鍵字聲明異常類型
我感覺這個類型最大的作用就是給了使用者自己定義一些錯誤發生的途徑,讓一整個自定義函數具備了報錯的能力,下面是代碼實現
?import java.util.Scanner;?public class Two {?public static void main(String[] args){try{test();}catch (Exception e){e.printStackTrace();}finally {System.out.println("this is a test");}}?public static void test()throws Exception{System.out.println("please input your age ");Scanner scanf= new Scanner(System.in);int age= scanf.nextInt();if(age>18 && age<80){System.out.println("welcome to our hotel");}else {throw new Exception("your age is not allowed ");}}} ?import java.util.Scanner;?public class Two {?public static void main(String[] args){test();}?public static void test(){System.out.println("please input your age ");Scanner scanf= new Scanner(System.in);int age= scanf.nextInt();try{if(age>18 && age<80){System.out.println("welcome to our hotel");}else {throw new Exception("your age is not allowed ");}}catch (Exception e){e.printStackTrace();}finally {System.out.println("this is a test");}}}上面是兩種實現方式,你喜歡哪一種就用哪一種就好.我對這種機制的理解就是,給了你權限去讓你自己定義錯誤類
自定義異常類
這個就是我在上面提到的那個東西,下面給下寫法
?public class HotelAgeException extends Exception{public HotelAgeException(){super("your age is not allowed");}}這種寫法注意寫下繼承,然后捕獲catch還是一樣,用父類可以捕獲一切,然后這個給你定義出來,我目前就只想可能可以少寫些文字這種功能
注意下當子類重寫父類拋出異常的方法時,聲明的異常必須是父類方法所聲明的異常的同類或者子類.其實感覺就是個權限問題,因為繼承了父類以后要么走橫向發展 的道路,要么就走縱向深度的道路,只要別走回去的老路,不然就是越權.注意下重寫和重載還是有區別的
異常鏈簡介
我個人感覺沒啥用,其實就是在不使用什么異常的構造方法的時候,指揮顯示最后一個異常拋出 的信息.如果以后有用到的話,我在補充,現在屬實沒想到用法,就簡單寫下它的構造格式吧
?public class yichanglian {public static void main(String[] args){try{testthree();}catch (Exception e){e.printStackTrace();}finally {?}}public static void testOne()throws Exception{throw new ?Exception("this is Exception1");}public static void testTwo()throws Exception{try {testOne();}catch (Exception e){throw new Exception("this is Exception2",e);}}public static void testthree()throws Exception{try {testTwo();}catch (Exception e){Exception e1= new Exception("this is Exception 3");e1.initCause(e);throw e1;}}}注意下最后一個throw如果沒有,其實也沒事,就27行注釋掉,這個說白就是自己構造一個異常,但只有拋出時這個異常才有用,這個異常不是程序必須執行的異常
包裝類
手動裝箱和自動裝箱
? package xiangzi;?public class wrap {public static void main(String[] args){int t1=18;Integer t2= t1;//自動Integer t3= new Integer(t1);//手動System.out.println("t1="+t1);System.out.println("t2="+t2);System.out.println("t3="+t3);}}注意下裝箱的過程中如果用的jetbrain的話,第七行new那里會被劃線,沒事的,無所謂.
手動拆箱和自動拆箱
?package xiangzi;?public class wrap {public static void main(String[] args){int t1=18;Integer t2= t1;Integer t3= new Integer(t1);System.out.println("t1="+t1);System.out.println("t2="+t2);System.out.println("t3="+t3);?int t4=t2;int t5=t3.intValue();System.out.println("t4="+t4);System.out.println("t5="+t5);}}基本數據類型和字符串之間的轉化
?package xiangzi;?public class TestTwo {public static void main(String[] args ){int t1=18;String t2 = Integer.toString(t1);int t3 = Integer.parseInt(t2);int t4 = Integer.valueOf(t2);System.out.println("t2="+t2);System.out.println("t3="+t3);System.out.println("t4="+t4);}}注意下,這里用的都是Integer這個類的靜態方法.
第一種將字符串轉變為包裝類是直接調用導致的,第二種是先將字符串轉化為包裝類然后在通過自動拆箱完成的數據轉化
需要知道的一些知識
包裝類默認初始值不是0而是null
其他
我在實現那個java異常機制的時候,才切實體會到,在一個類中靜態方法只能調用靜態方法.
重載: 發生在同一個類中,方法名必須相同,參數類型不同、個數不同、順序不同,方法返回值和訪問修飾符可以不同,發生在編譯時。
重寫: 發生在父子類中,方法名、參數列表必須相同,返回值范圍小于等于父類,拋出的異常范圍小于等于父類,訪問修飾符范圍大于等于父類;如果父類方法訪問修飾符為private則子類就不能重寫該方法。
總結
以上是生活随笔為你收集整理的java学习笔记2022.1.13的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Array Splitting Code
- 下一篇: java学习笔记2022.1.17