JAVA基础复习异常处理

异常处理

1、异常处理方式

  • try-catch方式

  • throws方式

    throws + 异常类型,写在方法的声明处。指明此方法执行时,可能会抛出的异常类型。一旦当方法体执行时出现异常,就会在异常处生成一个异常类的对象,此对象满足throws异常类型时,就会被抛出。异常后续的代码就不再执行。

2、两种异常处理方式区别

  • try-catch-finally

    真正的将异常给处理掉了。

  • throws

    只是将异常抛给了方法的调用者,并没有真正的将异常处理掉。

3、两种异常处理方式的选择

  1. 如果父类中被重写的方法没有用throws方式处理异常,则子类重写的方法也不能用throws处理异常,如果子类重写的方法中有异常,必须使用try-catch-finally的方式处理。
  2. 执行的方法a()中,先后调用了另外的几个方法,这几个方法时通过递进关系执行的。建议这几个方法的异常使用throws方式进行处理,而执行的方法a()可以使用try-catch-finally的方式处理。

4、手动抛出异常对象

  • 手动抛出Exception类型异常

    方法中手动抛出Exception类型异常,则方法中必须使用throws方式处理异常且调用者必须对该异常进行处理,使用try-catch或者throws继续抛出此异常。

  • 手动抛出RuntimeException类型异常

    调用者不用对该运行时异常进行处理,程序运行时遇到异常后,自动抛出到控制台。

    /**
     * 手动抛出异常
     */
    public class testException {
        public static void main(String[] args) {
            Student student = new Student();
            try {
                student.addStudent(-1);
            } catch (Exception e) {
                //输出异常处理信息
                System.out.println(e.getMessage());
            }
        }
    }
    /**
     * 手动抛出Exception异常
     */
    class Student {
        private Integer age;
        public void addStudent(Integer age) throws Exception {
            if (age > 0) {
                this.age = age;
            } else {
                throw new Exception("年龄必须大于0");
            }
        }
    }
    
    class testException2 {
        public static void main(String[] args) {
            Student2 student = new Student2();
            student.addStudent(-1);
        }
    }
    /**
     * 手动抛出RuntimeException异常
     */
    class Student2 {
        private Integer age;
        public void addStudent(Integer age) {
            if (age > 0) {
                this.age = age;
            } else {
                throw new RuntimeException("年龄必须大于0");
            }
        }
    }
    

5、自定义异常

自定义异常步骤:

  1. 继承于现有的异常类:RuntimeException、Exception等;
  2. 提供全局常量;
  3. 提供重载的构造器。
/**
 * 自定义异常,继承Exception
 */
public class MyException extends Exception {
    //网络通信传输时,标识该类唯一
    static final long serialVersionUID = -3387516993124229948L;

    public MyException() {
    }

    public MyException(String msg) {
        //调用父类的构造方法处理
        super(msg);
    }
}
原文地址:https://www.cnblogs.com/elnimo/p/15758226.html