java異常中throw和throws的區(qū)別及說(shuō)明
java異常throw和throws的區(qū)別
throws和throw
throws:用來(lái)聲明一個(gè)方法可能產(chǎn)生的所有異常,不做任何處理而是將異常往上傳,誰(shuí)調(diào)用我我就拋給誰(shuí)。
- 用在方法聲明后面,跟的是異常類名
- 可以跟多個(gè)異常類名,用逗號(hào)隔開(kāi)
- 表示拋出異常,由該方法的調(diào)用者來(lái)處理
- throws表示出現(xiàn)異常的一種可能性,并不一定會(huì)發(fā)生這些異常
throw:則是用來(lái)拋出一個(gè)具體的異常類型。
- 用在方法體內(nèi),跟的是異常對(duì)象名
- 只能拋出一個(gè)異常對(duì)象名
- 表示拋出異常,由方法體內(nèi)的語(yǔ)句處理
- throw則是拋出了異常,執(zhí)行throw則一定拋出了某種異常
分別介紹
throws在方法后邊聲明異常,其實(shí)就是自己不想對(duì)異常做出任何的處理,告訴別人自己可能出現(xiàn)的異常,交給別人處理,然別人處理
package com.xinkaipu.Exception; class Math{ ? ? public int div(int i,int j) throws Exception{ ? ? ? ? int t=i/j; ? ? ? ? return t; ? ? } }
public class ThrowsDemo { ? ? public static void main(String args[]) throws Exception{ ? ? ? ? Math m=new Math(); ? ?} }
throw:就是自己處理一個(gè)異常,有兩種方式要么是自己捕獲異常try...catch代碼塊,要么是拋出一個(gè)異常(throws 異常)
package com.xinkaipu.Exception; public class TestThrow { public static void main(String[] args) { try { //調(diào)用帶throws聲明的方法,必須顯式捕獲該異常 //否則,必須在main方法中再次聲明拋出 throwChecked(-3); } catch (Exception e) { System.out.println(e.getMessage()); } //調(diào)用拋出Runtime異常的方法既可以顯式捕獲該異常, //也可不理會(huì)該異常 throwRuntime(3); } public static void throwChecked(int a)throws Exception { if (a > 0) { //自行拋出Exception異常 //該代碼必須處于try塊里,或處于帶throws聲明的方法中 throw new Exception("a的值大于0,不符合要求"); } } public static void throwRuntime(int a) { if (a > 0) { //自行拋出RuntimeException異常,既可以顯式捕獲該異常 //也可完全不理會(huì)該異常,把該異常交給該方法調(diào)用者處理 throw new RuntimeException("a的值大于0,不符合要求"); } } }
解析java中的throw和throws關(guān)鍵字
throws關(guān)鍵字
1.1 作用
向上拋異常,把異常交給調(diào)用處處理,實(shí)際上自身并沒(méi)有處理異常。
1.2 原理
一旦方法體出現(xiàn)異常,仍會(huì)在異常代碼出生成一個(gè)異常類的對(duì)象,當(dāng)此對(duì)象滿足throws后的異常類型時(shí),就會(huì)被拋出,異常代碼后續(xù)的代碼,均不執(zhí)行。
1.3 如何用
- 1.3.1 語(yǔ)法
訪問(wèn)權(quán)限修飾符 返回值類型 方法名(形參列表) throws 異常類型(異常類){ //實(shí)際書寫的位置是形參列表的最后一個(gè)括號(hào)后面 } //出現(xiàn)編譯時(shí)異常,又不想自己處理,那就可以考慮向上拋出異常
- 1.3.2 示例代碼
package Work; import java.io.FileNotFoundException; import java.io.FileOutputStream; public class TestDog { public static void main(String[] args) { try { f1(); } catch (Exception e) { System.out.println("處理了"); System.out.println(e.getMessage()); } System.out.println("后面的代碼"); } public static void f1() throws FileNotFoundException { FileOutputStream fileOutputStream=new FileOutputStream("d:\\bc.md"); //只要處理了異常,后面的代碼都會(huì)順利執(zhí)行 System.out.println("執(zhí)行了沒(méi)有"); } }
- 1.3.3 示例代碼運(yùn)行截圖
throw關(guān)鍵字
2.1 作用
手動(dòng)制造一個(gè)異常,不符合條件的時(shí)候我們可以考慮去拋出一個(gè)異常,在調(diào)用處對(duì)異常進(jìn)行邏輯的處理
2.2 如何用
- 2.2.1 語(yǔ)法
訪問(wèn)權(quán)限修飾符 返回值類型 方法名(形參列表) { throw new Exception("展示的異常信息"); }
- 2.2.3 示例代碼
Dog類
package Work; public class Dog { private String name; //名字 private String type; //類型 private int age; //年齡 public Dog() { } public Dog(String name, String type, int age) throws Exception{ this.name = name; this.type = type; setAge(age); } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getType() { return type; } public void setType(String type) { this.type = type; } public int getAge() { return age; } public void setAge(int age) throws Exception{ if(age<0||age>10){ throw new Exception("年齡非法"); } this.age = age; } }
Test類
package Work; public class Test{ public static void main(String[] args) { try { Dog d1=new Dog("旺財(cái)","哈士奇",-9); } catch (Exception e) { //輸入有誤就打印異常信息 System.out.println(e.getMessage()); } System.out.println("后面的代碼"); } }
- 2.2.4 示例代碼運(yùn)行截圖
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Java中Base64和File之間互轉(zhuǎn)代碼示例
這篇文章主要給大家介紹了關(guān)于Java中Base64和File之間互轉(zhuǎn)的相關(guān)資料,Base64是網(wǎng)絡(luò)上最常見(jiàn)的用于傳輸8Bit字節(jié)碼的編碼方式之一,Base64就是一種基于64個(gè)可打印字符來(lái)表示二進(jìn)制數(shù)據(jù)的方法,需要的朋友可以參考下2023-08-08詳談異步log4j2中的location信息打印問(wèn)題
這篇文章主要介紹了詳談異步log4j2中的location信息打印問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-12-12java ThreadPoolExecutor 并發(fā)調(diào)用實(shí)例詳解
這篇文章主要介紹了java ThreadPoolExecutor 并發(fā)調(diào)用實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下2017-05-05SpringBoot整合Milvus的實(shí)現(xiàn)
本文主要介紹了SpringBoot整合Milvus的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-07-07詳解Spring Cloud Zuul 服務(wù)網(wǎng)關(guān)
本篇文章主要介紹了詳解Spring Cloud Zuul 服務(wù)網(wǎng)關(guān),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-12-12XSS攻擊以及java應(yīng)對(duì)xss攻擊的解決方案
XSS是跨站腳本攻擊Cross Site Scripting的縮寫,為了和層疊樣式表CSS加以區(qū)分,因此將跨站腳本攻擊縮寫為XSS,這篇文章主要給大家介紹了關(guān)于XSS攻擊以及java應(yīng)對(duì)xss攻擊的解決方案,需要的朋友可以參考下2024-02-02SpringBoot實(shí)現(xiàn)多端口監(jiān)聽(tīng)的代碼示例
當(dāng)你需要在同一個(gè)Spring Boot應(yīng)用中,通過(guò)不同的端口來(lái)提供不同的服務(wù)或功能時(shí),就需要實(shí)現(xiàn)多端口監(jiān)聽(tīng),所以本文給大家介紹了SpringBoot實(shí)現(xiàn)多端口監(jiān)聽(tīng)的方法示例,并有相關(guān)的代碼示例供大家參考,需要的朋友可以參考下2024-09-09Spring-cloud 注冊(cè)服務(wù)提供者搭建方法
本篇文章主要介紹了Spring-cloud 注冊(cè)服務(wù)提供者搭建方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-04-04