博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
实验04博客园总结
阅读量:5926 次
发布时间:2019-06-19

本文共 2047 字,大约阅读时间需要 6 分钟。

实验04,我们学到了异常处理的有关知识

 

1.

import javax.swing.JOptionPane;public class AboutException {    public static void main(String[] a)        {          int i=1, j=0, k;          k=i/j;                    // 1/0 不合法        try        {                        k = i/j;    // Causes division-by-zero exception            //throw new Exception("Hello.Exception!");        }                catch ( ArithmeticException e)           {            System.out.println("被0除.  "+ e.getMessage());        }                catch (Exception e)        {            if (e instanceof ArithmeticException)   //前者是后者的实类                System.out.println("被0除");            else            {                  System.out.println(e.getMessage());                            }        }                finally         {                 JOptionPane.showConfirmDialog(null,"OK");         }                  }}

其输出结果为:

Exception in thread "main" java.lang.ArithmeticException: / by zero

at ketangceshi.AboutException.main(AboutException.java:8)

用try-catch-finally结构处理异常,把有可能发生错误的代码放在try里,当程序检测到出现一个错误时会抛出一个异常对象,异常处理会捕获并处理这个错误。catch语块中的代码用于处理错误。不管是否有异常发生,finally中的代码始终保证被执行,如果没有提供合适的异常处理代码,JVM将结束掉整个程序。  

 

JDK中与异常相关的类

为什么整型数除以0出现错误,而浮点数除以0得无穷大?

java自动把0转化为0.0  浮点数并不精确,所以结果并不属于arithmetic异常除法指令:idiv、ldiv、fdiv、ddiv

多层异常捕获

内层try抛出第一个异常时,程序控制流程跳转到内层的catch语句,解决掉了抛出的第一个异常,此时继续执行外层的try语句块内容,抛出了第二个异常(ArithmeticException),此时按异常类型选择执行catch语句块内容。内层try抛出异常后,内层的catch语句块无法解决抛出的异常,所以跳转到了外层的catch语句块,解决完异常后没有了后续的语句,所以程序结束。

finally语块一定会被执吗

public class SystemExitAndFinally {    public static void main(String[] args)    {        try{            System.out.println("in main");            throw new Exception("Exception is thrown in main");                    //System.exit(0);        }        catch(Exception e)            {            System.out.println(e.getMessage());            System.exit(0);        }        finally        {            System.out.println("in finally");        }    }}

当程序退出后,即    System.exit(0);语句执行后,finally语句块的内容就不会再被执行了,而是直接退出了程序。

 

转载于:https://www.cnblogs.com/jmdd/p/9948596.html

你可能感兴趣的文章
前端技术周刊 2018-09-03:parser
查看>>
.net平台下开发以太坊的实战示例(C#)
查看>>
Hystrix命令入门使用
查看>>
纸壳CMS可视化建站系统创建多语言网站
查看>>
Python方法(二) - 类与继承
查看>>
一道算法题:求出异或和为零的最长连续子串
查看>>
纯CSS 常见3D实例
查看>>
最最最常见的Java面试题总结——第二周
查看>>
Java 垃圾回收的一些概念
查看>>
element-ui upload组件
查看>>
MVVM框架理解及其原理实现
查看>>
工作态度的金字塔
查看>>
vue入门笔记体系(四)computed和watch
查看>>
【跃迁之路】【505天】刻意练习系列264(2018.06.25)
查看>>
API接口设计要考虑的因素
查看>>
Java+Netty实现的RESTful框架--netty-rest-server
查看>>
mpvue开发小程序所遇问题及h5转化方案
查看>>
Swift4.1第一章翻译
查看>>
源码阅读(1)ArrayList
查看>>
【docker】 bind-mount或者COPY时需要注意 用户、文件权限 的问题
查看>>