溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

怎么區(qū)分JAVA中throws和throw

發(fā)布時(shí)間:2020-06-29 09:18:42 來(lái)源:億速云 閱讀:149 作者:清晨 欄目:開(kāi)發(fā)技術(shù)

這篇文章主要介紹怎么區(qū)分JAVA中throws和throw,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們一定要看完!

throws和throw:

throws:用來(lái)聲明一個(gè)方法可能產(chǎn)生的所有異常,不做任何處理而是將異常往上傳,誰(shuí)調(diào)用我我就拋給誰(shuí)。

  •       用在方法聲明后面,跟的是異常類(lèi)名
  •       可以跟多個(gè)異常類(lèi)名,用逗號(hào)隔開(kāi)
  •       表示拋出異常,由該方法的調(diào)用者來(lái)處理
  •       throws表示出現(xiàn)異常的一種可能性,并不一定會(huì)發(fā)生這些異常
     

throw:則是用來(lái)拋出一個(gè)具體的異常類(lèi)型。

  •       用在方法體內(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í),就必須也拋出異?;蛘哂胻ry 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,不符合要求");
    }
  }
}

throws可以單獨(dú)使用,throw不可以,必須搭配try catch,或者throws,若程序執(zhí)行到throw exception 語(yǔ)句,則后面的語(yǔ)句不會(huì)再執(zhí)行。

以上是怎么區(qū)分JAVA中throws和throw的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對(duì)大家有幫助,更多相關(guān)知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI