編寫(xiě)自定義異常類(lèi)實(shí)際上是繼承一個(gè)API標(biāo)準(zhǔn)異常類(lèi),用新定義的異常處理信息覆蓋原有信息的過(guò)程。常用的編寫(xiě)自定義異常類(lèi)的模式如下:
網(wǎng)站建設(shè)哪家好,找成都創(chuàng)新互聯(lián)!專(zhuān)注于網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站建設(shè)、微信開(kāi)發(fā)、小程序定制開(kāi)發(fā)、集團(tuán)企業(yè)網(wǎng)站建設(shè)等服務(wù)項(xiàng)目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了崇仁免費(fèi)建站歡迎大家使用!
public class CustomException extends Exception { //或者繼承任何標(biāo)準(zhǔn)異常類(lèi) public CustomException() {} //用來(lái)創(chuàng)建無(wú)參數(shù)對(duì)象
public CustomException(String message) { //用來(lái)創(chuàng)建指定參數(shù)對(duì)象
super(message); //調(diào)用超類(lèi)構(gòu)造器
} 當(dāng)然也可選用Throwable作為超類(lèi)。
其中無(wú)參數(shù)構(gòu)造器為創(chuàng)建缺省參數(shù)對(duì)象提供了方便。第二個(gè)構(gòu)造器將在創(chuàng)建這個(gè)異常對(duì)象時(shí)提供描述這個(gè)異常信息的字符串,通過(guò)調(diào)用超類(lèi)構(gòu)造器向上傳遞給超類(lèi),對(duì)超類(lèi)中的toString()方法中返回的原有信息進(jìn)行覆蓋。來(lái)討論一個(gè)具體例子。假設(shè)程序中需要驗(yàn)證用戶輸入的表示年齡的數(shù)據(jù)必須是正整數(shù)值。我們可以按照以上模式編寫(xiě)這個(gè)自定義異常類(lèi)如下: public class NegativeAgeException extends Exception { //或者:extends Throwable public NegativeAgeException() {} public NegativeAgeException(String message) { super(message); }} 下面是應(yīng)用這個(gè)自定義異常類(lèi)的例子: //完整程序存在本書(shū)配套資源目錄為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);}... 或者,可以創(chuàng)建一個(gè)缺省對(duì)象,然后在catch中打印具體信息,如: throw new NegativeAgeException(); ...catch (NegativeAgeException e) { System.out.println("Please enter a positive age"); 將產(chǎn)生與第一個(gè)例子相同的效果。
11.7.2 自定義異常處理
無(wú)論是利用標(biāo)準(zhǔn)API異常類(lèi)來(lái)處理特殊的異常,或者編寫(xiě)自定義的異常類(lèi)來(lái)達(dá)到同樣目的,問(wèn)題的關(guān)鍵是:!--[if !supportLists]--1.span times="" new="" roman';="" font-size-adjust:="" none;="" font-stretch:="" normal;="" x-system-font:="" none"="" style="padding: 0px" !--[endif]--當(dāng)這個(gè)異常發(fā)生時(shí),如何及時(shí)捕獲這個(gè)異常。!--[if !supportLists]--2.span times="" new="" roman';="" font-size-adjust:="" none;="" font-stretch:="" normal;="" x-system-font:="" none"="" style="padding: 0px" !--[endif]--捕獲這個(gè)異常后,如何產(chǎn)生精確的異常處理信息。 毋庸置疑,我們不可能期待JVM自動(dòng)拋出一個(gè)自定義異常,也不能夠期待JVM會(huì)自動(dòng)處理一個(gè)自定義異常。發(fā)現(xiàn)異常、拋出異常以及處理異常的工作必須靠編程人員在代碼中利用異常處理機(jī)制自己完成。一般情況下,發(fā)現(xiàn)和拋出一個(gè)自定義異常通過(guò)在try程序塊中利用if和throw語(yǔ)句完成,即: try { ... if (someExceptionConditon == true) { throw new CustomException("A custom exception xxx occurred. Please check your entry...") ... }catch (CustomException e) { ...} 而打印異常處理信息可以在拋出時(shí)包括在構(gòu)造器的參數(shù)中,或者包括在處理這個(gè)異常的catch中。另外應(yīng)該注意在自定義異常發(fā)生之前,有可能產(chǎn)生標(biāo)準(zhǔn)異常的情況。例如,在一個(gè)需要驗(yàn)證年齡必須是正整數(shù)值的程序中,利用自定義異常類(lèi),如NegativeAgeException,驗(yàn)證輸入的年齡是否正整數(shù),即: 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); } ... 注意在這個(gè)代碼中,如果ageString是非法整數(shù)字符串,如“25ab”,系統(tǒng)將首先拋出NumberFormatException,而不會(huì)執(zhí)行throw NegativeAgeException("Please enter a positive age")。所以應(yīng)該在catch中加入對(duì)NumberFormatException的處理,如以上代碼所示。
本文出自 “海外咖啡豆 - 高永強(qiáng)的博客天地” 博客
分類(lèi): 電腦/網(wǎng)絡(luò) 程序設(shè)計(jì) 其他編程語(yǔ)言
問(wèn)題描述:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
自定義異常類(lèi)
class NumException extends Exception{
public String toString(){
return "輸入的值太小";
}
public String shuru(){
return "請(qǐng)輸入數(shù)字";
}
}
class jisuanqi extends JFrame implements ActionListener,ItemListener{
JRadioButton rz;
JRadioButton rm;
ButtonGroup bg;
JTextField txt;
JButton btnj;
String msg;
jisuanqi(){
super("計(jì)算器");
rz=new JRadioButton("周長(zhǎng)");
rm=new JRadioButton("面積");
bg=new ButtonGroup();
txt=new JTextField();
btnj=new JButton("計(jì)算");
msg="";
this.getContentPane().setLayout(new GridLayout(2,2));
bg.add(rz);
bg.add(rm);
this.getContentPane().add(rz);
this.getContentPane().add(rm);
this.getContentPane().add(txt);
this.getContentPane().add(btnj);
this.setSize(200,200);
rz.addItemListener(this);
rm.addItemListener(this);
btnj.addActionListener(this);
}
實(shí)現(xiàn)接口
public void actionPerformed(ActionEvent e) throws NumException{聲明異常
if (Double.parseDouble(txt.getText())=0){
throw new NumException();拋出異常
}
if (msg.equals("周長(zhǎng)")){
txt.setText(""+(3.14*2*Double.parseDouble(txt.getText())));
}
if (msg.equals("面積")){
txt.setText(""+3.14*(Double.parseDouble(txt.getText())*Double.parseDouble(txt.getText())));
}
}
實(shí)現(xiàn)接口
public void itemStateChanged(ItemEvent e){
if (e.getSource()==rz){
msg="周長(zhǎng)";
}
if (e.getSource()==rm){
msg="面積";
}
}
public static void main(String args[]){
try{
jisuanqi js=new jisuanqi();
js.setVisible(true);
}
catch(NumException ex){
System.out.println(ex);
}
}
}
編譯時(shí)出現(xiàn):
C:\Documents and Settings\Administrator\桌面\新建文件夾\jisaunqi.java:45: jisuanqi 中的 actionPerformed(java.awt.event.ActionEvent) 無(wú)法實(shí)現(xiàn) java.awt.event.ActionListener 中的 actionPerformed(java.awt.event.ActionEvent);被覆蓋的方法不拋出 NumException
解析:
這段代碼有問(wèn)題:
實(shí)現(xiàn)接口
public void actionPerformed(ActionEvent e) throws NumException{聲明異常
public void actionPerformed(ActionEvent e)不應(yīng)該拋出異常, ActionListener接口函數(shù)沒(méi)有異常拋出
一種可能的解決方法是把判斷移到另外一個(gè)函數(shù)中,然后拋出異常,在actionPerformed中捕獲或者在外面捕獲
1 程序中的異常指不期而至的各種狀況,如:文件找不到、網(wǎng)絡(luò)連接失敗、非法參數(shù)等。異常是一個(gè)事件,它發(fā)生在程序運(yùn)行期間,干擾了正常的指令流程。Java通 過(guò)API中Throwable類(lèi)的眾多子類(lèi)描述各種不同的異常。因而,Java異常都是對(duì)象,是Throwable子類(lèi)的實(shí)例,描述了出現(xiàn)在一段編碼中的 錯(cuò)誤條件。當(dāng)條件生成時(shí),錯(cuò)誤將引發(fā)異常。
Java異常類(lèi)層次結(jié)構(gòu)圖:
使用Java內(nèi)置的異常類(lèi)可以描述在編程時(shí)出現(xiàn)的大部分異常情況。除此之外,用戶還可以自定義異常。用戶自定義異常類(lèi),只需繼承Exception類(lèi)即可。
在程序中使用自定義異常類(lèi),大體可分為以下幾個(gè)步驟。
(1)創(chuàng)建自定義異常類(lèi)。
(2)在方法中通過(guò)throw關(guān)鍵字拋出異常對(duì)象。
(3)如果在當(dāng)前拋出異常的方法中處理異常,可以使用try-catch語(yǔ)句捕獲并處理;否則在方法的聲明處通過(guò)throws關(guān)鍵字指明要拋出給方法調(diào)用者的異常,繼續(xù)進(jìn)行下一步操作。
(4)在出現(xiàn)異常方法的調(diào)用者中捕獲并處理異常。
創(chuàng)建自定義異常類(lèi)
public?class?MyException?extends?Exception?{
private?static?final?long?serialVersionUID?=?1L;
public?MyException(){
super();
}
public?MyException(String?msg){
super(msg);
}
}
使用的話就不演示了 如果你已經(jīng)研究到了自定義異常 那么我相信你也一定會(huì)使用了?
如果不會(huì)使用 建議學(xué)會(huì)使用后再來(lái)看這篇文章
class
MyException
extends
Exception
//自定義的異常類(lèi)
繼承Exception類(lèi)
{
private
String
exceptionName;
//定義一個(gè)私有變量,用來(lái)為自定義異常
public
MyException(){}
//創(chuàng)建一個(gè)無(wú)參數(shù)的構(gòu)造函數(shù)
public
MyException(String
exceptionName){
//創(chuàng)建一個(gè)有參數(shù)的構(gòu)造函數(shù),傳入的參數(shù)為前面定義的異常名稱
this.exceptionName=exceptionName;
}
public
String
getExceptionName(){
//定義一個(gè)方法,提供給外部來(lái)獲取私有變量
return
this.exceptionName;
}
public
static
void
main(String
[]
args){
try{
System.out.println("自定義的異常類(lèi)對(duì)象");
throw
new
MyException("自定義的異常");//拋一個(gè)自定義的異常類(lèi)對(duì)象,傳入的參數(shù)就是給控制臺(tái)看的異常
}catch(MyException
e){
System.out.println("異常信息:"+e.getExceptionName());
}
}
}
我已經(jīng)盡力你……你懂的!
名稱欄目:java自定義異常代碼 java自定義異常類(lèi)的編寫(xiě)
文章網(wǎng)址:http://vcdvsql.cn/article30/doicgso.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供企業(yè)網(wǎng)站制作、營(yíng)銷(xiāo)型網(wǎng)站建設(shè)、微信小程序、網(wǎng)站導(dǎo)航、網(wǎng)站建設(shè)、標(biāo)簽優(yōu)化
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)