如何區(qū)分JAVA中的throws和throw
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)的異常,交給別人處理;
注意:方法名后面跟上 throws Exception 證明這個(gè)方法里的語(yǔ)句可能會(huì)發(fā)生異常,注意是可能!在別處如果調(diào)用這個(gè)方法時(shí),就必須也拋出異常或者用try catch 處理。 throws是可以單獨(dú)使用的。
eg:(代碼示例01)
public class Test { public static void main(String[] args) throws Exception { Test test = new Test(); /*** 調(diào)用的方法里拋出了異常,依然要調(diào)用的2種方式 * 1、繼續(xù)聲明異常(此代碼塊兒為本方式) * 2、用try catch 代碼塊包住 test.compute() */ test.compute(); } public void compute() throws Exception{ System.out.println('我可能發(fā)生異常'); System.out.println('3/0的值為' +3/0); }}
eg:(代碼示例02)
public class Test { public static void main(String[] args){ Test test = new Test(); /*** 調(diào)用的方法里拋出了異常,依然要調(diào)用的2種方式 * 1、拋出異常 * 2、用try catch 代碼塊包住 test.compute()進(jìn)行捕獲并解決異常(此代碼塊兒為此方式) */ try { test.compute(); } catch (Exception e) { e.printStackTrace(); System.err.println('除數(shù)不能為0'); } } public void compute() throws Exception{ System.out.println('我可能發(fā)生異常'); System.out.println('3/0的值為' +3/0); }}
throw:就是自己處理一個(gè)異常,有兩種方式要么是自己捕獲異常try...catch代碼塊,要么是拋出一個(gè)異常(throws 異常)
eg(代碼示例01):
package Exception005.usuallyWrong.usuallyWrong01;import java.util.Scanner;/** * 方式1:方法后未加throws Exception,在代碼塊兒中使用try-catch進(jìn)行捕獲異常,在if選擇結(jié)構(gòu)中加入throw,實(shí)現(xiàn)了手動(dòng)異常,方式2:調(diào)用方法時(shí)繼續(xù)聲明該異常 */public class ByoneselfThrow { String name; String sex; int age; public void byoneself(){ Scanner input=new Scanner(System.in); System.out.println('請(qǐng)輸入你的姓名:'); name=input.next(); System.out.println('請(qǐng)輸入你的年齡:'); age=input.nextInt(); System.out.println('請(qǐng)輸入你的性別:'); sex=input.next(); try{ if('男'.equals(sex)||'女'.equals(sex)){System.out.println('我的名字叫'+name+',年齡為'+age+',性別為'+sex); }else{throw new Exception('性別只能是男/女!'); } }catch (Exception e){ e.printStackTrace(); } }}class Test{ public static void main(String[] args) { ByoneselfThrow center=new ByoneselfThrow(); center.byoneself(); }}
eg(代碼示例02):
package Exception005.usuallyWrong.usuallyWrong01;import java.util.Scanner;/** * 方式1:方法后加throws Exception(聲明異常),在if選擇結(jié)構(gòu)中加入throw(手動(dòng)拋出異常),在調(diào)用方法時(shí)使用try-catch進(jìn)行捕獲并解決異常,實(shí)現(xiàn)了手動(dòng)異常 * 方式2:調(diào)用方法時(shí)繼續(xù)聲明該異常 */public class ByoneselfThrow { String name; String sex; int age; public void byoneself()throws Exception{ Scanner input=new Scanner(System.in); System.out.println('請(qǐng)輸入你的姓名:'); name=input.next(); System.out.println('請(qǐng)輸入你的年齡:'); age=input.nextInt(); System.out.println('請(qǐng)輸入你的性別:'); sex=input.next(); if('男'.equals(sex)||'女'.equals(sex)){System.out.println('我的名字叫'+name+',年齡為'+age+',性別為'+sex); }else{throw new Exception('性別只能是男/女!'); } } }class Test{ public static void main(String[] args) { ByoneselfThrow center=new ByoneselfThrow(); try { center.byoneself(); } catch (Exception e) { e.printStackTrace(); } }}
eg(代碼示例03):
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,不符合要求'); } }}
總結(jié):
throws可以單獨(dú)使用,throw不可以,必須搭配try catch,或者throws,若程序執(zhí)行到throw exception 語(yǔ)句,則后面的語(yǔ)句不會(huì)再執(zhí)行。
以上就是如何區(qū)分JAVA中的throws和throw的詳細(xì)內(nèi)容,更多關(guān)于JAVA中的throws和throw的資料請(qǐng)關(guān)注好吧啦網(wǎng)其它相關(guān)文章!
相關(guān)文章:
1. PHP字符串前后字符或空格刪除方法介紹2. html小技巧之td,div標(biāo)簽里內(nèi)容不換行3. 將properties文件的配置設(shè)置為整個(gè)Web應(yīng)用的全局變量實(shí)現(xiàn)方法4. nestjs實(shí)現(xiàn)圖形校驗(yàn)和單點(diǎn)登錄的示例代碼5. python開(kāi)發(fā)飛機(jī)大戰(zhàn)游戲6. laravel ajax curd 搜索登錄判斷功能的實(shí)現(xiàn)7. 以PHP代碼為實(shí)例詳解RabbitMQ消息隊(duì)列中間件的6種模式8. css進(jìn)階學(xué)習(xí) 選擇符9. Echarts通過(guò)dataset數(shù)據(jù)集實(shí)現(xiàn)創(chuàng)建單軸散點(diǎn)圖10. python實(shí)現(xiàn)自動(dòng)化辦公郵件合并功能
