为了账号安全,请及时绑定邮箱和手机立即绑定

java复习---异常

标签:
Java

Java异常
什么是异常
错误在我们编写过程经常发生,包括编译期异常和运行期异常。
在程序运行期间,意外发生的情况,背离我们程序本身的意图表现,都可以理解为异常。
如何处理异常
图片描述
Error常见的错误有:虚拟机错误,内存溢出,线程死锁
这些错误在程序的控制和处理能力之外,而且绝大多数程序运行时不允许出现的状况。
所以对于这些错误不会做处理
图片描述

在java应用程序中,异常处理机制为:
抛出异常 捕获异常

图片描述

Try-catch-finally
案例:
public class TryDemo1 {
public static void main(String[] args) {
//接受定义两个整数,求商
Scanner scanner=new Scanner(System.in);
System.out.print("输出第一个整数:");
int i=scanner.nextInt();
System.out.print("输出第二个整数:");
int j=scanner.nextInt();
System.out.println("商为:"+(i/j));
scanner.close();
System.out.print("程序结束");
}
}

以上的程序在没有进行异常处理时,极易出现除0错误与格式转换错误,导致程序异常终止,资源未关闭等。那么接下来我们用异常工具处理这些异常,提高代码的健壮性。

public class TryDemo1 {
public static void main(String[] args) {
//接受定义两个整数,求商
Scanner scanner=new Scanner(System.in);

    try {
        System.out.print("输出第一个整数:");
        int i=scanner.nextInt();
        System.out.print("输出第二个整数:");
        int j=scanner.nextInt();
        System.out.println("商为:"+(i/j));
    } catch (Exception e) {
        System.out.println("程序出错了");
        e.printStackTrace();
    }finally{
        scanner.close();
        System.out.print("程序结束");
    }

}

}

当出错时,
输出第一个整数:0
输出第二个整数:0
java.lang.ArithmeticException: / by zero
at test.TryDemo1.main(TryDemo1.java:24)
程序出错了
程序结束
程序依然可以执行到结束和关闭资源等操作。

多重catch处理
public class TryDemo1 {
public static void main(String[] args) {
//接受定义两个整数,求商
Scanner scanner=new Scanner(System.in);

    try {
        System.out.print("输出第一个整数:");
        int i=scanner.nextInt();
        System.out.print("输出第二个整数:");
        int j=scanner.nextInt();
        System.out.println("商为:"+(i/j));
    } catch (ArithmeticException e) {
        System.out.println("除数不能为0");
        e.printStackTrace();
    } catch (Exception e) {
        System.out.println("程序出错");
        e.printStackTrace();
    } catch (InputMismatchException e) {
        System.out.println("请输入整数");
        e.printStackTrace();
    }finally{
        scanner.close();
        System.out.print("程序结束");
    }

}

}

这样程序就能处理除数为0异常和字母与整数转换的异常。
在catch中加入最后一个catch(Exception),因为,我们不能保证我们能预期到所有的异常,所以我们添加这个catch,保证出现了我们意料之外的异常程序也能执行。(安全保障)

强制终止finally
System.exit(1); 终止程序运行 (只要不是数字0就表示是异常的终止状态)

Return在异常中的作用
图片描述

由于finilly的强制性,无论前面的程序有无出现异常,最后结果都是-100000。所以不建议在finilly中写return。

Throw
将异常抛出
Throws:
抛出异常的类型

自定义异常
图片描述
图片描述
图片描述

public class MyException extends Exception{
public MyException(){
super("这是我的异常类");
}
}

异常链
图片描述

图片描述
图片描述

结果只会输出异常1。

为了解决这个问题,我们使用异常链。
图片描述

在抛出异常时,接收前面的异常。

这样就可以抛出所有异常了。
图片描述

点击查看更多内容
3人点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
JAVA开发工程师
手记
粉丝
57
获赞与收藏
293

关注作者,订阅最新文章

阅读免费教程

感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消