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