异常

一、异常继承关系

二、异常处理 

       a、打印异常信息到控制台(3种方式)

       b、将异常信息保存到一个文件,方便查看

       c、抛出异常,谁调用谁处理。在方法上使用throws抛出异常类

   语法结构:

    try {
          int num = 1/0;//可能出现异常的代码
        } catch (Exception e) {
            //这里写一些处理异常的代码
            //打印异常信息的3种方式
            System.out.println(e.getMessage());//打印原因
            System.out.println(e.toString());//打印异常类型和原因
            e.printStackTrace();//打印日志,还能定位,推荐
        } finally {
            //这里最好不写业务代码,一般写:关闭流和释放资源的代码
            //不管是否有异常,这里的代码都会执行
        }

注意:1、多个catch中的异常类型,子类放在前面,父类在后面

2、try中一旦匹配到异常时,执行完catch中代码后,整个结构结束,但finally中的代码永远都会执行。

3、抛出运行时异常时,不会提示try-catch

三、自定义异常 

  步骤:可以查看一些异常源代码,模仿

  1、自定义异常类,继承Exception,快捷生成无参构造器和一个带String参数的构造器。

  2、在业务方法中,可能出现异常的地方,创建该异常对象,并向外抛出。

  3、调用该方法时,处理该异常。

/**
 * 自定义异常
 *
 */
public class MyException extends Exception {

    private static final long serialVersionUID = 4408141355562049852L;

    public MyException() {
        super();
    }

    public MyException(String message) {
        super(message);
    }
    
}
/**
 * 测试自定义异常
 */
public class MyExceptionTest{
    public static void main(String[] args) {
        try {
            regist("tom");//cn.itsource.mycode.MyException: 名字重复!
        } catch (MyException e) {
            e.printStackTrace();
        }
    }
    
    /**
     * 用户注册的方法
     */
    public static void regist(String name) throws MyException {
        String[] names = {"tom","jerry","jack"};
        for(String str:names){
            if(str.equals(name)){
                throw new MyException("名字重复!");//如果注册的名字已经存在,则抛出异常。
            }
        }
        System.out.println("注册成功!");
    }
}
原文地址:https://www.cnblogs.com/zwcnblog/p/9902068.html