异常 —— throws
1.1 異常概念
1.2 異常體系
java.lang.Throwable:類是 Java 語言中所有錯誤或異常的超類。
? ? ? ? Exception:編譯期異常,進行編譯(寫代碼)java程序出現的問題
? ? ? ? ? ? RuntimeException:運行期異常,java程序運行過程中出現的問題
? ? ? ? ? ? 異常就相當于程序得了一個小毛病(感冒,發燒),把異常處理掉,程序可以繼續執行(吃點藥,繼續革命工作)
? ? ? ? Error:錯誤
? ? ? ? ? ? 錯誤就相當于程序得了一個無法治愈的毛病(非典,艾滋).必須修改源代碼,程序才能繼續執行
?
? throw關鍵字
? ? 作用:
? ? ? ? 可以使用throw關鍵字在指定的方法中拋出指定的異常
? ? 使用格式:
? ? ? ? throw new xxxException("異常產生的原因");
? ? 注意:
? ? ? ? 1.throw關鍵字必須寫在方法的內部
? ? ? ? 2.throw關鍵字后邊new的對象必須是Exception或者Exception的子類對象
? ? ? ? 3.throw關鍵字拋出指定的異常對象,我們就必須處理這個異常對象
? ? ? ? ? ? throw關鍵字后邊創建的是RuntimeException或者是 RuntimeException的子類對象,我們可以不處理,默認交給JVM處理(打印異常對象,中斷程序)
? ? ? ? ? ? throw關鍵字后邊創建的是編譯異常(寫代碼的時候報錯),我們就必須處理這個異常,要么throws,要么try...catch
定義一個方法,獲取數組指定索引處的元素
? ? ? ? 參數:
? ? ? ? ? ? int[] arr
? ? ? ? ? ? int index
? ? ? ? 以后(工作中)我們首先必須對方法傳遞過來的參數進行合法性校驗
? ? ? ? 如果參數不合法,那么我們就必須使用拋出異常的方式,告知方法的調用者,傳遞的參數有問題
? ? ? ? 注意:
? ? ? ? ? ? NullPointerException是一個運行期異常,我們不用處理,默認交給JVM處理
? ? ? ? ? ? ArrayIndexOutOfBoundsException是一個運行期異常,我們不用處理,默認交給JVM處理
異常的處理
拋出異常throw
Objects非空判斷
package com.itheima.demo01.Exception;import java.util.Objects; public class Demo04Objects {public static void main(String[] args) {method(null);}public static void method(Object obj){//對傳遞過來的參數進行合法性判斷,判斷是否為null/*if(obj == null){throw new NullPointerException("傳遞的對象的值是null");}*///Objects.requireNonNull(obj);Objects.requireNonNull(obj,"傳遞的對象的值是null");} }聲明異常throws
throws關鍵字:異常處理的第一種方式,交給別人處理
? ? 作用:
? ? ? ? 當方法內部拋出異常對象的時候,那么我們就必須處理這個異常對象
? ? ? ? 可以使用throws關鍵字處理異常對象,會把異常對象聲明拋出給方法的調用者處理(自己不處理,給別人處理),最終交給JVM處理-->中斷處理
? ? 使用格式:在方法聲明時使用
? ? ? ? 修飾符 返回值類型 方法名(參數列表) throws AAAExcepiton,BBBExcepiton...{
? ? ? ? ? ? throw new AAAExcepiton("產生原因");
? ? ? ? ? ? throw new BBBExcepiton("產生原因");
? ? ? ? ? ? ...
? ? ? ? }
? ? ?注意:
? ? ? ? 1.throws關鍵字必須寫在方法聲明處
? ? ? ? 2.throws關鍵字后邊聲明的異常必須是Exception或者是Exception的子類
? ? ? ? 3.方法內部如果拋出了多個異常對象,那么throws后邊必須也聲明多個異常
? ? ? ? ? ? 如果拋出的多個異常對象有子父類關系,那么直接聲明父類異常即可
? ? ? ? 4.調用了一個聲明拋出異常的方法,我們就必須的處理聲明的異常
? ? ? ? ? ? 要么繼續使用throws聲明拋出,交給方法的調用者處理,最終交給JVM
? ? ? ? ? ? 要么try...catch自己處理異常
?FileNotFoundException是編譯異常,拋出了編譯異常,就必須處理這個異常,可以使用throws繼續聲明拋出FileNotFoundException這個異常對象,讓方法的調用者處理
package com.itheima.demo01.Exception;import java.io.FileNotFoundException; import java.io.IOException;public class Demo05Throws {/*FileNotFoundException extends IOException extends Excepiton如果拋出的多個異常對象有子父類關系,那么直接聲明父類異常即可*///public static void main(String[] args) throws FileNotFoundException,IOException {//public static void main(String[] args) throws IOException {public static void main(String[] args) throws Exception {readFile("c:\\a.tx");System.out.println("后續代碼");}/*定義一個方法,對傳遞的文件路徑進行合法性判斷如果路徑不是"c:\\a.txt",那么我們就拋出文件找不到異常對象,告知方法的調用者注意:FileNotFoundException是編譯異常,拋出了編譯異常,就必須處理這個異??梢允褂胻hrows繼續聲明拋出FileNotFoundException這個異常對象,讓方法的調用者處理*/public static void readFile(String fileName) throws FileNotFoundException,IOException{if(!fileName.equals("c:\\a.txt")){throw new FileNotFoundException("傳遞的文件路徑不是c:\\a.txt");}/*如果傳遞的路徑,不是.txt結尾那么我們就拋出IO異常對象,告知方法的調用者,文件的后綴名不對*/if(!fileName.endsWith(".txt")){throw new IOException("文件的后綴名不對");}System.out.println("路徑沒有問題,讀取文件");} }?
總結
以上是生活随笔為你收集整理的异常 —— throws的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 判断一个整数是否是水仙花数 || 编写
- 下一篇: 用函数的思想进行四则运算