1. 异常简介
Java异常时Java提供的识别响应错误的机制,可以使程序中异常处理代码和正常业务代码分离,提高程序的健壮性。
public class ExceptionTest01{ public static void main(String[] args){ try{ int i = 10 / 0; System.out.println("i = " + i); }catch(ArithmeticException e){ e.printStackTrace(); } } }
运行结果: java.lang.ArithmeticException: / by zero at ExceptionTest01.main(ExceptionTest01.java:5)
Java中可抛出的异常(Throwable)分为三类:编译时异常,运行时异常和错误
Throwable是Java中所有异常和错误的父类。
(1)编译时异常:Exception类本身,和“运行时异常”之外的其他子类
编译时异常要求在编译阶段进行处理,不处理则编译不通过。
(2)运行时异常:RuntimeException及其子类
在编译阶段可处理可以不处理,可以通过throws声明抛出,也可以try-catch捕获异常
(3)错误
当资源不足,约束失败,或是其他程序无法继续运行的条件发生时,就会产生错误。
所有异常都是发生在运行阶段的,发生异常会new对象,在编译阶段不会创建对象。
2. 异常方法的覆盖
子类中不能比父类抛出更广泛的异常
public class ExceptionTest02{ public static void main(){ } } class Animal{ public void doSome(){ System.out.println("animal do something"); } } class Cats extends Animal{ /* 可以不抛出异常 public void doSome(){ System.out.println("animal do something"); } */ public void doSome() throws FileNotFoundException{ System.out.println("animal do something"); //错误: Cats中的doSome()无法覆盖Animal中的doSome() } }
3. 自定义异常
a. 自定义异常类继承Exception;
b. 重写无参数和有参数构造方法;
public class MyException extends Exception{ public MyException(){} public MyException(String s){super(s);} }