java自定義錯誤碼類_如何編寫和應用Java的自定義異常類

11.7.1編寫自定義異常類的模式

編寫自定義異常類實際上是繼承一個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異常類來處理特殊的異常,或者編寫自定義的異常類來達到同樣目的,問題的關鍵是:

1.當這個異常發生時,如何及時捕獲這個異常。

2.捕獲這個異常后,如何產生精確的異常處理信息。

毋庸置疑,我們不可能期待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的處理,如以上代碼所示。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/534607.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/534607.shtml
英文地址,請注明出處:http://en.pswp.cn/news/534607.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

java對mysql查詢_如何利用java對mysql數據庫進行增刪改查

代碼如下&#xff1a;增&#xff1a;Test//數據插入public void demo1() {Connection connnull;Statement stmtnull;try {//注冊驅動Class.forName("com.mysql.jdbc.Driver");//創建連接connDriverManager.getConnection("jdbc:mysql://localhost:3306/name&quo…

util.java_TelnetUtil.java

package com.ailk.ess.webapp2.servermng.net;import java.io.InputStream;import java.io.OutputStream;import java.util.ArrayList;import java.util.List;import org.apache.commons.net.telnet.TelnetClient;public class TelnetUtil {//telnet客戶端對象VT220/VT52Telnet…

生活中java繼承例子_簡單繼承例子:java

通用類&#xff0c;來繼承出圓和矩形。package circle;public class Geometric {private String color"white";private boolean filled;private java.util.Date dateCreated;public Geometric(){dateCreatednew java.util.Date();}public Geometric(String color,boo…

java技術簡介英文_Java技術常見的英文縮寫

1、 URL&#xff0c;Uniform Resource Location&#xff0c;統一資源定位符。2、 JDBC&#xff0c;Java DataBase Connectivity&#xff0c;Java數據庫連接。3、 JSP&#xff0c;Java Server Pages&#xff0c;Java服務器頁面。4、 JVM&#xff0c;Java Virtual Machine&#x…

Java解決空引用_Java 匠人手法 - 優雅的處理空值

原標題&#xff1a;Java 匠人手法 - 優雅的處理空值作者&#xff1a;Lrwin導語在筆者幾年的開發經驗中&#xff0c;經常看到項目中存在到處空值判斷的情況&#xff0c;這些判斷&#xff0c;會讓人覺得摸不這頭緒&#xff0c;它的出現很有可能和當前的業務邏輯并沒有關系。但它會…

mysql 嘗試讀取超過流末尾的_MySql異常:嘗試讀取超出流末尾的內容

問題詳細描述&#xff1a;2020-09-04 11:28:19,576 [DefaultQuartzScheduler_Worker-1] DEBUG MySql.Data.MySqlClient.MySqlException (0x80004005): Fatal error encountered during command execution. ---> MySql.Data.MySqlClient.MySqlException (0x80004005): Fatal …

mysql對稱連接什么意思_對稱加密與非對稱加密的區別是什么

區別&#xff1a;1、對稱加密中加密和解密使用的秘鑰是同一個&#xff1b;非對稱加密中采用兩個密鑰&#xff0c;一般使用公鑰進行加密&#xff0c;私鑰進行解密。2、對稱加密解密的速度比較快&#xff0c;非對稱加密和解密花費的時間長、速度相對較慢。3、對稱加密的安全性相對…

php引號變量_下列PHP數據庫insert語句中變量前后的點和雙引號有什么作用?

這就要從雙引號和單引號的作用講起&#xff1a;雙引號里面的字段會經過編譯器解釋然后再當作HTML代碼輸出&#xff0c;但是單引號里面的不需要解釋&#xff0c;直接輸出。例如&#xff1a;$abcI love u;echo $abc //結果是:I love uecho $abc //結果是:$abcecho "$abc&quo…

php excel 設置常規_php實現的操作excel類詳解

本文實例講述了php實現的操作excel類。分享給大家供大家參考&#xff0c;具體如下&#xff1a;class Excel{static $instancenull;private $excelnull;private $workbooknull;private $workbookaddnull;private $worksheetnull;private $worksheetaddnull;private $sheetnum1;p…

php析構函數使用,php析構函數__destruct()使用方法及實例講解

通過上一篇文章《php 構造函數__construct()使用分析》的講解&#xff0c;我們已經知道了什么叫構造方法。那么與構造方法對應的就是析構方法。析構方法允許在銷毀一個類之前執行的一些操作或完成一些功能&#xff0c;比如說關閉文件、釋放結果集等。析構方法是PHP5才引進的新內…

ubuntu創建php文件,ubuntu系統創建桌面快捷方式的方法

在ubuntu系統中&#xff0c;自己安裝的程序往往沒有創建桌面快捷方式&#xff0c;每次都通過終端然后輸入絕對路去徑執行命令比較繁瑣&#xff0c;其實可以像windows那樣自己在桌面程序創建程序的快捷方式&#xff0c;這樣方便了每次的啟動。這里以Navicat為例說明一下在linux(…

php設計模式及案例分析,一個案例來認識PHP經典設計模式 | 張先生博客

/*** 單例模式*/class Site{//屬性public $siteName;//本類的靜態實例public static $instance null;//禁用掉構造器private function __construct($siteName){$this->siteName $siteName;}//獲取本類唯一實例public static function getInstance($siteNme 默認siteName值…

php如何加密圖片,php實現圖片加密解密,支持設置密碼 (兩年后版本!)

* by hello* 84587470** php 文件加密類&#xff0c;支持設置密碼&#xff0c;圖片&#xff0c;文件都可以&#xff01;情侶們的福音&#xff01;&#xff01;&#xff01;**/$from C:\Users\Administrator\Desktop\t\test.png;$to C:\Users\Administrator\Desktop\t\\;//加密…

php面向對象編程代碼怎么寫,php面向對象編程(一)

類與對象關系&#xff1a;類就像一個人類的群體 我們從類中實例化一個對象 就像是制定一個人。面向對象程序的單位就是對象&#xff0c;但對象又是通過類的實例化出來的&#xff0c;所以我們首先要做的就是如何來聲明類&#xff0c; 做出來一個類很容易。類的格式class 類名 { …

雅馬哈php mt7,雅馬哈專業錄音室監聽耳機 HPH-MT7 正式發售!

從 NS-10M 監聽音箱到 MSP 系列和 HS 系列&#xff0c;雅馬哈始終秉持忠實的設計理念&#xff0c;聚焦聲學精度&#xff0c;為音頻專家提供出色的平臺&#xff0c;構建并成就他們專屬的專業之聲。MT7錄音室監聽耳機承襲了這一基本研發理念,重現最為精細的聲音&#xff0c;力求滿…

php 支付簽名驗證失敗,choosewxpay fail解決,微信支付簽名驗證錯誤解決

require_once("config.php"); //這個文件原來寫過的博客有http://jipq1016.com/display.php?id9//統一下單$openid$_POST[openid];$arr[appid]$appid; //商戶appid$arr[mch_id]$mch_id; //微信支付…

趣學java,編程趣學習app

編程趣學習在這里會有多種編程語言是可以去學習的Java或者是c&#xff0c;入門級的海鷗就是更加有難度的都是可以選擇一個自己可以去學習的課程&#xff0c;跟著講師一同開始及逆行語言基礎知識的學習后面大家就是根據自己的的課后作業完成&#xff0c;去自己調試新的程序。編程…

cgi php腳本運行超時間,php超時 - php-cgi調用外部程序超時,但php在命令行模式下能完整運行外部程序...

運行環境為Ubuntu14.04php腳本無論用Apache還是nginx都會在R語言運行一半時終止運行(在需要等待運行3~5秒時的步驟停止)但用php在命令行模式php -f result.php卻能完整運行。請問是否能通過修改php配置&#xff0c;解決這個問題回復內容&#xff1a;運行環境為Ubuntu14.04php腳…

oracle無法分區,oracle已存在的表添加新分區的方法

現在有一張表如下&#xff1a;create table WRITE_USER(area_code VARCHAR2(8),user_no VARCHAR2(20),user_name VARCHAR2(100),address VARCHAR2(100),mon NUMBER(6),mon_sn NUM…

oracle常用表查詢,ORACLE EBS常用表及查詢語句(最終整理版)

select * from ar_batches_all 事務處理批select * from ra_customer_trx_all 發票頭select * from ra_customer_trx_lines_all 發票行select * from ra_cust_trx_line_gl_dist_all 發票分配select * from ar_cash_receipts_all 收…