一、什么是java异常?
异常就是在程序的运行过程中所发生的意外事件,它中断指令的正常执行。
异常处理一般只针对编译期异常
二、异常处理
1.处理异常的两种方式:
(1)捕获异常:就地解决,并使程序继续执行。
(2)声明抛出异常:将异常向外转移,即将异常抛出方法之外,由调用该方法的环境去处理。
2.Error和Exception
(1)Error:错误Error类指的是系统错误或运行环境出现的错误,这些错误一般是很严重的错误,即使捕捉到也无法处理。由Java虚拟机生成并抛出,包括系统崩溃、动态、链接失败、虚拟机错误等等,在Java程序中不作处理。
(2)Exception:异常Exception类则是指一些可以被捕获且可能恢复的异常情况,是一般程序中可预知的问题。
3.异常的分类
(1)运行时异常:
由系统检测,用户的java程序中可不作处理,系统将它们交给缺省的异常处理程序。
(2)非运行时异常:
在程序中必须对其进行异常处理,否则编译器会指出错误。
4.自定义异常处理程序:
(1)创建一个继承Exception类或者其他已存在的异常类的子类
(2)在该类中创建一个默认的无参数构造方法,该构造方法以适当的错误消息作为输入,调用它的超类的构造方法。
(3)再增加一个带字符串参数的构造方法,该构造方法以适当的错误消息作为输入(还包括输入的字符串)来调用其超类相应的构造方法。
用户定义的异常必须继承自Throwable或Exception类,建议用Exception类。
三、五个关键字
1.try:
捕获异常的第一步是用try{…}选定捕获异常的范围,try模块中的语句是程序正常流程要执行的语句,但是在执行过程中有可能出现异常。所有可能抛出异常的语句都放入try模块中。
代码示例:
try{
可能发生异常的代码
}catch(Exception e){
e.printStackTrace(); //Null
}
fianlly{}
如果当前try块中存在多条可能会发生异常的代码A,B,C三条语句,如果A发生异常,此时B,C语句不会被执行到。
try块尽量避免嵌套
2.catch(必有)
在catch块中是对异常对象进行处理的代码,与其他访问对象一样,可以访问一个异常对象的数据成员或调用它的方法。
(1)getMessage()是类Thowable所提供的方法,用来得到有关异常事件的信息。
(2)类Thowable还提供了方法printStackTrace()用来跟踪异常事件发生时执行堆栈的内容。
一个try—>一个catch—>对应一个finally
3.throw
抛出异常对象通过throw语句实现。
如:
IOException e = new IOException();
throw e;
4.throws
throws子句中同时可以指明多个异常,之间由逗号隔开。
使用范例:
void fun()throws InterruptedException{
Thread.sleep(1000);
}
throw扔的是异常对象,throws扔的是异常类
5.finally(可选)
捕获异常的最后一步是通过finally语句为异常处理提供一个统一的出口,使得在控制流转到程序的其他部分以前,能够对程序的状态作统一的管理。
如果try代码块里面包含return;并且finally块也包含return;此时从try块中System.exit退出。
不管try代码块中是否发生了异变,finally中的语句都会被执行。
四、注意事项
Java异常处理机制(try-catch-finally语句、throws子句、throw语句)带来Java程序代码结构上的改变。
1.不能滥用异常机制。简单的出错判断建议用if语句。
2.不要过分细分异常。