当java内置异常都不能明确说明异常情况的时候,开发人员需要定义一些异常类用于描述自身程序中的异常信息,以区分其它程序的异常信息。
自定义异常类可以继承Throwable类或者Exception,而不要继承Error类,自定义异常类之间也可以有继承关系,为自定义异常类设计构造方法,以方便构造自定义异常对象。
抛出自定义异常:
定义了自定义异常类后,程序中的方法就可以在恰当的时候将该种异常抛出。注意要在方法的声明抛出该类型的异常
class Student { public void speak(int m)throws MyException { if(m>1000) { MyException exception=new MyEception(m); throw exception;//抛到指定的处理异常的类 } println("I can speak English"+m+""); } }
自定义异常类处理:调用声明抛出自定义异常方法时,要进行异常处理具体可以采用前面介绍的两种方式。
总结:1.先自定义一个异常类,进行异常处理,然后编写一个类,该类有产生异常的方法。
2.这个产生异常的方法通过实例化异常类和抛出这个异常对象进行传递到异常类里面进行异常处理
如:异常类 对象=new 异常 类();
throw 对象 ;//抛到这个对象里面
package src; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JTextField; class MyExceptionZero extends Exception { String message; MyExceptionZero() { this.message="除数不能为0!"; } public String toString() { return message; } } public class Test4 extends JFrame { JLabel lab1,lab2,lab3; JButton btn; JTextField txtf1,txtf2,txtf3; JPanel p; Test4() { init(); } public void init() { lab1=new JLabel("被除数:"); lab2=new JLabel("除 数:"); lab3=new JLabel("商 为:"); btn=new JButton("计算"); txtf1=new JTextField("1.25",10); txtf2=new JTextField("0",10); txtf3=new JTextField(10); p=new JPanel(); p.add(lab1); p.add(txtf1); p.add(lab2); p.add(txtf2); p.add(lab3); p.add(txtf3); p.add(btn); btn.addActionListener(new btnhandler()); this.setContentPane(p); this.setDefaultCloseOperation(EXIT_ON_CLOSE); this.setSize(220,160); this.setLocationRelativeTo(null); this.setVisible(true); } public static void main(String[] args) { new Test4().setTitle("第4题"); } class btnhandler implements ActionListener { public void actionPerformed(ActionEvent e) { double a=Double.parseDouble(txtf1.getText()); double b=Double.parseDouble(txtf2.getText()); DivZero r=new DivZero(); try { double c = r.division(a,b); txtf3.setText(c+""); } catch(MyExceptionZero e1) { JOptionPane.showMessageDialog(null,e1.toString()); } } } } class DivZero { public double division(double a, double b) throws MyExceptionZero { if(b==0) { MyExceptionZero exception=new MyExceptionZero(); throw exception; } return a/b; } }