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