玩轉java自定義異常的教程(java異常菜鳥教程)

本文目錄一覽:

java自定義異常類

public void MyException extends Exception{

public MyExceprion(){

System.out.println(“自定義異常”);

}

}

public class Exam{

public static void mul() throws MyException{

if(自己寫條件){

throw new MyException();

}

}

}

這個應該能看懂吧,我只是寫了個結構沒寫完整程序的,你看懂這個就行,定義一個自定義異常,然後在你需要的地方拋出異常,在主方法中調用方法的時候達到一定條件就會拋出異常

JAVA 自定義異常是怎麼使用的?

throws是用來聲明一個方法可能拋出的所有異常信息

throw則是指拋出的一個具體的異常類型。

通常在一個方法(類)的聲明處通過throws聲明方法(類)可能拋出的異常信息,而在方法(類)內部通過throw聲明一個具體的異常信息。

throws通常不用顯示的捕獲異常,可由系統自動將所有捕獲的異常信息拋給上級方法;

throw則需要用戶自己捕獲相關的異常,而後在對其進行相關包裝,最後在將包裝後的異常信息拋出。

java 如何自定義異常 用代碼展示 真心靠譜

首先自定義一個異常類 public class ActionException extends Exception{ public String returnMessage; public ActionException(String returnMessage){ this.returnMessage = returnMessage; } public String getReturnMessage(){ return this.returnMessage; } 代碼中如果用到這個自定義的異常類,這裡的代碼只是做了個演示 private void validate(int a,int b)throws ActionException{ if(ab){ throw new ActionException(“a b”); } if(ab){ throw new ActionException(“a b”); } } 業務邏輯代碼中 public String process(){ try{ validate(a,b); }catch(ActionException ae){ System.out.println(ae.getReturnMessage()); } }

如何用Java程序來編寫一個異常?

class

MyException

extends

Exception

//自定義的異常類

繼承Exception類

{

private

String

exceptionName;

//定義一個私有變量,用來為自定義異常

public

MyException(){}

//創建一個無參數的構造函數

public

MyException(String

exceptionName){

//創建一個有參數的構造函數,傳入的參數為前面定義的異常名稱

this.exceptionName=exceptionName;

}

public

String

getExceptionName(){

//定義一個方法,提供給外部來獲取私有變量

return

this.exceptionName;

}

public

static

void

main(String

[]

args){

try{

System.out.println(“自定義的異常類對象”);

throw

new

MyException(“自定義的異常”);//拋一個自定義的異常類對象,傳入的參數就是給控制台看的異常

}catch(MyException

e){

System.out.println(“異常信息:”+e.getExceptionName());

}

}

}

我已經儘力你……你懂的!

如何編寫和應用Java的自定義異常類

編寫自定義異常類實際上是繼承一個API標準異常類,用新定義的異常處理信息覆蓋原有信息的過程。常用的編寫自定義異常類的模式如下:

public class CustomException extends Exception { //或者繼承任何標準異常類 public CustomException() {} //用來創建無參數對象

public CustomException(String message) { //用來創建指定參數對象

super(message); //調用超類構造器

} 當然也可選用Throwable作為超類。

其中無參數構造器為創建缺省參數對象提供了方便。第二個構造器將在創建這個異常對象時提供描述這個異常信息的字符串,通過調用超類構造器向上傳遞給超類,對超類中的toString()方法中返回的原有信息進行覆蓋。來討論一個具體例子。假設程序中需要驗證用戶輸入的表示年齡的數據必須是正整數值。我們可以按照以上模式編寫這個自定義異常類如下: public class NegativeAgeException extends Exception { //或者:extends Throwable public NegativeAgeException() {} public NegativeAgeException(String message) { super(message); }} 下面是應用這個自定義異常類的例子: //完整程序存在本書配套資源目錄為Ch11中名為NegativeAgeExceptionTest.java…try{ String ageString = JOptionPane.showInputDialog(“Enter your age: “); if (Integer.parseInt(ageString) 0) throw new NegativeAgeException(“Please enter a positive age”); else JOptionPane.showMessageDialog(null, ageString, “Age”, 1);}catch(NegativeAgeException e){ System.out.println(e);}… 或者,可以創建一個缺省對象,然後在catch中打印具體信息,如: throw new NegativeAgeException(); …catch (NegativeAgeException e) { System.out.println(“Please enter a positive age”); 將產生與第一個例子相同的效果。

11.7.2 自定義異常處理

無論是利用標準API異常類來處理特殊的異常,或者編寫自定義的異常類來達到同樣目的,問題的關鍵是:!–[if !supportLists]–1.span times=”” new=”” roman’;=”” font-size-adjust:=”” none;=”” font-stretch:=”” normal;=”” x-system-font:=”” none”=”” style=”padding: 0px” !–[endif]–當這個異常發生時,如何及時捕獲這個異常。!–[if !supportLists]–2.span times=”” new=”” roman’;=”” font-size-adjust:=”” none;=”” font-stretch:=”” normal;=”” x-system-font:=”” none”=”” style=”padding: 0px” !–[endif]–捕獲這個異常後,如何產生精確的異常處理信息。 毋庸置疑,我們不可能期待JVM自動拋出一個自定義異常,也不能夠期待JVM會自動處理一個自定義異常。發現異常、拋出異常以及處理異常的工作必須靠編程人員在代碼中利用異常處理機制自己完成。一般情況下,發現和拋出一個自定義異常通過在try程序塊中利用if和throw語句完成,即: try { … if (someExceptionConditon == true) { throw new CustomException(“A custom exception xxx occurred. Please check your entry…”) … }catch (CustomException e) { …} 而打印異常處理信息可以在拋出時包括在構造器的參數中,或者包括在處理這個異常的catch中。另外應該注意在自定義異常發生之前,有可能產生標準異常的情況。例如,在一個需要驗證年齡必須是正整數值的程序中,利用自定義異常類,如NegativeAgeException,驗證輸入的年齡是否正整數,即: try { … if (Integer.parseInt(ageString) 0) throw NegativeAgeException(“Please enter a positive age”); else … } catch (NumberFormatException e) { System.out.println(e); } catch (NegativeAgeException e) { System.out.println(e); } … 注意在這個代碼中,如果ageString是非法整數字符串,如「25ab」,系統將首先拋出NumberFormatException,而不會執行throw NegativeAgeException(“Please enter a positive age”)。所以應該在catch中加入對NumberFormatException的處理,如以上代碼所示。

本文出自 「海外咖啡豆 – 高永強的博客天地」 博客

Java用戶自定義異常處理

一、第一種定義方式,繼承Exception類

public class MyFirstException extends Exception {

public MyFirstException() {

super();

}

public MyFirstException(String msg) {

super(msg);

}

public MyFirstException(String msg, Throwable cause) {

super(msg, cause);

}

public MyFirstException(Throwable cause) {

super(cause);

}

//自定義異常類的主要作用是區分異常發生的位置,當用戶遇到異常時,

//根據異常名就可以知道哪裡有異常,根據異常提示信息進行修改。

}

二、 第二種定義方式:繼承Throwable 類

public class MySecondException extends Throwable {

public MySecondException() {

super();

}

public MySecondException(String msg) {

super(msg);

}

public MySecondException(String msg, Throwable cause) {

super(msg, cause);

}

public MySecondException(Throwable cause) {

super(cause);

}

}

三、測試

/**

* 自定義異常類的使用

* @author new

*

*/

public class TestMyException {

public static void firstException() throws MyFirstException{

throw new MyFirstException(“\”firstException()\” method occurs an exception!”);

}

public static void secondException() throws MySecondException{

throw new MySecondException(“\”secondException()\” method occurs an exception!”);

}

public static void main(String[] args) {

try {

TestMyException.firstException();

TestMyException.secondException();

} catch (MyFirstException e1){

System.out.println(“Exception: ” + e1.getMessage());

e1.printStackTrace();

} catch (MySecondException e2){

System.out.println(“Exception: ” + e2.getMessage());

e2.printStackTrace();

}

//當一個try塊後面跟着多個catch塊時,如果發生的異常匹配第一個catch塊的參數,便將異常處理權利交給第一個catch塊。

//如果發生的異常與第一個catch塊不匹配,便看是否與第二個catch塊匹配,依次下去,如果到最後依然無法匹配該異常,

//便需要在方法聲明中添加一條throw語句,將該異常拋出。

//因此,在有多個catch塊,而且每次處理的異常類型具有繼承關係時,應該首先catch子類異常,再catch父類異常。

//比如,如果MySecondException繼承MyFirstException,那麼最好將catch (MySecondException e2)放在前面,

//把catch (MyFirstException e1)放在後面。

}

原創文章,作者:NEOM,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/131427.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
NEOM的頭像NEOM
上一篇 2024-10-03 23:45
下一篇 2024-10-03 23:45

相關推薦

  • MQTT使用教程

    MQTT是一種輕量級的消息傳輸協議,適用於物聯網領域中的設備與雲端、設備與設備之間的數據傳輸。本文將介紹使用MQTT實現設備與雲端數據傳輸的方法和注意事項。 一、準備工作 在使用M…

    編程 2025-04-29
  • Python3.6.5下載安裝教程

    Python是一種面向對象、解釋型計算機程序語言。它是一門動態語言,因為它不會對程序員提前聲明變量類型,而是在變量第一次賦值時自動識別該變量的類型。 Python3.6.5是Pyt…

    編程 2025-04-29
  • Deepin系統分區設置教程

    本教程將會詳細介紹Deepin系統如何進行分區設置,分享多種方式讓您了解如何規劃您的硬盤。 一、分區的基本知識 在進行Deepin系統分區設置之前,我們需要了解一些基本分區概念。 …

    編程 2025-04-29
  • 寫代碼新手教程

    本文將從語言選擇、學習方法、編碼規範以及常見問題解答等多個方面,為編程新手提供實用、簡明的教程。 一、語言選擇 作為編程新手,選擇一門編程語言是很關鍵的一步。以下是幾個有代表性的編…

    編程 2025-04-29
  • Python如何判斷質數和異常處理

    本文主要介紹Python如何判斷質數和異常處理,其中包括多個方面的內容。 一、判斷質數 1、定義:質數是指除了1和它本身兩個因數外,沒有其他的因數。 2、判斷方法: (1)從2到n…

    編程 2025-04-29
  • Qt雷達探測教程

    本文主要介紹如何使用Qt開發雷達探測程序,並展示一個簡單的雷達探測示例。 一、環境準備 在開始本教程之前,需要確保你的開發環境已經安裝Qt和Qt Creator。如果沒有安裝,可以…

    編程 2025-04-29
  • 猿編程python免費全套教程400集

    想要學習Python編程嗎?猿編程python免費全套教程400集是一個不錯的選擇!下面我們來詳細了解一下這個教程。 一、課程內容 猿編程python免費全套教程400集包含了從P…

    編程 2025-04-29
  • 光模塊異常,SFP未認證(entityphysicalindex=6743835)——解決方案和

    如果您遇到類似optical module exception, sfp is not certified. (entityphysicalindex=6743835)的問題,那麼…

    編程 2025-04-29
  • Python煙花教程

    Python煙花代碼在近年來越來越受到人們的歡迎,因為它可以讓我們在終端里玩煙花,不僅具有視覺美感,還可以通過代碼實現動畫和音效。本教程將詳細介紹Python煙花代碼的實現原理和模…

    編程 2025-04-29
  • Python中自定義函數必須有return語句

    自定義函數是Python中最常見、最基本也是最重要的語句之一。在Python中,自定義函數必須有明確的返回值,即必須要有return語句。本篇文章將從以下幾個方面對此進行詳細闡述。…

    編程 2025-04-29

發表回復

登錄後才能評論