直接throws Exception 寫在你的方法或者類名后
創(chuàng)新互聯(lián)建站專注于白云企業(yè)網(wǎng)站建設(shè),成都響應(yīng)式網(wǎng)站建設(shè)公司,商城開發(fā)。白云網(wǎng)站建設(shè)公司,為白云等地區(qū)提供建站服務(wù)。全流程按需求定制開發(fā),專業(yè)設(shè)計(jì),全程項(xiàng)目跟蹤,創(chuàng)新互聯(lián)建站專業(yè)和態(tài)度為您提供的服務(wù)
或者用try catch
在 Java 應(yīng)用程序中,異常處理機(jī)制為:拋出異常,捕捉異常。
拋出異常:當(dāng)液爛一個(gè)方法出現(xiàn)錯(cuò)誤引發(fā)異常時(shí),方法創(chuàng)建異常對(duì)象并交付運(yùn)行時(shí)系統(tǒng),異常對(duì)象中包含了異常類型和異常出現(xiàn)時(shí)的程序狀態(tài)等異常信息。運(yùn)行時(shí)系統(tǒng)負(fù)責(zé)尋找處置異常的代碼并執(zhí)行。
捕獲異常:在方法拋出異常之后,運(yùn)行時(shí)系統(tǒng)將轉(zhuǎn)為尋找合適的異常處理器(exception handler)。潛在的異常處理器是異常發(fā)生時(shí)依次存留在調(diào)用棧中的方法的集合。當(dāng)異常處理器所能處理的異常類型與方法拋出的異常類型相符時(shí),即為合適 的異常處理器。運(yùn)行時(shí)系統(tǒng)從發(fā)生異常的方法開始,依次回查調(diào)用棧中的方法,直至找到含有合適異常處理器的方法并執(zhí)行。當(dāng)運(yùn)行時(shí)系統(tǒng)遍歷調(diào)用棧而未找到合適 的異常處旅困理器,則運(yùn)行時(shí)系統(tǒng)終止。同時(shí),意味著Java程序的終止。
對(duì)于運(yùn)行時(shí)異常、錯(cuò)誤或可查異常,Java技術(shù)所要求的異常處理拆埋念方式有所不同。
由于運(yùn)行時(shí)異常的不可查性,為了更合理、更容易地實(shí)現(xiàn)應(yīng)用程序,Java規(guī)定,運(yùn)行時(shí)異常將由Java運(yùn)行時(shí)系統(tǒng)自動(dòng)拋出,允許應(yīng)用程序忽略運(yùn)行時(shí)異常。
對(duì)于方法運(yùn)行中可能出現(xiàn)的Error,當(dāng)運(yùn)行方法不欲捕捉時(shí),Java允許該方法不做任何拋出聲明。因?yàn)?,大多?shù)Error異常屬于永遠(yuǎn)不能被允許發(fā)生的狀況,也屬于合理的應(yīng)用程序不該捕捉的異常。
Java語言提供兩種異常處理機(jī)制:捕獲異常和聲明拋棄異常。
1、捕獲異常:
(1)在Java程序運(yùn)行過程中系統(tǒng)得到一個(gè)異常對(duì)象是,它將會(huì)沿著方法的調(diào)用棧逐層回溯,尋找處理這一異常的代碼。
(2)找到能夠處理這種類型異常的方法后,運(yùn)行時(shí)系統(tǒng)把當(dāng)前異常交給這個(gè)方法處理;如果找不到可以捕獲異常的方法,則運(yùn)行時(shí)系統(tǒng)將終止,相應(yīng)的Java程序也將退出。
(3)捕獲異常是通過try-catch-finally語句實(shí)現(xiàn)的。語法為:
try{
...
}catch(ExceptionName1e){
...
}catch(ExceptionName2e){
...
}
...
}finally{
...
}
2、聲明拋棄異常:
(1)當(dāng)Java程序運(yùn)行時(shí)系統(tǒng)得到一個(gè)異常對(duì)象時(shí),如果一個(gè)方法并不知道如何處理所出現(xiàn)的異常,則可在方法聲明時(shí),聲明拋棄異常。
(2)聲明拋棄異常是在一個(gè)方法聲明中的throws子句中指明的。如:
publicintread()throwsIOException{
...
}
其中throwsIOException就是聲明拋棄異常,throws后可以跟多個(gè)異常類型。
擴(kuò)展資料:
程序設(shè)計(jì)語言的異常機(jī)制:
1、多數(shù)語言的異常機(jī)制的語法是類似的:用throw或raise拋出一個(gè)異常對(duì)象(Java或C++等)或一個(gè)特殊可擴(kuò)展的枚舉類型的值(如Ada語言);
2、異常處理代碼的作用范圍用標(biāo)記子句(try或begin開斗肆裂始的語言作用域)標(biāo)示其起始,以第一個(gè)異常處理子句(catch,except,resuce等)標(biāo)示其結(jié)束;可連續(xù)出現(xiàn)若干個(gè)異常處理子句,每個(gè)處理特定類型的異常。
3、某些語言允許else子句,用于無異常出現(xiàn)的情況。更多見的是finally,ensure子句,無論是否出現(xiàn)異常它都將執(zhí)行,用于釋放異常處理所需的一些資源。
(1)C++異常處理是資源獲取即初始化(Resource-Acquisition-Is-Initialization)的基礎(chǔ)。
(2)C語言一般認(rèn)為是不支持異常處理的。Perl語言可選擇支持結(jié)構(gòu)化異常處理(structuredexceptionhandling)。
(3)雹昌Python語言對(duì)異常處理機(jī)制是非常普遍深入的,所以想寫出不含try,except的空閉程序非常困難。
參考資料來源:
百度百科-異常處理
分茄攜類: 電腦/網(wǎng)絡(luò) 程序設(shè)計(jì) 其他編程語言
問題描述顫襪:
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("周長"茄納激);
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("周長")){
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="周長";
}
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中捕獲或者在外面捕獲