Java-第六章 异常处理

编程执行过程中很可能出现错误,比如文件不存在,除以0等问题都有可能影响程序的正常运行导致非常规终止,通常将可能出现异常的语句放入try{}语句中,将出现错误后需要执行的语句放入到catch{}语句中,将无论是否发生异常都要执行的语句放在finally{}语句中。

 

当程序执行出现异常的时候,系统会抛出一个异常,从try{}中跳出到catch{}中进行捕捉。不过不管有没有异常产生,finally{}中的语句都将执行。在catch中根据Exception的衍生累可以捕捉多种异常 举例子 触发中我们可以捕捉高等级的也可以捕捉低等级的 (自己编的)可以是    NumbercalException  也可以是低级的DevideByZeroException。

 

捕捉的异常一定要是可能产生的异常,你在一个触法中捕获IO异常,这是不可能触发的,高级的编辑器会提醒你你的异常是捕捉不到的。

异常可以由下向上提交,例如外层有一个异常捕获,内层还有一个异常捕获不过捕获到的异常它无法处理,那么会提交到外层的继续处理,所有的都处理不了那么就异常结束程序。

小例子

public class Test {
	public static void main(String[] args)
	{
		int c,a=1,b=0;	
		try{
		 c = a/b;
		}
        //,java中整数除以0会引发 java.lang.ArithmeticException:
		catch(ArithmeticException e)
		{
		    e.printStackTrace();
			c = a/1;
		}
		finally
		{
		
		}
		System.out.println(c);
	}
}

注意:

  • catch可以有多个 用于捕捉多种异常,就像else if一样多个累在一起。
  • finally用于必须执行的代码,本例子是不需要的 因为计算正确不用管 计算错误变为除以1,没有通用的代码部分。可以用的像打开文件写数据,无论写的时候是否发生错误,都需要关闭IO操作。
  • 在编辑器中,当一个代码块可能发生异常时但你没有进行异常处理,那么会提醒你,所以你必须把它放在try{}catch{}finally{}结构中.
多层异常处理

public class CatchWho {
    public static void main(String[] args) {
        try {
            try {
                       //自行抛出异常 自己编程的时候也可以手动抛出 这里是为了示意
                       throw new ArrayIndexOutOfBoundsException();
            }
            catch(ArrayIndexOutOfBoundsException e) {  //捕捉这个异常

                        System.out.println(  "ArrayIndexOutOfBoundsException" +  "/内层try-catch");

            }
            //抛出另一个异常
            throw new ArithmeticException();

        }
        //外层捕捉异常
        catch(ArithmeticException e) {

            System.out.println("发生ArithmeticException");

        }
        catch(ArrayIndexOutOfBoundsException e) {

           System.out.println(  "ArrayIndexOutOfBoundsException" + "/外层try-catch");

        }

    }

}

程序运行结果:
ArrayIndexOutOfBoundsException/内层try-catch
发生ArithmeticException

发现没有,内部的异常被内部捕捉乐,就不会再次传到外部,因为已经被处理了,但是没有处理的异常还是会被处理。

 

当有多个try{}catch{}finally{}语句嵌套使用,根据异常在不同层次不同位置的抛出,是会造成finally语句不同的执行结果,情况非常的多,多动手测试一下就会发现其中的有个规律。但是总体原则是:一个异常抛出的语句到捕获这个异常的catch语句之间的语句,不论是try,catch,finally语句都不会执行。一个异常被捕获后被处理则不会继续触发。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值