中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么在Java中同時使用catch和throw

發布時間:2021-02-25 16:36:15 來源:億速云 閱讀:216 作者:Leah 欄目:開發技術

今天就跟大家聊聊有關怎么在Java中同時使用catch和throw,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。

1 代碼示例

AuctionTest.java

public class AuctionTest
{
	private double initPrice = 30.0;
	// 因為該方法中顯式拋出了AuctionException異常,
	// 所以此處需要聲明拋出AuctionException異常
	public void bid(String bidPrice)
		throws AuctionException
	{
		double d = 0.0;
		try
		{
			d = Double.parseDouble(bidPrice);
		}
		catch (Exception e)
		{
			// 此處完成本方法中可以對異常執行的修復處理,
			// 此處僅僅是在控制臺打印異常跟蹤棧信息。
			e.printStackTrace();
			// 再次拋出自定義異常
			throw new AuctionException("競拍價必須是數值,"
				+ "不能包含其他字符!");
		}
		if (initPrice > d)
		{
			throw new AuctionException("競拍價比起拍價低,"
				+ "不允許競拍!");
		}
		initPrice = d;
	}
	public static void main(String[] args)
	{
		AuctionTest at = new AuctionTest();
		try
		{
			at.bid("df");
		}
		catch (AuctionException ae)
		{
			// 再次捕捉到bid方法中的異常。并對該異常進行處理
			System.err.println(ae.getMessage());
		}
	}
}

AuctionException.java

public class AuctionException extends Exception
{
 // 無參數的構造器
 public AuctionException(){}    //①
 // 帶一個字符串參數的構造器
 public AuctionException(String msg)  //②
 {
 super(msg);
 }
}

2 運行結果

java.lang.NumberFormatException: For input string: "df"
 at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:1224)
 at java.lang.Double.parseDouble(Double.java:510)
 at AuctionTest.bid(AuctionTest.java:16)
 at AuctionTest.main(AuctionTest.java:39)

競拍價必須是數值,不能包含其他字符!

3 結果說明

上面程序bid對應catch塊捕獲到異常后,系統打印了該異常的跟蹤棧信息,接著拋出一個AuctionException異常,通知該方法調用者再次處理AuctionException異常。

所有程序中的main方法,也就是bid方法調用者再次捕獲AuctionException異常并將該異常詳細描述信息輸出到標準錯誤輸出。

補充:Java try-catch、throw和throws的幾點想法

以前寫代碼,很少用到異常,后來發現這種習慣是錯的。異常也是一種信息,并不是錯誤。

1:先寫個簡單的類:

package com.exception.demo;
public class Main {
  public static void main(String[] args) {
    Main main = new Main();
  }
  public void methodTry() {
  }
  public void methodThrow() {
  }
}

初始環境就是這么簡答。

2:下面給方法methodTry加上方法主體:

  public static void main(String[] args) {
    Main main = new Main();
    main.methodTry();
  }
  public void methodTry() {
    int a=10;
    int b=0;
    int c=a/b;
  }

剛開始學代碼的時候都會寫這個方法,會拋出一個異常:

怎么在Java中同時使用catch和throw

控制臺很清楚的告訴我們,被除數不能為0.但是如果我們想自己獲取這個異常,然后做些操作呢?比如說 如果這個方法體有問題,我就做一個輸出。

  public void methodTry() {
    try {
      int a=10;
      int b=0;
      int c=a/b;
      System.out.println(c);
    } catch (Exception e) {
      System.out.println("這個方法體有問題:"+e.getMessage());
    }
    
  }

這個時候就用到了try-catch,手動的捕獲這個異常,然后進行我們需要的操作。畢竟異常分很多種,并不是所有的異常都是我們不需要的。

比如說對用戶登錄來說,登錄成功 登錄失敗兩種結果,登錄失敗又分為重復登錄,賬號密碼不匹配等。

我們可以把這些失敗全都寫成Exception。當成功的時候就直接返回,失敗的時候拋出異常,這個可比我們寫好多返回值簡單多了。

接著說try-catch

怎么在Java中同時使用catch和throw

我們手動的捕獲了這個異常。上面的代碼告訴我們,當try-catch塊中有異常時,異常后面的代碼是不會執行的。try-catch還有什么好處?回滾。

3:throw

  public static void main(String[] args) {
    Main main = new Main();
    main.methodThrow();
  }
  public void methodThrow() {
    throw new Exception("這里有異常");
  }

其實當我簡單的拋出個異常的時候,throw new Exception()這里會報錯,現在看一個報錯信息:

怎么在Java中同時使用catch和throw

顯示讓我們選擇是throws 還是try-catch。

我們寫好的throw是什么意思呢? 其實跟a/0是一個意思,都是拋出一個異常,只不過一個是jdk已經定義好的異常,被除數不能為0.一個是我們手動拋出的異常。

先用try-catch試試看

  public void methodThrow() {
    try {
      throw new Exception("這里有異常");
    } catch (Exception e) {
      System.out.println("MethodThrow:"+e.getMessage());
    }
  }

怎么在Java中同時使用catch和throw

重點在于手動拋出異常后,我們要在catch中進行處理,在catch中寫我們的部門邏輯代碼。

4:throws

剛才我們選擇的是try-catch,現在選擇throws

  public static void main(String[] args) throws Exception {
    Main main = new Main();
    main.methodThrow();
  }
  public void methodThrow() throws Exception {
    throw new Exception("這里有異常");
  }

方法methodThrow throws Exception之后,他的父類就面臨著兩種情況,要么try-catch 要么throws這個異常。這種情況跟methodThrow中手動拋出異常遇到的問題是一樣的。

看來可以這么理解:

throw是手動拋出異常,跟 被除數不能為0 數組下標越界等異常一樣,都是異常。

try-catch是在catch中手動捕獲異常,然后進行一些操作。比如說輸出異常信息,打印錯誤日志等。

throws是往上級拋出異常,我的方法methodThrow有異常,但是在這個方法中我不進行處理了,讓上級進行處理吧。然后就跑到main函數那去了。

對main函數來說,可以throws讓系統進行處理,也可以自己處理這個異常啊。

main.methodThrow()和a/0 、throw new Execption()沒什么區別,都是有異常。

其實可以整體的寫:

  public static void main(String[] args){
    Main main = new Main();
    try {
      main.methodThrow();
    } catch (Exception e) {
      System.out.println(e.getMessage());
    }
  }
  public void methodThrow() throws Exception {
    throw new Exception("這里有異常");
  }

看完上述內容,你們對怎么在Java中同時使用catch和throw有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業資訊頻道,感謝大家的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

乡宁县| 特克斯县| 隆安县| 宜川县| 芷江| 乐安县| 绥化市| 城固县| 十堰市| 甘孜| 遂川县| 区。| 甘南县| 津市市| 马尔康县| 塔河县| 阿城市| 大悟县| 千阳县| 瓮安县| 河池市| 腾冲县| 武汉市| 开封县| 太谷县| 吉林省| 调兵山市| 西贡区| 娄底市| 舟山市| 塔城市| 华池县| 日照市| 张家港市| 米泉市| 扶沟县| 观塘区| 峡江县| 炉霍县| 清水河县| 永兴县|