1.Exception是所有异常的根类。java中所有的异常类都会直接或间接的继承自Exception。
Exception的父类是Throwable。Throwable的两个子类分别是:Exception和Error
2.异常分为两大类
(1)Checked exception
(2)Unchecked exception(又叫Runtime Exception):java中所有的运行时异常都会直接或间接的继承自RuntimeException
3.异常处理的完整结构
try,catch,finally关键字
try
{
}
catch( Exception e )
{
}
finally
{
}
4.
异常捕获的第一种方法
异常捕获的第二种方法
输出。输出内容的顺序就是代码执行的顺序,aa应该在下面
5.
对于非运行时异常,Checked exception:必须对其进行处理,方式有两种:
第(1)种:使用try——catch——finally进行捕获。
第(2)种:在调用该会产生异常的方法所在的方法声明throws Exception。
对于运行时异常:可以不对其进行处理,也可以对其进行处理,推荐不对其进行处理6.NullPointerException——空指针异常
出现该异常的原因在于,某个引用为null,但却调用了它的某个方法
7.自定义异常类 MyException
自定义异常通常是定义了一个继承自Exception类的子类,那么这个类就是一个自定义异常类
通常情况下,会直接继承自Exception类,一般不会继承某个运行时异常类
使用MyException异常类 ExceptionTest4
8.可以使用多个catch块来捕获异常,这是需要将父类型的catch块放到子类型的catch块后面,这样才保证后续的catch可能被执行,否则子类型的catch将永远无法到达,java编译器会报编译错误。如果多个catch块的异常类型是独立的(无继承关系),那么谁前谁后都可以
9.异常面试题1
以下代码,当try中有return时:首先将finally块中的代码执行完毕,然后方法再返回
执行完try块的第一行代码,后执行finally中代码,然后返回try块中执行return,直接返回,所以后续代码不执行
输出结果:
异常面试题2
如果try块中存在System.exit(0)语句,那么就不会执行finally块中的代码,因为System.exit(0)会终止当前运行的java虚拟机,程旭辉在虚拟机终止前结束执行
System.exit方法:终止正在运行的java虚拟机
先执行System.exit,虚拟机停止,后面所有代码都不执行
输出结果: