1. 程式人生 > 程式設計 >如何區分JAVA中的throws和throw

如何區分JAVA中的throws和throw

throws和throw:

throws:用來宣告一個方法可能產生的所有異常,不做任何處理而是將異常往上傳,誰呼叫我我就拋給誰。

  • 用在方法聲明後面,跟的是異常類名
  • 可以跟多個異常類名,用逗號隔開
  • 表示丟擲異常,由該方法的呼叫者來處理
  • throws表示出現異常的一種可能性,並不一定會發生這些異常

throw:則是用來丟擲一個具體的異常型別。

  • 用在方法體內,跟的是異常物件名
  • 只能丟擲一個異常物件名
  • 表示丟擲異常,由方法體內的語句處理
  • throw則是丟擲了異常,執行throw則一定丟擲了某種異常

分別介紹:

throws在方法後邊宣告異常,其實就是自己不想對異常做出任何的處理,告訴別人自己可能出現的異常,交給別人處理;

注意:方法名後面跟上 throws Exception 證明這個方法裡的語句可能會發生異常,注意是可能!在別處如果呼叫這個方法時,就必須也丟擲異常或者用try catch 處理。 throws是可以單獨使用的。

eg:(程式碼示例01)

public class Test {
  public static void main(String[] args) throws Exception {
    Test test = new Test();
    /*** 呼叫的方法裡丟擲了異常,依然要呼叫的2種方式
     * 1、繼續宣告異常(此程式碼塊兒為本方式)
     * 2、用try catch 程式碼塊包住 test.compute()
     */
    test.compute();
    
  }
 
  public void compute() throws Exception{
    System.out.println("我可能發生異常");
    System.out.println("3/0的值為" +3/0);
  }
}

eg:(程式碼示例02)

public class Test {
  public static void main(String[] args){
    Test test = new Test();
    /*** 呼叫的方法裡丟擲了異常,依然要呼叫的2種方式
     * 1、丟擲異常
     * 2、用try catch 程式碼塊包住 test.compute()進行捕獲並解決異常(此程式碼塊兒為此方式)
     */
    try {
      test.compute();
    } catch (Exception e) {
      e.printStackTrace();
      System.err.println("除數不能為0");
    }

  }

  public void compute() throws Exception{
    System.out.println("我可能發生異常");
    System.out.println("3/0的值為" +3/0);
  }
}

throw:就是自己處理一個異常,有兩種方式要麼是自己捕獲異常try...catch程式碼塊,要麼是丟擲一個異常(throws 異常)

eg(程式碼示例01):

package Exception005.usuallyWrong.usuallyWrong01;

import java.util.Scanner;

/**
 * 方式1:方法後未加throws Exception,在程式碼塊兒中使用try-catch進行捕獲異常,在if選擇結構中加入throw,實現了手動異常,方式2:呼叫方法時繼續宣告該異常
 */
public class ByoneselfThrow {
  String name;
  String sex;
  int age;
  public void byoneself(){
    Scanner input=new Scanner(System.in);
    System.out.println("請輸入你的姓名:");
    name=input.next();
    System.out.println("請輸入你的年齡:");
    age=input.nextInt();
    System.out.println("請輸入你的性別:");
    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選擇結構中加入throw(手動丟擲異常),在呼叫方法時使用try-catch進行捕獲並解決異常,實現了手動異常
 * 方式2:呼叫方法時繼續宣告該異常
 */
public class ByoneselfThrow {
  String name;
  String sex;
  int age;
  public void byoneself()throws Exception{
    Scanner input=new Scanner(System.in);
    System.out.println("請輸入你的姓名:");
    name=input.next();
    System.out.println("請輸入你的年齡:");
    age=input.nextInt();
    System.out.println("請輸入你的性別:");
    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
    {
      //呼叫帶throws宣告的方法,必須顯式捕獲該異常
      //否則,必須在main方法中再次宣告丟擲
      throwChecked(-3);      
    }
    catch (Exception e)
    {
      System.out.println(e.getMessage());
    }
    //呼叫丟擲Runtime異常的方法既可以顯式捕獲該異常,
    //也可不理會該異常
    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異常,既可以顯式捕獲該異常
      //也可完全不理會該異常,把該異常交給該方法呼叫者處理
      throw new RuntimeException("a的值大於0,不符合要求");
    }
  }
}

總結:

throws可以單獨使用,throw不可以,必須搭配try catch,或者throws,若程式執行到throw exception 語句,則後面的語句不會再執行。

以上就是如何區分JAVA中的throws和throw的詳細內容,更多關於JAVA中的throws和throw的資料請關注我們其它相關文章!