目录
2. 数组越界异常(ArrayIndexOutOfBoundException)
3. 空指针异常(NullPointerException)
4. 输入不匹配异常(InputMismatchException)
异常
程序执行过程中发生的不正常行为称为异常
一. 常见的异常
1. 算数异常(ArithmeticException)
2. 数组越界异常(ArrayIndexOutOfBoundException)
3. 空指针异常(NullPointerException)
4. 输入不匹配异常(InputMismatchException)
5. 类型转换异常(ClassCastException)
二. 异常的分类
异常分为编译时异常(受查异常)和运行时异常(非受查异常)。
在编译的时候报的异常叫做编译时异常,在运行的时候报的异常叫做运行时异常。
1. Error:错误。Java虚拟机无法解决的严重问题,比如:JVM的内部错误、资源耗尽等。典型代表: StackOverflowError和OutOfMemoryError,一旦发生回力乏术。必须由程序员自己解决。
2. Exception:异常。分为编译时异常和运行时异常。
3. 编译时出现的语法性错误不叫编译时异常,比如你单词拼错了。
4. 编译时异常必须处理,否则程序无法通过编译。
三. 异常的处理
1. 异常的捕获
try-catch捕获并处理
try{
可能出现异常的代码
}catch (你要捕捉的异常){
对捕捉到的异常进行处理
}
try中放可能出现异常的代码,catch捕捉可能出现的异常然后进行处理。
异常被处理,程序可以继续执行后面代码。但try语句块中该出错行后面的代码不会被执行。
异常如果不被捕捉处理,最终都会交给JVM处理,程序会异常终止。
2. 异常的抛出
上面捕获的异常都是程序编译或运行时,自己抛出的。
那么我们能不能通过代码,主动抛出异常?
throw new xxxException(“异常产生的原因”);
主动抛出异常并处理了。如果不处理,程序就会异常终止,不会往下执行。
3. 异常的声明
当方法抛出编译时异常时,用户不想处理该异常,此时就可以借助throws将异常抛给方法的调用者来处理。即当前方法不处理异常,提醒方法的调用者处理异常。
throws xxxException,xxxException
声明异常并不会处理异常,还是需要捕捉并处理的。如下:
确实声明了异常,但出现异常不处理还是会交给JVM,程序终止。
进行处理:
4. finally
程序无论发不发生异常 ,finally中的内容一定会被执行。一般用来放回收资源的一些代码。
5. try-with-resources
try后面还可以跟小括号(),里面放用到的资源。作用:无论 try 块是正常结束还是异常结束,这个资源都会被自动关闭。
不需要写scanner.close()了。
四. 自定义异常类
自定义一个异常类,继承Exception默认就是编译时异常,继承RuntimeException就是运行时异常。如下图就是一个自定义异常: