异常处理
Java的异常
指的是程序运行过程中,因为用户的误操作、代码的BUG等等一系列原因,引起的程序奔溃的现象,被称为异常。
在计算机程序运行的过程中,总是会出现各种各样的错误。
有一些错误是用户造成的,比如,希望用户输入一个 int 类型的年龄,但是用户的输入是 abc ,这时程序就会报错;
// 假设用户输入了abc:
String s = "abc";
int n = Integer.parseInt(s); // NumberFormatException!
还有一些错误是随机出现,并且永远不可能避免的。比如:
- 网络突然断了,连接不到远程服务器;
- 内存耗尽,程序崩溃了;
- 用户点“打印”,但根本没有打印机;
……
所以,一个健壮的程序必须处理各种各样的错误。
所谓错误,就是程序调用某个函数的时候,如果失败了,就表示出错。
异常的分类
异常可以分为编译型异常和运行时异常。
编译型异常:在源码编译阶段,直接抛出异常,这种异常必须要处理。不处理,就无法正常运行代码。
运行时异常:在代码运行时,有可能出现的异常,被称为运行时异常
java中异常的继承关系
Throwable 异常的顶级类
--> Error 致命性的错误,是程序无法处理的错误,表示运行应用程序中较严重问题。
--> Exception 常见的异常的父类,是程序本身可以处理的异常。
--> RuntimeException 运行时异常,只有运行时,才有可能出现异常
其他的Exception的子类都是编译型异常,必须处理。
异常处理
Java的异常处理是通过5个关键字来实现的:try、catch、throw、throws和finally。一般情况下是用try来执行一段程序,如果出现异常,系统会抛出(throws)一个异常,这时可以通过其类型来捕获(catch)它,或最后(finally)由默认处理器来处理。
解决掉异常的现象,让程序继续运行(不要奔溃退出)下去。
程序容错能力提升!!!!程序就会越稳定!!!
抓捕异常
——针对于可能出现异常的代码,进行抓捕
异常处理的核心是try和catch,这两个关键字要一起使用。当try代码块发生异常并抛出一个异常是,异常会由相应的catch语句捕获并处理。只有在有异常抛出时,才会执行catch语句。
语法格式为:
try {
// 可能发生异常的代码
} catch (Exception e) {
//捕获的异常类型异常对象名
// 如果出现了一次,代码会立刻进入catch中
// 在这儿解决抓捕到的异常
}
如果使用抓捕异常,通过这种处理,程序即便是遇到了,也不奔溃!!!
例如:
public class Test01{
public static void main(String[] args) {
int i,a;
try {
//监视可能发生异常的代码块
i=0;
a=36/i;
}catch(ArithmeticException e) {
//捕获一个被零除异常
System.out.print("除数为零");
}
}
}
多个catch子句
可以使用多个 catch 语句,每个 catch 分别捕获对应的 Exception 及其子类。JVM在捕获到异
常后,会从上到下匹配 catch 语句,匹配到某个 catch 后,执行 catch 代码块,然后不再 继续匹
配。
简单地说就是:多个 catch 语句只有一个能被执行。
注:范围大的异常要放在后面,否则就会报错!!!
try{
//可能发生异常的代码块
}catch(异常类型1 异常对象名1){
//异常处理代码块1
}
catch(异常类型2 异常对象名2){
//异常处理代码块2
}
..