自定义异常类

 

自定义异常类

         当java内置异常都不能明确说明异常情况的时候,开发人员需要定义一些异常类用于描述自身程序中的异常信息,

         以区分其它程序的异常信息。

  • 自定义异常类可以继承Throwable类或者Exception,而不要继承Error类,自定义异常类之间也可以有继承关系,

           为自定义异常类设计构造方法,以方便构造自定义异常对象。

   抛出自定义异常:

  • 定义了自定义异常类后,程序中的方法就可以在恰当的时候将该种异常抛出。注意要在方法的声明抛出该类型的异常        

                用户自定义异常,只需要继承Exception类即可。

  • 在程序中使用自定义异常,大体可分为以下几个步骤: 1. 创建自定义异常。

                                                                                                  2. 在方法中通过throw关键字抛出异常对象。

                                                                                                  3. 如果在当前抛出异常的方法处理异常,可以使用

                                                                                                      try- catch语句捕获并处理;否则在方法的声明出

                                                                                                      通过throws关键字指明抛出给方法调用者的异,

                                                                                                      常继承进行下一步操作。

                                                                                                  4. 在出现异常方法的调用者中捕获并处理异常。

 

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 exception;
//自定义的异常类
public class MyException extends Exception
{
   //传递数字>10;
   private int detail;
   public MyException(int a)
  {
       this.detail=a;
  }
   //toString异常的打印信息
   public String toString() {
       return "MyException{" + "detail="+ detail +
   '}';
  }
}
package exception;

public class ces {
   //可能会存在异常的方法
   static void ces(int a) throws MyException {//
       System.out.println("传递的参数为:"+a);
           if (a > 10)
          {
                   throw new MyException(a);//抛出

      }
       System.out.println("ok");
  }

   public static void main(String[] args) {
      int a=11;
      try {
          ces(a);
      }catch (MyException e)
      {
          System.out.println("MyException=>"+e);
      }
  }
}

实际应用中的经验总结:

  • 处理运行异常时,采用逻辑去合理规避同时辅助try-catch处理

  • 在多重catch块后面,可以加一个catch(Exception)来处理可能会被遗落的异常

  • 对于不确定的代码,也可以加上try-catch,处理潜在的异常 ( 报错有红色波浪线就按 Alt+Enter)

  • 尽量去处理异常,切记只是简单的调用printStackTrace()去打印输出

  • 尽量添加finally与语句块去释放占用的资源 , IO~Scanner~

 

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;
}
}

posted @ 2022-07-23 17:29  zjw_rp  阅读(112)  评论(0编辑  收藏  举报