这篇博客主要是总结一下Java中的异常处理。
1.什么是异常
异常是阻止当前方法或作用域继续执行的问题,在程序中导致程序中
断运行的一些指令。
受检异常(Exception):编译时异常
非受检异常(RuntimeException):运行时异常
2.try与catch关键字
try{
//有可能发生异常的代码段
}
catch(异常类型 对象)
{
//异常的处理操作
}......
finally
{
//异常的统一出口
}
3.异常处理过程分析
(1)一旦产生异常,则系统会自动产生一个异常类的实例化对象。
(2)此时如果存在了try语句,则会自动找到匹配的catch语句,如果没有异常处理,则程序将退出,并有系统报告错误
(3)所有的catch根据方法的参数匹配异常类的实例化对象,如果匹配成功,则表示由此catch进行处理。
4.finally关键字
在异常处理之后,在异常的处理格式还有一个finally语句,那么此语句将
作为异常的统一出口,不管是否产生了异常,最终都要执行此段代码
Demo1
public class ExceptionDemo {
public static void main(String args[])
{
int a = 10;
int b = 0;
int c = 0;
//出现运行时异常,除数为0
//把有可能发生异常的代码段放到try块中
//通过catch语句进行异常捕获
try {
c = a / b;
}catch (ArithmeticException ex)
{
//输出栈中的异常信息
ex.printStackTrace();
System.out.println("算数运算异常");
}finally {
System.out.println("finally:不管try中的语句是否出现异常,都会执行");
}
System.out.print(c);
}
}
5.throw与throws关键字
两者配套使用
throws关键字主要是在方法的声明上使用,表示方法中不处理异常,而
交给调用处处理。实际上对于java程序来讲,如果没有加入任何的异常
处理,默认由JVM进行异常的处理操作。
throw关键字表示在程序中手动抛出一个异常,因为从异常处理机制来看
所有的异常一旦产生之后,实际上抛出的就是一个异常类的实例化对象
,那么此对象也可以由throw直接抛出
public class ExceptionDemo2 {
public static void main(String args[]) {
try {
add();
} catch (Exception ex) {
ex.printStackTrace();
}
}
//当输入的数为非数字的时候,则会报出异常
public static int add() throws Exception {
try {
Scanner input = new Scanner(System.in);
System.out.println("请输入第一个数:");
int num1 = input.nextInt();
System.out.println("请输入第二个数:");
int num2 = input.nextInt();
return num1 + num2;
} catch (Exception ex) {
//对异常进行包装
throw new Exception("相加运算异常");
}
}
}
6.异常处理的语法规则
(1)try语句不能单独存在,可以和catch、finally组成try…catch…finally
或者try…catch或者try…finally三中结构,catch语句可以有一个或者多个,finally语句最多一个,try、catch、finally这三个关键字均不能单独使用
(2)try catch finally 三个代码块中的变量,的作用域分别独立而不能相互访问。
(3)多个catch块时候,java虚拟机会匹配其中一个,异常类或其子类,就执行这个catch块,而不在执行别的catch块