博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
动手动脑-5
阅读量:4545 次
发布时间:2019-06-08

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

package 关于异常;import javax.swing.*;public class AboutException {    public static void main(String[] a)        {          int i=1, j=0, k;         // k=i/j;        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");         }                  }}

这个程序运行的结果为:先弹出一个框,有OK?,然后选择是,否,或者取消。被0除.  / by zero

因为j=0,但是j是分母,所以出现异常,但是把会出现异常的代码放入了try中,当程序检测到出现了一个错误时会抛出一个异常对象。异常处理代码会捕获并处理这个错误。catch语句块中的代码用于处理错误。当异常发生时,程序控制流程由try语句块跳转到catch语句块。不管是否有异常发生,finally语句块中的语句始终保证被执行。如果没有提供合适的异常处理代码,JVM将会结束掉整个应用程序。

package 关于异常;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

package 关于异常;public class CatchWho2 {    public static void main(String[] args) {         try {                try {                     throw new ArrayIndexOutOfBoundsException();                 }                 catch(ArithmeticException 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

package 关于异常;public class EmbededFinally {public static void main(String args[]) {                int result;                try {                        System.out.println("in Level 1");                        try {                                System.out.println("in Level 2");  // result=100/0;  //Level 2                                try {                                        System.out.println("in Level 3");                                           result=100/0;  //Level 3                                }                                 catch (Exception e) {                                        System.out.println("Level 3:" + e.getClass().toString());                                }                                                finally {                                        System.out.println("In Level 3 finally");                                }                                               // result=100/0;  //Level 2                            }                        catch (Exception e) {                                System.out.println("Level 2:" + e.getClass().toString());                        }             finally {                                System.out.println("In Level 2 finally");                        }                         // result = 100 / 0;  //level 1                }                 catch (Exception e) {                        System.out.println("Level 1:" + e.getClass().toString());                }                finally {           .             System.out.println("In Level 1 finally");                }        }}

这个程序无法运行。

通过仔细查找我发现在代码的第69行多了一个点,若将这个点删去,运行结果为:

in Level 1

in Level 2
in Level 3
Level 3:class java.lang.ArithmeticException
In Level 3 finally
In Level 2 finally
In Level 1 finally

先执行try中的代码,分别是in Level 1、in Level 2、in Level 3,因为第一个try和第二个try不出现异常,所以就跳过了catch语句块,第三个try出现了异常,分母上出现了0,所以就要进行异常处理,运行catch语句,所以这一块运行的结果为:Level 3:class java.lang.ArithmeticException。然后依次执行finally语句块,所以之后的运行结果为:In Level 3 finally、In Level 2 finally、In Level 1 finally。

package 关于异常;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");                }        }}

这个程序运行的结果为:

in main

Exception is thrown in main

通过这个程序我发现finally语句不一定会被执行,因为在catch语句块中有一句System.exit(0);,使代码运行结束,所以finally语句块将不再执行。

转载于:https://www.cnblogs.com/zhaoxinhui/p/9941155.html

你可能感兴趣的文章
鹊桥会--秦观
查看>>
用 Java 技术创建 RESTful Web 服务/@Path@Produces@PathParam
查看>>
STM32 GPIO寄存器 IDR ODR BSRR BRR
查看>>
名企面试官精讲典型编程题之C++篇
查看>>
SublimeText3常用操作
查看>>
008---re正则模块
查看>>
onchange of select
查看>>
Mybatis 分页
查看>>
bmap
查看>>
设计模式的介绍
查看>>
It’s Not Too Late to Learn How to Code
查看>>
看看别人十年软件开发后学到了什么
查看>>
Python的平凡之路(19)
查看>>
数据分析---《Python for Data Analysis》学习笔记【03】
查看>>
ACM练习网站
查看>>
输入输出外挂(纯数字型)
查看>>
限制输出字数,超过的用...省略
查看>>
bnuoj25660 Two Famous Companies
查看>>
股票投资
查看>>
C# 启动另一个程序
查看>>