新聞中心
java自定義異常拋出
分類: 電腦/網(wǎng)絡(luò) 程序設(shè)計 其他編程語言
延平網(wǎng)站制作公司哪家好,找創(chuàng)新互聯(lián)公司!從網(wǎng)頁設(shè)計、網(wǎng)站建設(shè)、微信開發(fā)、APP開發(fā)、成都響應(yīng)式網(wǎng)站建設(shè)等網(wǎng)站項目制作,到程序開發(fā),運營維護。創(chuàng)新互聯(lián)公司于2013年創(chuàng)立到現(xiàn)在10年的時間,我們擁有了豐富的建站經(jīng)驗和運維經(jīng)驗,來保證我們的工作的順利進行。專注于網(wǎng)站建設(shè)就選創(chuàng)新互聯(lián)公司。
問題描述:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
自定義異常類
class NumException extends Exception{
public String toString(){
return "輸入的值太小";
}
public String shuru(){
return "請輸入數(shù)字";
}
}
class jisuanqi extends JFrame implements ActionListener,ItemListener{
JRadioButton rz;
JRadioButton rm;
ButtonGroup bg;
JTextField txt;
JButton btnj;
String msg;
jisuanqi(){
super("計算器");
rz=new JRadioButton("周長");
rm=new JRadioButton("面積");
bg=new ButtonGroup();
txt=new JTextField();
btnj=new JButton("計算");
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);
}
實現(xiàn)接口
public void actionPerformed(ActionEvent e) throws NumException{聲明異常
if (Double.parseDouble(txt.getText())=0){
throw new NumException();拋出異常
}
if (msg.equals("周長")){
txt.setText(""+(3.14*2*Double.parseDouble(txt.getText())));
}
if (msg.equals("面積")){
txt.setText(""+3.14*(Double.parseDouble(txt.getText())*Double.parseDouble(txt.getText())));
}
}
實現(xiàn)接口
public void itemStateChanged(ItemEvent e){
if (e.getSource()==rz){
msg="周長";
}
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);
}
}
}
編譯時出現(xiàn):
C:\Documents and Settings\Administrator\桌面\新建文件夾\jisaunqi.java:45: jisuanqi 中的 actionPerformed(java.awt.event.ActionEvent) 無法實現(xiàn) java.awt.event.ActionListener 中的 actionPerformed(java.awt.event.ActionEvent);被覆蓋的方法不拋出 NumException
解析:
這段代碼有問題:
實現(xiàn)接口
public void actionPerformed(ActionEvent e) throws NumException{聲明異常
public void actionPerformed(ActionEvent e)不應(yīng)該拋出異常, ActionListener接口函數(shù)沒有異常拋出
一種可能的解決方法是把判斷移到另外一個函數(shù)中,然后拋出異常,在actionPerformed中捕獲或者在外面捕獲
java提供給程序主動拋出異常的語句
直接throws Exception 寫在你的方法或者類名后
或者用try catch
在 Java 應(yīng)用程序中,異常處理機制為:拋出異常,捕捉異常。
拋出異常:當一個方法出現(xiàn)錯誤引發(fā)異常時,方法創(chuàng)建異常對象并交付運行時系統(tǒng),異常對象中包含了異常類型和異常出現(xiàn)時的程序狀態(tài)等異常信息。運行時系統(tǒng)負責(zé)尋找處置異常的代碼并執(zhí)行。
捕獲異常:在方法拋出異常之后,運行時系統(tǒng)將轉(zhuǎn)為尋找合適的異常處理器(exception handler)。潛在的異常處理器是異常發(fā)生時依次存留在調(diào)用棧中的方法的集合。當異常處理器所能處理的異常類型與方法拋出的異常類型相符時,即為合適 的異常處理器。運行時系統(tǒng)從發(fā)生異常的方法開始,依次回查調(diào)用棧中的方法,直至找到含有合適異常處理器的方法并執(zhí)行。當運行時系統(tǒng)遍歷調(diào)用棧而未找到合適 的異常處理器,則運行時系統(tǒng)終止。同時,意味著Java程序的終止。
對于運行時異常、錯誤或可查異常,Java技術(shù)所要求的異常處理方式有所不同。
由于運行時異常的不可查性,為了更合理、更容易地實現(xiàn)應(yīng)用程序,Java規(guī)定,運行時異常將由Java運行時系統(tǒng)自動拋出,允許應(yīng)用程序忽略運行時異常。
對于方法運行中可能出現(xiàn)的Error,當運行方法不欲捕捉時,Java允許該方法不做任何拋出聲明。因為,大多數(shù)Error異常屬于永遠不能被允許發(fā)生的狀況,也屬于合理的應(yīng)用程序不該捕捉的異常。
java中異常拋出后代碼還會繼續(xù)執(zhí)行嗎
一般如果出現(xiàn)非人為異常,即非通過代碼throw的方式拋出異常,同時未通過try-catch捕捉。則當前代碼不會繼續(xù)執(zhí)行,而是向上拋出異常,即返回調(diào)用當前代碼的位置。如果該位置未對異常進行處理,則繼續(xù)向上拋出。
通過try-catch捕捉異常,即異常代碼在try中,可以在catch中進行異常處理
try{
...
//代碼,產(chǎn)生異常
}catch(Exception?e){//e是異常類型,一般根父類為Exception類
...
//進行產(chǎn)生異常后的處理
}finally{
...
//無論如何都會執(zhí)行的代碼
}
...
//如果catch中沒有繼續(xù)throw異常以及沒有產(chǎn)生新異常,則繼續(xù)執(zhí)行的代碼
如果想要代碼繼續(xù)執(zhí)行,可以在catch中不繼續(xù)拋出異常,則代碼將執(zhí)行catch之后的代碼(如果有finally,則先執(zhí)行finally的代碼)。如果想要在產(chǎn)生異常之后仍需要執(zhí)行一部分代碼,則可以將該部分代碼放在finally中。
分享題目:java中異常拋出的代碼 java中拋出異常是什么意思
網(wǎng)站路徑:http://www.ef60e0e.cn/article/docpcsh.html