小舞講解java例外啦,快來支持下
- 1. 例外
- 1.1 例外概述
- 1.2 jvm的默認處理方案
- 1.3 Throwable 的成員方法
- 1.4 例外的處理
- 1.5 自定義例外
- 1.5.1 throw與throws區別
- 1.5.2 舉例
1. 例外
1.1 例外概述
-
例外:
例外機制是指當程式出現錯誤后,程式如何處理,具體來說,例外機制提供了程式退出的安全通道,當出現錯誤后,程式執行的流程發生改變,程式的控制權轉移到例外處理器,程式錯誤分為三種:1.編譯錯誤;2.運行時錯誤;3.邏輯錯誤, (1)編譯錯誤是因為程式沒有遵循語法規則,編譯程式能夠自己發現并且提示我們錯誤的原因和位置,這個也是大家在剛接觸編程語言最常遇到的問題, (2)運行時錯誤是因為程式在執行時,運行環境發現了不能執行的操作, (3)邏輯錯誤是因為程式沒有按照預期的邏輯順序執行,例外也就是指程式運行時發生錯誤,而例外處理就是對這些錯誤進行處理和控制, -
例外體系:

-
Error:嚴重問題,不需要處理
-
Exception:稱為例外類,它表示程式本身可以處理的問題
-
RuntimeException:在編譯期是不檢查的,出現問題后,需要我們回來修改代碼
-
非RuntimeException:編譯期就必須處理的,否則程式不能通過編譯,就更不能正常運行了
1.2 jvm的默認處理方案
如果程式出現了問題,我們沒有做任何處理,最JVM會做默認的處理
- 把例外的名稱,例外原因及例外出現的位置等資訊輸出在了控制臺
- 程式停止執行
public class runthrow {
public static void main(String[] args) {
System.out.println("開始");
method();
System.out.println("結束");
}
public static void method(){
int []a={1,2,3};
System.out.println(a[3]);//這里沒報錯,但是在執行時會出現錯誤
}
}

1.3 Throwable 的成員方法

- getMessage的方法:例外原因
public class runthrow {
public static void main(String[] args) {
System.out.println("開始");
method();
System.out.println("結束");
}
public static void method(){
try {
int []a={1,2,3};
System.out.println(a[3]);
}catch (ArrayIndexOutOfBoundsException e){
System.out.println( e.getMessage());
}
}
}
運行結果:
開始
Index 3 out of bounds for length 3//例外原因
結束
- String toString方法:類名及其原因
public static void method(){
try {
int []a={1,2,3};
System.out.println(a[3]);
}catch (ArrayIndexOutOfBoundsException e){
System.out.println( e.toString());
}
}
運行結果:
開始
java.lang.ArrayIndexOutOfBoundsException: Index 3 out of bounds for length 3//類名及其原因
結束
- printStackTrace()方法:命令列列印例外資訊在程式中出錯的位置及原因
public static void method(){
try {
int []a={1,2,3};
System.out.println(a[3]);
}catch (ArrayIndexOutOfBoundsException e){
e.printStackTrace();
}
}
運行結果:
開始
結束
java.lang.ArrayIndexOutOfBoundsException: Index 3 out of bounds for length 3
at com.demo45.runthrow.method(runthrow.java:12)
at com.demo45.runthrow.main(runthrow.java:6)
1.4 例外的處理
如果例外出現,我們就需要自己來進行處理,有兩種方案:
- try…catch…
格式:
try{
可能出現例外的代碼;
}catch(例外類名 變數名){
例外處理的代碼;
}
執行流程:
- 程式從try里面的代碼開始執行
- 出現例外,會自動生成一個例外類物件,該例外物件將被提交給Java運行時系統
- 當Java運行時系統接收到例外物件時,會到catch中去找匹配的例外類,找到后進行例外的處理執行完畢之后,程式還可以繼續往下執行
public class runthrow {
public static void main(String[] args) {
System.out.println("開始");
method();
System.out.println("結束");
}
public static void method(){
try {
int []a={1,2,3};
System.out.println(a[3]);
}catch (ArrayIndexOutOfBoundsException e){
e.printStackTrace();//輸出例外所在的位置以及資訊,但是程式可以繼續執行下去
}
}
}
運行結果:

- throw
雖然我們通過try…catch…可以對例外進行處理,但是并不是所有的情況我們都有權限進行例外的處理也就是說,有些時候可能出現的例外是我們處理不了的,這個時候該怎么辦呢? - 針對這種情況,Java提供了throws的處理方案
格式:
throw 例外類名;
注意:格式是跟在方法后面的
- 編譯時例外必須要進行處理,兩種處理方案: try…catch…或者throws,如果采用throws這種方案,將來誰呼叫誰處理,throw其實就是拋出了例外,并沒有做任何的處理,而最后要用try…catch進行處理
- 運行時例外可以不處理,出現問題后,需要我們回來修改代碼
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class runthrow {
public static void main(String[] args) {
System.out.println("開始");
try {//誰呼叫,誰處理,用try catch進行處理
method();
} catch (ParseException e) {
e.printStackTrace();
}
System.out.println("結束");
}
public static void method() throws ParseException {//拋出例外,但是沒有進行處理
String string="2022-12";
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM");
Date d = sdf.parse(string);
System.out.println(d);
}
}
1.5 自定義例外
java提供的例外類,不夠我們使用,需要自己定義一些例外類
格式:
public class XXX extends Exception|RuntimeException{
添加一個空引數的構造方法
添加一個帶例外資訊的構造方法
}
范例:

在這里插入代碼片
注意:
-
自定義例外類一般是以Exception結尾,說明該類是一個例外類
-
自定義例外類,必須繼承Exception或者RuntimeException
繼承Exception:那么自定義的例外類就是一個編譯期例外,如果出現了編譯期例外就必須處理,要么throws ,要么try catch 繼承RuntimeException:那么自定義的例外就是一個運行期例外,無需處理,交給虛擬機處理,中斷處理,
1.5.1 throw與throws區別

1.5.2 舉例
例外類:
public class ScoreEXpection extends Exception{
public ScoreEXpection() {}//無參構造
public ScoreEXpection(String message) {//有參構造,可直接生成
super(message);
}
}
老師類:
public class Teacher {
public void checkScore(int score) throws ScoreEXpection {//拋出類名
if(score < 0||score >100){
throw new ScoreEXpection("您輸入的分數有誤");//拋出物件
}else {
System.out.println("分數正常");
}
}
}
測驗類
import java.util.Scanner;
public class Demo {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
System.out.println("請您輸入成績:");
int score = sc.nextInt();
Teacher t=new Teacher();
try {
t.checkScore(score);
} catch (ScoreEXpection e) {
e.printStackTrace();
}
}
}
運行結果:


以上就是對例外類的總結,希望大家可以三聯加支持哦!!
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/386562.html
標籤:java
