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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

异常 —— throws

發(fā)布時(shí)間:2025/4/16 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 异常 —— throws 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

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í)行

package com.itheima.demo01.Exception; public class Demo01Exception {public static void main(String[] args) /*throws ParseException*/ {//Exception:編譯期異常,進(jìn)行編譯(寫(xiě)代碼)java程序出現(xiàn)的問(wèn)題SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");//用來(lái)格式化日期Date date = null;try {date = sdf.parse("1999-0909");//把字符串格式的日期,解析為Date格式的日期} catch (ParseException e) {e.printStackTrace();}System.out.println(date);//RuntimeException:運(yùn)行期異常,java程序運(yùn)行過(guò)程中出現(xiàn)的問(wèn)題int[] arr = {1,2,3};System.out.println(arr[0]);try {//可能會(huì)出現(xiàn)異常的代碼System.out.println(arr[3]);}catch(Exception e){//異常的處理邏輯System.out.println(e);}/*Error:錯(cuò)誤OutOfMemoryError: Java heap space內(nèi)存溢出的錯(cuò)誤,創(chuàng)建的數(shù)組太大了,超出了給JVM分配的內(nèi)存*///int[] arr = new int[1024*1024*1024];//必須修改代碼,創(chuàng)建的數(shù)組小一點(diǎn)int[] arr = new int[1024*1024];System.out.println("后續(xù)代碼");} }

?



? 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處理

package com.itheima.demo01.Exception;public class Demo03Throw {public static void main(String[] args) {//int[] arr = null;int[] arr = new int[3];int e = getElement(arr,3);System.out.println(e);}public static int getElement(int[] arr,int index){/*我們可以對(duì)傳遞過(guò)來(lái)的參數(shù)數(shù)組,進(jìn)行合法性校驗(yàn)如果數(shù)組arr的值是null那么我們就拋出空指針異常,告知方法的調(diào)用者"傳遞的數(shù)組的值是null"*/if(arr == null){throw new NullPointerException("傳遞的數(shù)組的值是null");}/*我們可以對(duì)傳遞過(guò)來(lái)的參數(shù)index進(jìn)行合法性校驗(yàn)如果index的范圍不在數(shù)組的索引范圍內(nèi)那么我們就拋出數(shù)組索引越界異常,告知方法的調(diào)用者"傳遞的索引超出了數(shù)組的使用范圍"*/if(index<0 || index>arr.length-1){throw new ArrayIndexOutOfBoundsException("傳遞的索引超出了數(shù)組的使用范圍");}int ele = arr[index];return ele;} }



異常的處理

拋出異常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)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。