总结自 韩顺平 零基础30天学java
一、异常的概念
异常:将程序执行时发生的不正常的情况称为异常。
出现异常后,程序会抛出异常,然后程序会直接退出,不向下执行了。
这样的程序健壮性不好,程序稍微有一点点错误就不能向下执行了。
解决方式:捕获异常。
异常可分为两大类:error(错误)和Exception(异常)
(1)error:如内存不足,栈溢出等JVM无法处理的严重问题。
(2)Exception:因编程错误或偶然的外界因素导致的问题。如数据格式错误,空指针异常等。
Exception也可分为两类:1.运行时异常RuntimeException2.编译时异常。
(1)运行时异常:即在运行时才检测的异常。
(2)编译时异常:在编译时由编译器检查出的异常。
二、异常体系图(重点)
三、常见异常
常见的运行时异常
(1)NullPointerException(空指针异常)
(2)ArithmeticException(数学运算异常)如除0操作
(3)ArrayIndexOutOfBoundsException(数组下标越界异常)
(4)ClassCastException(类型转换异常)如将文字字符串转成int
(5)NumberFormatException(数字格式不正确异常)
常见编译时发生的异常
一般为访问某些资源(文件、数据库)时发生的异常。
(1)SQLException 操作数据库,查询表时出现的异常
(2)IOException 操作文件时发生的异常
(3)FileNotFoundException 操作一个不存在的文件时发生的异常
(4)ClassNotFoundException 在加载类,该类不存在时发生的异常
(5)EOFException 操作文件到文件末尾发生的异常
(6)ILLegalArguementException 参数异常
四、异常处理的概念
异常处理:当异常发生后,对异常进行的操作。
异常处理的方式:
1.try-catch-finally:里面捕获发生的异常,然后程序员自行处理。
2.throws:抛出异常。(当异常发生后,交给调用者(方法)来处理,最顶级的调用者就是JVM机)
1.try-catch-finally:
try{
1将可能有异常的代码放到try中去,如果出现异常,就将异常信息封装成Exception的一个对象作为实参,传入到catch里面去。
}catch(Exception e){
2.在catch中得到异常后,程序员可以自选决定要进行的操作。
}finally{
3.Finally中是必须执行的,不管异常有没有发生
}
需注意:
若try中有异常就到catch中,若没有异常就不进入catch。
finally中的代码块是必须执行的。
2.throws:
这里的异常可以是多个异常,也可以是该异常的父类
- 编译异常必须处理(显式去处理):要么try-catch,要么向调用者抛出。
- 运行异常,默认throws
- 子类重写父类方法,子类抛出异常是父类抛出异常的子类
对于运行时异常,若一直向上抛则最终交给JVM机。
五、自定义异常
当程序中出现了某些错误,但该错误信息没有在Throwable子类中描述处理。这时便可以自己设计异常类,用于描述该错误信息。
自定义异常的步骤:
1.定义类 class 类名
2.继承一个异常类.
如果继承的是RuntimaException,则是运行时异常,否则则是编译时异常。
如:
//定义自定义异常
class A extends RuntimeException {
public A(String message) {
super(message);
//可对super进行追溯,查找上一级。
}
}
public class CustomException {
public static void main(String[] args){
int age = 350;
if (!(age >= 18 && age <= 190)) {
//throw在方法体中,表明要扔出一个具体的异常对象,需手动生成异常。
throw new A("年龄需要在18-190之间");
}
System.out.println("年龄范围正确");
}
}
七、throw和throws
throw在方法体中使用,用于手动抛出一个异常对象。
throws在方法声明时使用,用于表示抛出异常的类型。