程序的运行或编译时,所产生的错误通常称为异常(也叫BUG),而异常又分为Error,Exception当程序遇到Error这种异常时不能处理,因为这种异常是物理设备的异常,例如内存不足之类的;而程序能运行捕获的异常就是编译时异常和运行时异常,这些都能通过改代码来调整修复回来.
JVM的默认处理方案:如果程序出现了问题,我们没有做任何处理,最终JVM会做默认处理:
(1)把异常的名称,,异常的原因及异常出现的位置等信息输出在控制台.
(2)程序停止运行.
1.运行时异常(1)又称为checked异常
(2)RuntimeException类及其子类都是运行时类,运行时异常是在程序运行时由Java虚拟机自动进行捕获处理的.
(3)AritheticExceptio算数异常.
(4)ClassCastException类型转换异常
(5)IndexOutOfBoundsException角标越界异常
(6)NullPointerException空指针异常
(7)NumberFormatException数字格式化异常
(8)这些异常是不检查异常,程序中可以选择捕获处理,也可以不处理,这些异常一般是由程序逻辑错误引起的,程序应该从逻辑角度尽可能避免这类异常的发生.
特点:
Java编译器不会检查它,也就是说,当程序中可能出现这些异常,即使没有用try..catch语句捕获它,也没有用throws字句声明抛出它,也会编译通过.
2.编译时异常(1)又称unchecked异常
(2)除了RuntimeException类及其子类外,其他子类都是编译时异常.
(3)从程序语法角度讲必须进行处理的异常,如果不处理,程序就不能编译通过.
使用方式:
<1>使用try{}catch(Exception e){}语句对异常进行捕获处理,处理方式可以自行编写.
<2>使用throws关键字声明抛出异常,让调用者自身对其处理,处理方式不能编写
3.throws和throw的区别:
throws:
(1)用在方法声明后,跟的是异常类名.
(2)表示抛出异常,由该方法的调用者来处理.
(3)表示出现异常的一种可能性,并不一定会发生这些异常.
throw:
(1)用在方法体内,跟的是异常对象名.
(2)表示抛出异常,由方法体内的语句处理.
(3)执行throw一定抛出了某种异常
异常处理try catch finally的作用,使用方式JVM自动处理异常:
当程序出现运行时异常时,如果不主动对其做任何处理,则异常最终会被JVM执行时处理.
JVM处理方式:立刻终止运行程序,同级代码不再执行,同时将异常信息,类型以及出错位置打印在控制台.
主动捕获处理:
1.使用try-catch
语法格式:
try{
可能出现异常的语句
}catch(异常类型 变量名){
处理变量的方式
}
try后可跟多个catch,运行时根据判断异常的类型来确定使用那一种处理异常的方法.
Exception是所有(狭义,不不包括Error类)异常的父类,因为任何异常都能满足Exception类型catch的判断条件
当判断异常属于那种类型后,剩下所有catch不再进行判断,直接跳过.
异常类型为Exception的catch语句只能放在所有catch语句序列的最后一个.
2.使用try-finally
语法格式:
try {
可能出现异常的语句
}finally {
处理异常的方法
}
无论try中包含语句是否存在异常,finally包含的语句都会执行.(一般用于释放资源)finally语句一定执行.
3.主动抛出异常
发现异常时,可以不用try-catch而使用throws将异常类直接抛出,交给其他语句处理.



