如何區(qū)分JAVA中的throws和throw
throws和throw:
throws:用來聲明一個(gè)方法可能產(chǎn)生的所有異常,不做任何處理而是將異常往上傳,誰調(diào)用我我就拋給誰。
- 用在方法聲明后面,跟的是異常類名
- 可以跟多個(gè)異常類名,用逗號(hào)隔開
- 表示拋出異常,由該方法的調(diào)用者來處理
- throws表示出現(xiàn)異常的一種可能性,并不一定會(huì)發(fā)生這些異常
throw:則是用來拋出一個(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)注腳本之家其它相關(guān)文章!
相關(guān)文章
Mybatis-plus配置多數(shù)據(jù)源,連接多數(shù)據(jù)庫(kù)方式
這篇文章主要介紹了Mybatis-plus配置多數(shù)據(jù)源,連接多數(shù)據(jù)庫(kù)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-06-06
使用JAR包中MANIFEST.MF的注意事項(xiàng)
這篇文章主要介紹了使用JAR包中MANIFEST.MF的注意事項(xiàng),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-07-07
Mybatis-Plus如何使用分頁(yè)實(shí)例詳解
最近在研究mybatis,然后就去找簡(jiǎn)化mybatis開發(fā)的工具,下面這篇文章主要給大家介紹了關(guān)于Mybatis-Plus如何使用分頁(yè)的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-03-03

