Java异常处理方式

异常的分类
1.运行时异常。
2.编译时异常。

throws关键字声明异常

public void method() throws Exception{
        // 有异常的方法体
    }

分析:这里声明这个方法可能会出现异常,如果没出现异常代码正常执行,如果出发了异常,需要调用者处理异常,如果调用者没有处理,则交给虚拟机(JVM)处理。
这里的异常如果为编译时异常那么必须手动写出异常声明。

异常处理方式
throw关键字手动抛出异常

		System.out.println("正常执行!");
        throw new RuntimeException();   
        //代码至此创建一个异常并没有做处理,直接抛给调用者.以后的代码也就不继续执行了
        System.out.println("不在执行");

throw和throws的区别
throws:在方法声明后面{}之前。表示声明异常调用该方法后可能会出现异常。
throw:在方法中{}之内。表示手动抛出异常等待处理。

抛出异常处理的意义
在方法中若传入参数有误,程序就没有继续执行的意义了。应抛出异常反馈给调用者。

try…catch手动处理异常

		try{
            // 可能出现异常的代码
            throw new Exception();
        }catch(Exception e){
            System.out.println(e);	// 异常处理
        }
        System.out.println("程序不会因为上面异常打断,继续执行");

好处:程序可以继续执行下去。

try…catch常见问题
1.若try中没有异常代码将怎么运行?

try{
            // 可能出现异常的代码
            System.out.println("没有问题的代码");
        }catch(Exception e){// 没有异常发生时  catch中的语句不再执行
            System.out.println("有问题");
        }
        System.out.println("try...catch执行完后");
打印结果:
没有问题的代码
try...catch执行完后

2.若try中发生异常,try中在异常之后的代码还会执行吗?

		try{
            // 可能出现异常的代码
            int[] ar = new int[2];
            int a = ar[2];  // 这里会发生异常
            System.out.println("测试1");  // 这里将不会执行
        }catch(Exception e){
            System.out.println("有问题"); // try中遇到异常代码跳转至此
        }
        System.out.println("try...catch执行完后");
打印结果:
有问题
try...catch执行完后

3.若异常没有被捕获,程序将如何运行?

		try{
            // 可能出现异常的代码
            int[] ar = new int[2];
            int a = ar[2];  // 越界异常ArrayIndexOutOfBoundsException
            System.out.println("测试1");  // 这里将不会执行
        }catch(NullPointerException e){// 我们捕获空指针异常,并没有捕获越界异常。
            System.out.println("有问题");
        }
        System.out.println("try...catch执行完后");
打印结果:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 2

可以看到。当异常没有被捕获时,相当于没有写try…catch,程序自动将异常交给JVM做默认处理。

4.同时出现多个异常程序该如何运行?

try{
            // 可能出现异常的代码
            int[] ar = new int[2];
            int a = ar[2];  // 越界异常
            System.out.println(2 / 0); // 数学运算异常
            System.out.println("测试1");  // 这里将不会执行
        }catch(ArrayIndexOutOfBoundsException e){
            System.out.println("越界异常");
        }catch(ArithmeticException e){
            System.out.println("数学运算异常");
        }
        System.out.println("try...catch执行完后");

总结:出现多个异常,就多次catch。若多个异常有继承关系父类异常的catch语句写在子类后面,或者只写父类异常的catch语句。但是有时会对不同的异常做不同的处理,所以不建议使用后者。

Throwable的成员方法
public String getMessage() // 获取详细错误信息的字符串
public String toSting() // 可抛出异常的简短描述
public void printStackTrace() // 把异常错误信息输出在控制台

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值