异常的概念
Java语言将程序运行过程中所发生的不正常严重错误称为异常,对异常的处理称为异常处理。
它会中断正在运行的程序,正因为如此异常处理是程序设计中一个非常重要的方面,也是程序设计的一大难点。
异常的分类
Thorwable里的常用方法
public String getMessage():获取异常信息
public void printStackTrace():输出异常堆栈中的异常信息
Exception里的构造方法
public Exception():无参构造方法;
public Exception(String message):可以指定详细异常信息的有参构造方法;
Thorwable里的两个子类error和Exception
Error : 这种错误一般是系统里出现的错误用户无法处理所以一般是终止程序并且通知用户。
Exception:这些错误一种是运行时异常RuntimeException另一种是检查时异常CheckedException。
RuntimeException
这种异常一般不用处理也能编译通过
CheckedException
除了RuntimeException及其子类外都是CheckedException类型这些异常都需要处理
常见异常类型
异常名 | 说明 |
Exception | 异常类的根类 |
RuntimeException | 运行时异常类的基类 |
ArithmeticException | 算术错误情形,如以零作除数 |
ArrayIndexOutOfBoundException | 数组大小小于或大于实际的数组大小 |
NullPointerException | 尝试访问 null 对象成员 |
ClassNotFoundException | 不能加载所需的类 |
NumberFormatException | 数字转化格式异常,字符串到 float 转换无效 |
IOException | I/O 异常的根类 |
FileNotFoundException | 找不到文件 |
SQLException | 数据库访问异常 |
InterruptedException | 线程被中断异常 |
处理异常
Java中对异常的处理有如下两种方式:
1.通过try、catch和finally关键字捕获异常;
2.通过throw或throws关键字抛出异常;
try{
//可能抛出异常的语句块
}catch(SomeException1 e){ // SomeException1特指某些异常
//当捕获到SomeException1类型的异常时执行的语句块
} catch( SomeException2 e){
//当捕获到SomeException2类型的异常时执行的语句块
}finally{
//无论是否发生异常都会执行的代码
}
try…catch…finally异常处理结构中,try语句块是必须的, catch和finally语句块至少出现一个。
注意:如果try语句块包含的是检查时异常,则在没有通过throws抛出该异常类的情况下,try必须和catch一起使用,当该行代码去掉或注销掉时,catch相应的异常语句块必须去掉,如下代码:
红框里的代码注释或者去掉时则catch里的语句也必须去掉或注释掉。
捕获异常的特点
在捕获异常时按照先小后大的顺序
try语句块中的代码可能会引发多种类型的异常,当引发异常时,会按顺序查看每个 catch 语句,并执行第一个与异常类型匹配的catch语句,其后 catch 语句被忽略。
抛出异常
throw关键字
throw 的作用是抛出一个异常即为显示一个异常使程序终止并需要处理。
throw用于抛出具体异常类的对象,一般用于方法体中。
什么时候使用:当所写的代码因不满足某些条件致使程序无法运行时可以借助throw抛出一个异常对象提醒程序员。
throw关键字一般用在方法体中,也可以用在代码块中,但如果代码块中抛出的异常对象是由检查时异常创建的,则必须使用try-catch进行处理(因为没有调用这个代码块的方法)
throw将异常抛给调用者。
throws关键字
throws用来处理异常
throws用于声明方法可能抛出的异常,其后为异常类,可以有多个,异常类之间用英文逗号间隔。
什么时候使用:
当方法体中的throw关键字抛出由检查时异常创建的对象时,如果该异常对象在抛出的同时已经通过try-catch进行了处理,则可以不使用throws,否则必须使用throws抛出创建该对象的异常类或其父类。
所调用的方法抛出了检查时异常时,如果该方法在调用的同时已经通过try-catch进行了处理,则可以不使用throws继续上抛该异常,否则必须使用throws才能上抛该异常,此时上抛的异常类可以是调用方法时方法抛出的异常类也可以是其父类。
自定义异常类
自定义异常类创建的条件:当已有的异常类型不满足需要时来创建
下面是一段创建自定义异常类的代码
public class AgeException extends RuntimeException {//如果此处继承了除RuntimeException之外的类则为检查时异常所以会在编写代码时出错
public AgeException(String message){
super(message);
}
}
//继承了运行时异常这个类 并且调用了父类构造方法;
注意:自定义异常类调用父类构造函数(通常是含有一个String类型参数的构造函数);
代码调试
eclipse开发工具中F5 F6 F7 F8能够帮助我们很好的来调试代码
F5:跳入方法
F6:向下逐行调试
F7:跳出方法
F8:直接跳转到下一个断点
点击蓝色部分可以方便的进入调试模式
双击蓝色阴影部分可以设置和解除断点