异常
异常
定义
程序执行过程中发生了不正常的情况,这种不正常的情况就叫做异常
异常信息:(由JVM——java虚拟机打印)
Exception in thread "main" java.lang.ArithmeticException: / by zero
at com.jintianxuejavalema.javase.exception.ExceptionTest01.main(ExceptionTest01.java:8)
java提供异常机制的作用:增强程序的健壮性
java语言是很完善的语言,提供了异常的处理方式,以下程序执行过程中出现了不正常的情况(异常),java吧该异常信息打印输出到控制台,供程序员参考。程序员看到异常信息之后,可以对程序进行修改,让程序更加的健壮。
异常存在形式:
异常在java中以类和对象的形式存在,每一个异常类都可以创建异常对象
public static void main(String[] args) {
//通过“异常类”实例化“异常对象”
NumberFormatException nfe = new NumberFormatException("数字格式化异常");
System.out.println(nfe);
}
运行结果:
异常的继承结构
Object
Object下有Throwable,不管是错误,还是异常,都是可抛出的)
Throwable下有两个分支:
- Error(所有的错误只要发生,java程序只有一个结果,那就是终止程序的执行,不可处理,直接退出JVM)
- Exception(可处理的)
Exception下有两个分支:
- Exception的直接子类:编译时异常/受检异常/受控异常(要求程序员在编写程序阶段必须预先对这些异常进行处理)
- RuntimeException:运行时异常/未受检异常/非受控异常(在编写程序阶段,你可以选择处理,也可以不处理)
异常分类——编译时异常/运行时异常
编译时异常和运行时异常,都是发生在运行阶段。编译阶段异常是不会发生的。
编译时异常:因为编译时异常必须在编译(编写)阶段预先处理,如果不处理编译器报错,因此得名。所以异常都是在运行阶段发生的。因为只有程序运行阶段才可以new对象
异常的处理——两种
第一种方式: 在方法声明的位置是哪个,使用throws关键字(异常上抛)
注:java中异常发生之后,如果一直上抛,最终抛给了main方法,main方法继续向上抛,抛给了调用者JVM,JVM知道这个异常发生,只有一个结果,终止java程序的执行
第二种方式: 使用try…catch语句进行异常的捕捉(异常捕捉)
/*
第一种处理方式:异常上抛,未完成的异常继续上抛,抛给调用者
public static void main(String[] args) throws ClassNotFoundException{
doSome();
}
*/
public static void main(String[] args) {
//第二种处理方式try..catch进行捕捉
try {
//try尝试
doSome();
} catch (ClassNotFoundException e) {//'e'——是变量名
//catch是捕捉异常之后走的分支
e.printStackTrace();
}
}
public static void doSome() throws ClassNotFoundException{
System.out.println("doSome!!!");
}
注:子类重写父类的方法时,子类不能比父类抛出更多的异常