异常
异常的定义:
异常是指在程序的运行过程中所发生的不正常的事件,它会中断正在运行的程序
Java通 过Throwable类的众多子类描述各种不同的异常。Java异常是Throwable子类的实例,描述了出现在一段编码中的错误条件。当条件生成时,错误将引发异常。
异常的结构
Throwable:有Error和Exception两个子类,各自包含大量子类。
Error:错误
Exception:异常
确定会发生异常的情况:
Checked异常:提前处理
不确定:
运行期异常:RuntimeException:遇到再处理
常见的异常类型:
算数异常:ArithmeticException
空指针异常:NullPointException
数组越界异常:ArraysIndexOutOfBoundsException
索引越界异常:IndexOutOfBoundsException
类型装换异常:ClassCastException
输入类型类型不匹配:InputMismatchException
输入输出异常:IOException
SQL异常:SQlException
非法参数异常:IllegalArgumentException
数字格式化异常:NumberFormatException
未找到类的异常:ClassNotFoundException
异常处理:
在 Java 应用程序中,异常处理通过5个关键字来实现:
try、catch、finally、throw、throws
try{
有可能发生问题的代码块;
}catch(有可能发生的异常类型 e){
对异常信息查看的操作
}finally{
必定会运行的代码
}
引发多种类型的异常:
1、排列catch 语句的顺序:先子类后父类
2、发生异常时按顺序逐个匹配
3、只执行第一个与异常类型匹配的catch语句
抛出异常:
throw的使用:
throw总是出现在函数体中,用来抛出一个Throwable类型的异常
throw的
throws的用法:
如果一个方法可能会出现异常,但没有能力处理这种异常,可以在方法声明处用throws子句来声明抛出异常。
throw和throws
throw:抛出,手动产生异常
必须在条件语句内
throws:声明该方法未处理的异常
RuntimeException:不一定要处理
Exception:一定要处理
练习:使用throw抛出年龄异常
在setAge(int age) 中对年龄进行判断,如果年龄介于1到100直接赋值,否则抛出异常
在测试类中创建对象并调用setAge(int age)方法,使用try-catch捕获并处理异常
public class Age {
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age)throws AgeException {
if(age>=0 && age<=100){
this.age = age;
}else{
throw new AgeException("年龄必须在1到100之间!");
}
}
public void print(){
System.out.println(this.name+"今年"+this.age+"岁");
}
public static void main(String[] args) {
Age age = new Age();
age.setName("张三");
try {
age.setAge(-1);
age.print();
}catch (AgeException e){
e.printStackTrace();
}
}
}
public class AgeException extends Exception{
public AgeException(){
}
public AgeException(String message){
super(message);
}
}
自定义异常
当JDK 中的异常类型不能满足程序的需要时,可以自定义异常类
使用自定义异常的步骤:
1、定义异常类
2、编写构造方法,继承父类的实现
3、实例化自定义异常对象
4、使用throw抛出
异常处理原则:
1、异常处理与性能
2、异常只能用于非正常情况
3、不要将过于庞大的代码块放在try中
4、在catch中指定具体的异常类型
5、需要对捕获的异常做处理