如果你知道你寫的某個(gè)函數(shù)有可能拋出異常,而你又不想在這個(gè)函數(shù)中對(duì)異常進(jìn)行處理,只是想把它拋出去讓調(diào)用這個(gè)函數(shù)的上級(jí)調(diào)用函數(shù)進(jìn)行處理,那么有兩種方式可供選擇:
成都創(chuàng)新互聯(lián)公司-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價(jià)比黃石網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫(kù),直接使用。一站式黃石網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋黃石地區(qū)。費(fèi)用合理售后完善,十余年實(shí)體公司更值得信賴。
第一種方式:直接在函數(shù)頭中throws SomeException,函數(shù)體中不需要try/catch。比如將最開始的例子中的testEx2改為下面的方式,那么testEx1就能捕捉到testEx2拋出的異常了。
boolean testEx2() throws Exception{
boolean ret = true;
int b=12;
int c;
for (int i=2;i=-2;i--){
c=b/i;
System.out.println("i="+i);
}
return true;
}
第二種方式:使用try/catch,在catch中進(jìn)行一定的處理之后(如果有必要的話)拋出某種異常。例如上面的testEx2改為下面的方式,testEx1也能捕獲到它拋出的異常:
boolean testEx2() throws Exception{
boolean ret = true;
try{
int b=12;
int c;
for (int i=2;i=-2;i--){
c=b/i;
System.out.println("i="+i);
}
return true;
}catch (Exception e){
System.out.println("testEx2, catch exception");
Throw e;
}
}
第三種方法:使用try/catch/finally,在catch中進(jìn)行一定的處理之后(如果有必要的話)拋出某種異常。例如上面的testEx2改為下面的方式,testEx1也能捕獲到它拋出的異常:
boolean testEx2() throws Exception{
boolean ret = true;
try{
int b=12;
int c;
for (int i=2;i=-2;i--){
c=b/i;
System.out.println("i="+i);
throw new Exception("aaa");
}
return true;
}catch (java.lang.ArithmeticException e){
System.out.println("testEx2, catch exception");
ret = false;
throw new Exception("aaa");
}finally{
System.out.println("testEx2, finally; return value="+ret);
}
}
java當(dāng)中,處理異常的方式主要有:try...catch...finally、throw、throws。\x0d\x0a1、try...catch...finally:try語(yǔ)句塊中是可能出現(xiàn)異常的代碼塊,catch語(yǔ)句塊中是捕獲的異常處理(可以包含多個(gè)catch語(yǔ)句塊),finally是任何情況下都回輸出的提示。\x0d\x0a2、對(duì)于處理不了的異常或者要轉(zhuǎn)型的異常,在方法的聲明處通過throws語(yǔ)句拋出異常\x0d\x0a3、throw用來拋出一個(gè)異常,在方法體內(nèi)。語(yǔ)法格式為:throw 異常對(duì)象。\x0d\x0athrows用來聲明方法可能會(huì)拋出什么異常,在方法名后,語(yǔ)法格式為:throws 異常類型1,異常類型2...異常類型n
拋出異常分為兩種吧,一種是制造異常,一種是拋出可能發(fā)生的異常
throw關(guān)鍵字,拋出一個(gè)異常(即制造一個(gè)異常),用法 throw 異常 ,該異常必須為java.lang.Exception的子類,如果是RuntimeException子類的話,則不需要捕獲或拋出異常。
throws關(guān)鍵字,拋出一個(gè)可能發(fā)生的異常,用在函數(shù)定義中,末尾處,以主函數(shù)為例子,public static void main(String[] args) throws 異常; 該異常必須為Exception子類,常用于其子類,是這一個(gè)方法體執(zhí)行中可能拋出(throw)的異常處理。如果不進(jìn)行throws,也可以用try...catch語(yǔ)句進(jìn)行捕獲。
自定義異常,類一定(間接)繼承java.lang.Exception類,當(dāng)然,繼承java.lang.RuntimeException就可以不用進(jìn)行處理,下面舉一個(gè)例子:
public class TestException extends Exception {
public TestException(String message) {
super(message);
}
public TestException() {}
}
一般自定義異常需要有2個(gè)構(gòu)造函數(shù),五參構(gòu)造器和String類型構(gòu)造器,有參構(gòu)造調(diào)用父類有參構(gòu)造。
分類: 電腦/網(wǎng)絡(luò) 程序設(shè)計(jì) 其他編程語(yǔ)言
問題描述:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
自定義異常類
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) 無法實(shí)現(xiàn) java.awt.event.ActionListener 中的 actionPerformed(java.awt.event.ActionEvent);被覆蓋的方法不拋出 NumException
解析:
這段代碼有問題:
實(shí)現(xiàn)接口
public void actionPerformed(ActionEvent e) throws NumException{聲明異常
public void actionPerformed(ActionEvent e)不應(yīng)該拋出異常, ActionListener接口函數(shù)沒有異常拋出
一種可能的解決方法是把判斷移到另外一個(gè)函數(shù)中,然后拋出異常,在actionPerformed中捕獲或者在外面捕獲
當(dāng)前名稱:java代碼拋出異常 java拋出異常后還會(huì)繼續(xù)執(zhí)行嗎
URL網(wǎng)址:http://muchs.cn/article46/dohejeg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站改版、品牌網(wǎng)站制作、做網(wǎng)站、外貿(mào)建站、網(wǎng)站排名、品牌網(wǎng)站建設(shè)
聲明:本網(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í)需注明來源: 創(chuàng)新互聯(lián)