一. Java的异常机制
1.什么是异常
软件程序在运行过程中,存在许多意料之外或是特殊情况,这种时候程序可能会出现一些问题,我们叫做异常,英文是Exception。如果我们不及时处理,这些异常就会影响正常的程序执行。
异常处理的五个关键字
try、catch、finally、throw、throws
2.java异常的分类
- 检查性异常:简单来说就是这些异常在编译时就不能通过
- 运行是异常:相反就是能在编译是通过,而在运行时出现的异常
- 错误:也就是error,错误不是异常
3.异常体系结构
Java把异常当作对象来处理,并定义一个基类java.lang.Throwable作为所有异常的超类。在Java API中已经定义了许多异常类,这些异常类分为两大类,错误Error和异常Exception.
4.Error和Exception的区别
Error通常是灾难性的致命的错误,是程序无法控制和处理的,当出现这些异常时,Java虚拟机(JVM)一般会选择终止线程;Exception通常情况下是可以被程序处理的,并且在程序中应该尽可能的去处理这些异常。
二. Java的捕获和抛出异常
来看代码
public class Test {
public static void main(String[] args) {
//捕获异常
try {
//可能产生异常的代码
new Test().method(1, 0);//计算1/0
} catch (ArithmeticException e) {//try抛出的是什么异常,catch里面就定义什么异常变量,用来接受这个异常
System.out.println("捕获到异常");//捕获异常后做的事情
} finally {//finally里面就是不管有没有catch异常都会执行
System.out.println("finally");
}
System.out.println("===================");
}
//method方法用于计算a/b并打印出来
public void method(int a, int b) {
System.out.println(a / b);
}
}
计算a/b,但是因为b不能为0,所以就程序运行过程中就可能存在异常,使用try{}catch{}来捕获异常,好处是如果你不捕获异常的话,程序就会被终止,下面的等号不会被打印,但加了捕获异常,所以程序能继续执行,这就是它的好处。
捕获异常的快捷键: 先选中代码块再Ctrl + Alt + T
在Exception分支中有一个重要的子类RuntimeException(运行时异常)
ArraylndexOutOfBoundsException(数组下标越界)
NullPointerException(空指针异常)
ArithmeticException(算术异常)
MissingResourceException(丢失资源)
ClassNotFoundException(找不到类)等异常,这些异常是不检查异常,程序中可以选择捕获处理,也可以不处理。
因为这些异常你不主动抛出,程序在遇到时它也会自动抛出
2.多个异常的捕获
public class Test02 {
public static void main(String[] args) {
//捕获异常
try {
//可能产生异常的代码
new Test02().method(1, 0);//计算1/0
} catch (ArithmeticException e) {//try抛出的是什么异常,catch里面就定义什么异常变量,用来接受这个异常
System.out.println("ArithmeticException");//捕获异常后做的事情
} catch (Exception r) {
System.out.println("Exception");
} finally {//finally里面就是不管有没有catch异常都会执行
System.out.println("finally");
}
System.out.println("===================");
}
//method方法用于计算a/b并打印出来
public void method ( int a, int b){
System.out.println(a / b);
}
}
在需要捕获多个异常时,小的要放在前面,大的放后面
因为ArithmeticException 是属于Exception ,所以小,假如反过来它就会报错
3.Throwable类中的3个处理异常的方法
1. string getMessage()返回此throwable的简短描述。
2. String tostring()返回此 throwable的详细消息字符串。
3. void printstackTrace()JVM打印异常对象,默认此方法,打印的异常信息是最全面的