java自定义异常抛出

Python015

java自定义异常抛出,第1张

分类: 电脑/网络 >>程序设计 >>其他编程语言

问题描述:

import java.awt.*

import java.awt.event.*

import javax.swing.*

自定义异常

class NumException extends Exception{

public String toString(){

return "输入的值太小"

}

public String shuru(){

return "请输入数字"

}

}

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)

}

实现接口

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())))

}

}

实现接口

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)

}

}

}

编译时出现:

C:\Documents and Settings\Administrator\桌面\新建文件夹\jisaunqi.java:45: jisuanqi 中的 actionPerformed(java.awt.event.ActionEvent) 无法实现 java.awt.event.ActionListener 中的 actionPerformed(java.awt.event.ActionEvent);被覆盖的方法不抛出 NumException

解析:

这段代码有问题:

实现接口

public void actionPerformed(ActionEvent e) throws NumException{声明异常

public void actionPerformed(ActionEvent e)不应该抛出异常, ActionListener接口函数没有异常抛出

一种可能的解决方法是把判断移到另外一个函数中,然后抛出异常,在actionPerformed中捕获或者在外面捕获

如果你知道你写的某个函数有可能抛出异常,而你又不想在这个函数中对异常进行处理,只是想把它抛出去让调用这个函数的上级调用函数进行处理,那么有两种方式可供选择:

第一种方式:直接在函数头中throws SomeException,函数体中不需要try/catch。比如将最开始的例子中的testEx2改为下面的方式,那么testEx1就能捕捉到testEx2抛出的异常了。

boolean testEx2() throws Exception{

boolean ret = true

int b=12

int c

for (int i=2i>=-2i--){

c=b/i

System.out.println("i="+i)

}

return true

}

第二种方式:使用try/catch,在catch中进行一定的处理之后(如果有必要的话)抛出某种异常。例如上面的testEx2改为下面的方式,testEx1也能捕获到它抛出的异常:

boolean testEx2() throws Exception{

boolean ret = true

try{

int b=12

int c

for (int i=2i>=-2i--){

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中进行一定的处理之后(如果有必要的话)抛出某种异常。例如上面的testEx2改为下面的方式,testEx1也能捕获到它抛出的异常:

boolean testEx2() throws Exception{

boolean ret = true

try{

int b=12

int c

for (int i=2i>=-2i--){

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, finallyreturn value="+ret)

}

}

java当中,处理异常的方式主要有:try...catch...finally、throw、throws。\x0d\x0a1、try...catch...finally:try语句块中是可能出现异常的代码块,catch语句块中是捕获的异常处理(可以包含多个catch语句块),finally是任何情况下都回输出的提示。\x0d\x0a2、对于处理不了的异常或者要转型的异常,在方法的声明处通过throws语句抛出异常\x0d\x0a3、throw用来抛出一个异常,在方法体内。语法格式为:throw 异常对象。\x0d\x0athrows用来声明方法可能会抛出什么异常,在方法名后,语法格式为:throws 异常类型1,异常类型2...异常类型n