Java异常及其处理

1. 异常的产生

   异常是导致程序中断的一种指令流,异常一旦产生并且没有进行合理处理的话,那么程序就将中断执行。

范例:产生异常的代码

public class TestDemo{
public static void main(String args[]){
    System.out.println("1.除法计算开始。");
    System.out.println("2.除法计算:"+ (10 / 0));//此处产生异常
    System.out.println("3.除法计算结束。");
        }
}
运行结果: 
1.除法计算开始。
Exception in thread "main" java.lang.ArithmeticException: / by zero

        at TestDemo.main(TestDemo.java:5)

我们发现:一旦异常之后发现产生异常的语句及之后的语句不再执行,默认情况下是进行异常信息的输出,而后自动结束程序的执行。

2.异常的处理

   Java之中提供了三个关键字:try, catch, finally。
   三个关键字的使用语法如下:
   try {
        //有可能出现异常的语句
   }catch(异常类型 对象){
    //异常处理
   }catch(异常类型 对象){
    //异常处理
   }...finally{
        //不管是否出现异常,都执行的统一代码
   }
    对于以上的操作组合有: try...catch, try...catch...finally, 和 try...finally。

  应用异常处理流程图如下

1. 当程序在运行的过程中出现了异常之后,那么会由JVM自动根据异常的类型实例化一个与之类型匹配的异常类对象(此处用户不用关心new,系统自动处理);
2. 产生了异常对象之后,会判断当前的语句上是否存在异常处理,如果没有异常处理,那么就交给JVM进行默认的异常处理,处理的方式:输出异常信息,而后结束程序的调用;
3. 如果此时存在有异常的捕获操作,那么会由try 语句来捕获产生的异常类实例化对象,而后与
try语句后的每一个catch比较,如果有符合的捕获类型,则使用当前的catch语句来进行处理,如果不匹配,则向下继续匹配其他的catch;
4. 不管能不能够匹配,那么都要向后执行,如果程序中存在有finally语句,就先执行finally中的代码,但是执行完毕后,就需要根据之前的catch匹配结果来决定如何执行,如果之前已经成功的捕获了异常,就继续执行finally之后的的代码,如果之前没有成功的捕获异常,那么就将此异常交给JVM进行默认处理。
观察代码:
public class TestDemo{
	public static void main(String args[]){
	    System.out.println("1.除法计算开始");
   	    try {
		int x = Integer.parseInt(args[0]);
                int y = Integer.parseInt(args[1]);
                System.out.println("2.除法计算:" + x/y);
                System.out.println("############");
            } catch (Exception e){
		e.printStackTrace();
            } finally{
		System.out.println("### 不管是否出现异常都执行");
            }
            System.out.println("3. 除法计算结束。");
        }
	
  }

编译后执行java TestDemo 10 0

执行结果:
1.除法计算开始
java.lang.ArithmeticException: / by zero
        at TestDemo.main(TestDemo.java:7)
### 不管是否出现异常都执行
3. 除法计算结束。


 注意:在编写多个catch捕获异常的时候,捕获范围大的异常一定要放在捕获异常小的后面,如果上述代码加上catch(ArithmeticException e)就必须放在Exception前面 ;
虽然直接捕获Exception比较方便,这样所有的异常都按照同样的方式进行处理,在一些要求严格的项目,异常一定要分开处理。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值