日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

spring-test dao空指针异常_014、Java异常机制

發布時間:2024/7/5 java 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 spring-test dao空指针异常_014、Java异常机制 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1.異常的概念和分類

異常指程序運行過程中出現的非正常現象,例如用戶輸入錯誤、除數為零、需要處理的文件不存在、數組下標越界等。

在Java的異常處理機制中,引進了很多用來描述和處理異常的類,稱為異常類。異常類定義中包含了該類異常的信息和對異常進行處理的方法。

異常的分析

public class Test{public static void main(String[] args) {int i=1/0; //除數為0System.out.println(i);} }

Java是采用面向對象的方式來處理異常的。處理過程:

1. 拋出異常:在執行一個方法時,如果發生異常,則這個方法生成代表該異常的一個對象,停止當前執行路徑,并把異常對象提交給JRE。

2. 捕獲異常:JRE得到該異常后,尋找相應的代碼來處理該異常。JRE在方法的調用棧中查找,從生成異常的方法開始回溯,直到找到相應的異常處理代碼為止。

/*** 異常:程序在執行的過程出現的非正常情況,異常一旦發生必須進行處理,否則將導致程序中斷執行。* Java中的異常分類:* java.lang.Throwable* --java.lang.Error:嚴重錯誤* --java.lang.Exception:異常(例外)* ---java.lang.RuntimeException:運行時異常(不需要顯示捕獲處理)* ----java.lang.ArithmeticException:算術異常(除零出現異常)* -----java.uitl.InputMismatchException:輸入不 匹配異常* ----checked Exception:檢查異常(必須顯示捕獲處理,否則無法通過編譯)* java處理異常的機制:* 1.try...catch..finally* try{* //可能出現異常的代碼;* }catch(異常的類型 e){* //異常處理* }...* }finally{* //一定會被執行的代碼* }*2.throws...throw*/ import java.util.InputMismatchException; import java.util.Scanner;public class Test1 {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);try {System.out.println("請輸入第一個數:");int num1 = scanner.nextInt();//java.uitl.InputMismatchException:輸入不 匹配異常System.out.println("請輸入第二個數:");int num2 = scanner.nextInt();//java.uitl.InputMismatchException:輸入不 匹配異常int result = num1/num2;//java.lang.ArithmeticException:算術異常System.out.println("result="+result);}catch(ArithmeticException e) {System.out.println("除數不能為零!");e.printStackTrace();//打印堆棧跟蹤信息}catch(InputMismatchException e) {System.out.println("輸入不匹配,請輸入數字!");e.printStackTrace();}System.out.println("程序正常結束!");} }

異常分類

Java對異常進行了分類,不同類型的異常分別用不同的Java類表示,所有異常的根類為java.lang.Throwable,Throwable下面又派生了兩個子類:Error和Exception。

Exception又分為RuntimeException:運行時異常、CheckedException:已檢查異常

Error:是程序無法處理的錯誤,表示運行應用程序中較嚴重問題。大多數錯誤與代碼編寫者執行的操作無關,而表示代碼運行時 JVM(Java 虛擬機)出現的問題。

Exception:Exception是程序本身能夠處理的異常,如:空指針異常(NullPointerException)、數組下標越界異常(ArrayIndexOutOfBoundsException)、類型轉換異常(ClassCastException)、算術異常(ArithmeticException)等。

Java異常類的層次結構圖

2.常見簡單異常的解決方法

RuntimeException運行時異常

常見的運行時異常:RuntimeException

1.java.lang.ArithmeticException:算術異常

2.java.uitl.InputMismatchException:輸入不 匹配異常

3.java.lang.NullPointerException:空指針異常

4.java.lang.ArrayIndexOutOfBoundsException:數組下標越界

5.java.lang.StringIndexOutOfBoundsException: 字符串下標越界

6.java.lang.ClassCastException:類型轉換異常

7.java.lang.NumberFormatException:數字轉換異常

Checked Exception檢查時異常

1. IOException

2. FileNotFoundException

3. ClassNotFoundException

4. PassException

5. NullPointException

/*** 常見的運行時異常:RuntimeException* 1.java.lang.ArithmeticException:算術異常* 2.java.uitl.InputMismatchException:輸入不 匹配異常* 3.java.lang.NullPointerException:空指針異常 **** 4.java.lang.ArrayIndexOutOfBoundsException:數組下標越界**** 5.java.lang.StringIndexOutOfBoundsException: 字符串下標越界 **** 6.java.lang.ClassCastException:類型轉換異常 **** 7.java.lang.NumberFormatException:數字轉換異常 ***** 日期:2019年7月*/ public class TestRuntimeException {public static void main(String[] args) { // //空指針異常 // String str = null; // str.length(); // //數組下標越界 // int[] nums = new int[5]; // System.out.println(nums[5]); // //字符串下標越界 // String str2 = "hello"; // System.out.println(str2.charAt(8));//類型轉換異常 // Animal animal = new Dog(); // Cat cat =(Cat)animal;String str3 = "abc";int i =Integer.parseInt(str3);//Integer.parseInt(String str):將字符串轉換為整數System.out.println(i);} } class Animal{ } class Dog extends Animal{ } class Cat extends Animal{ }

/*** 常見的運行時異常:RuntimeException* 1.java.lang.ArithmeticException:算術異常* 2.java.uitl.InputMismatchException:輸入不 匹配異常* 3.java.lang.NullPointerException:空指針異常 **** 4.java.lang.ArrayIndexOutOfBoundsException:數組下標越界**** 5.java.lang.StringIndexOutOfBoundsException: 字符串下標越界 **** 6.java.lang.ClassCastException:類型轉換異常 **** 7.java.lang.NumberFormatException:數字轉換異常 **** ...* 如何避免異常:通過嚴謹的判斷防止潛在的運行時異常發生。*/ public class TestRuntimeException2 {public static void main(String[] args) {//空指針異常String str = null;if(str!=null) {str.length();//空指針異常,試圖訪問空對象的屬性或方法}//數組下標越界int[] nums = new int[5];int index = 5;if(index<nums.length) {System.out.println(nums[index]);}} }

異常的處理方式有兩種:使用“try/catch”捕獲異常、使用“throws”聲明異常。

3.異常處理方式之一__捕獲異常

捕獲異常是通過3個關鍵詞來實現的:try-catch-finally。用try來執行一段程序,如果出現異常,系統拋出一個異常,可以通過它的類型來捕捉(catch)并處理它,最后一步是通過finally語句為異常處理提供一個統一的出口,finally所指定的代碼都要被執行(catch語句可有多條;finally語句最多只能有一條,根據自己的需要可有可無)。

捕獲異常關鍵字(try catch finally)

try-catch 組合

用try來執行,如果出現異常,系統拋出異常,可以通過catch來捕捉并處理它

一個try語句必須帶有至少一個catch語句塊或一個finally語句塊

注意事項

當異常處理的代碼執行結束以后,不會回到try語句去執行尚未執行的代碼。

import java.util.Scanner;public class TestTryCatch {public static void main(String[] args) {Scanner input =new Scanner(System.in);try {System.out.println("請輸入被除數:");int numA=input.nextInt();System.out.println("請輸入除數:");int numB=input.nextInt();int result=numA/numB;System.out.println(numA+"/"+numB+"="+result);}catch(ArithmeticException e) {//ArithmeticException e = new InputMismatchException 不成功//catch(Exception e) {//相當于Exception e=new ArithmeticException()多態的表示形式,父類引用指向了子類 //ArithmeticException算術異常e.printStackTrace();}System.out.println("程序結束,謝謝您的使用");} }

try-finally 組合

finally 是無論是否產生異常,都執行的代碼,但是有一種情況 finally 不執行,即退出 Java 虛擬機。

import java.util.Scanner;public class TestTryFinally {public static void main(String[] args) {Scanner input =new Scanner(System.in);try {System.out.println("請輸入被除數:");int numA=input.nextInt();System.out.println("請輸入除數:");int numB=input.nextInt();int result=numA/numB;System.out.println(numA+"/"+numB+"="+result);//退出java虛擬機System.exit(0);}finally {System.out.println("finally中的代碼");}} }

try-catch-finally 組合

程序首先執行可能發生異常的try語句塊。如果try語句沒有出現異常則執行完后跳至finally語句塊執行;如果try語句出現異常,則中斷執行并根據發生的異常類型跳至相應的catch語句塊執行處理。catch語句塊可以有多個,分別捕獲不同類型的異常。catch語句塊執行完后程序會繼續執行finally語句塊。finally語句是可選的,如果有的話,則不管是否發生異常,finally語句都會被執行。

public class TestTryCatchFinally {public static void main(String[] args) { // //1.try..catch // try { // int result = 1/1; // System.out.println(result); // }catch(Exception e) { // e.printStackTrace(); // } // //2.try...finally // try { // System.out.println("try中的代碼.."); // int result = 1/0; // }finally { // System.out.println("finally中的代碼..."); // }//3.try...catch...finallytry {System.out.println("try中的代碼..");int result = 1/0;}catch(Exception e) {System.out.println("catch中的代碼...");}finally {System.out.println("finally中的代碼...");}} }

注意事項

1. 即使try和catch塊中存在return語句,finally語句也會執行。是在執行完finally語句后再通過return退出。

2. finally語句塊只有一種情況是不會執行的,那就是在執行finally之前遇到了System.exit(0)結束程序運行。

4.異常的處理方式之二:聲明異常(throws子句)

聲明異常的關鍵字 throws

方法名的后面,用于聲明該方法可能會產生一個異常如果方法聲明的是 Exception 類型的異常或者是 Checked Exception 異常,要求方法的調用處必須做處理。

(1)繼續使用 throws 向上(方法的調用處)聲明

(2)使用 try-catch-finally 進行處理

如果聲明的是 RuntimeException 類型的異常,那么方法的調用處可處理可不處理。

繼承關系中的聲明異常

1) 父類的方法聲明了 Exception 類型的異常,子類在重寫方法時,可以聲明也可以不聲明。但是如果子類重寫 后的方法使用super 關鍵字調用父類的方法,那么要求必須對異常進行處理。

2) 如果父類的方法沒有異常,那么子類的方法如果一定會有 Exception 或 Checked 異常,要求子類必須自己使用 try-catch 處理,或者給父類方法加上異常的聲明

3) 如果子類在重寫父類的方法時,產生的異常是RuntimeException 異常時,那么可以不用處理

throw 拋出異常對象

在捕獲一個異常前,必須有一段代碼先生成異常對象并把它拋出。這個過程我們以手工做,也可以由 JRE 來實現,但是他們調用的都是 throw 子句。

throws 與 throw

(1)throws 用于聲明方法可能會產生的異常類型

throw 手動拋出異常對象

(2) throws 寫在方法名稱后面

throw 用于寫在方法里

import java.io.File; import java.io.IOException; /*** throws與throw* 通過throws聲明異常:跟在方法聲明的后邊,用于告知方法的調用者該方法有可能存在異常。* 方法的調用者可以使用try...catch...finally捕獲異常或者使用throws繼續講異常聲明出去。* 通過throw拋出異常:放在方法的內部,用于拋出異常,經常與throws結合使用。* throws與throw區別* 1.位置不同:throws放在方法聲明的后邊,用于聲明該方法可能出現的異常,throw放在方法的內部,用于拋出具體的異常對象。* 2.類型不同:throws后跟聲明異常的是異常的類型,throw后根具體的異常對象。*/ public class TestThrows {public static void test()throws Exception{}public static void test2()throws Exception{File file = new File("D:/aa.txt");try {file.createNewFile();//創建文件IOException屬于檢查異常,必須進行處理才能通過編譯。}catch(IOException e) {e.printStackTrace();throw e;//拋出異常,后邊跟異常對象}}public static void main(String[] args) {/*throws Exception{*/ // try { // test(); // }catch(Exception e) { // e.printStackTrace(); // }}}

5.自定義異常

1.在程序中,可能會遇到JDK提供的任何標準異常類都無法充分描述清楚我們想要表達的問題,這種情況下可以創建自己的異常類,即自定義異常類。

2.自定義異常類只需從Exception類或者它的子類派生一個子類即可。

3.自定義異常類如果繼承Exception類,則為受檢查異常,必須對其進行處理;如果不想處理,可以讓自定義異常類繼承運行時異常RuntimeException類。

4.習慣上,自定義異常類應該包含2個構造器:一個是默認的構造器,另一個是帶有詳細信息的構造器。

自定義異常類

/*** 自定義異常:可能會遇到JDK提供的任何標準異常類都無法充分描述清楚我們想要表達的問題,這種情況下可以創建自己的異常類,即自定義異常類* 實現步驟:* 1.編寫一個類繼承exception* 2.編寫該類的構造方法,并在構造方法中調用父類(Exception)中的構造方法為消息賦值。* 3.可以通過getMessage()方法獲取消息信息。*/ public class AgeException extends Exception{public AgeException(String message) {super(message);//調用父類的構造方法} }

自定義異常類的使用

public class Person {private String name;private int age;public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) throws AgeException{if(age>0&&age<150) {this.age = age;}else {throw new AgeException("年齡必須在0-150之間");//年齡不符合要求,拋出異常}}@Overridepublic String toString() {return "person [name="+name+",age="+age+"]";}public static void main(String[] args) {Person person = new Person();person.setName("zhangsan");try { // person.setAge(20);person.setAge(-20);}catch(AgeException e) {System.out.println(e.getMessage());//獲取消息信息// e.printStackTrace();}System.out.println(person);} }

使用異常機制的建議

1.要避免使用異常處理代替錯誤處理,這樣會降低程序的清晰性,并且效率低下。

2.處理異常不可以代替簡單測試---只在異常情況下使用異常機制。

3.不要進行小粒度的異常處理---應該將整個任務包裝在一個try語句塊中。

4.異常往往在高層處理(先了解!后面做項目會說!) 。

總結

以上是生活随笔為你收集整理的spring-test dao空指针异常_014、Java异常机制的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。