zoukankan      html  css  js  c++  java
  • java之异常处理

    AboutException的测试:

     1 package test;
     2 import javax.swing.*;
     3 
     4 class AboutException {
     5    public static void main(String[] a) 
     6    {
     7       @SuppressWarnings("unused")
     8     int i=1, j=0, k;
     9       //System.out.println("第一次直接对两个整数进行除法运算结果:");
    10       //k=i/j;
    11 
    12 
    13     try
    14     {
    15         System.out.println("第五次测试finally语句在没有报错的前提下以及提前退出语句下是否会被执行:");
    16          //System.out.println("第二次将两个整数放在try{}catch{}函数中进行除法运算结果:");
    17         k = i/j;    // Causes division-by-zero exception
    18         //throw new Exception("Hello.Exception!");
    19         //System.out.println("第三次测试finally语句在没有报错的情况下是否会被执行:");
    20         
    21     }
    22     
    23 
    24     
    25     catch (Exception e)
    26     {
    27         
    28             System.out.println(e.getMessage());
    29             System.exit(0);
    30         
    31     }
    32 
    33     
    34     finally
    35      {
    36              JOptionPane.showConfirmDialog(null,"OK");
    37      }
    38         
    39   }
    40 }

    1.第一次

     

    因为0不能作为分母而报错。

    第二次

     

    可以看到在try{}catch{}函数中虽然没有报错,但运算结果是将报错信息输出:/ by zero,

    可以看出try{} catch{}函数的作用,还可以看到错误的信息。

    第三次

    可以看到,在程序没有报错的情况下,finally任然会被执行。

    第四次

     

    可以看到,在报错的前提下,加入提前退出语句后只输出了错误信息,而没有执行finally语句。

    第五次

     

    可以看到,在没有报错的前提下,catch语句不能正常执行,所以提前退出语句不执行,finally语句得以正常执行。

    综上所述,有

    (1)Finally语句不管有没有异常发生,finally语句都得以运行,但是在遇到提前退出语句后不能被执行。

    (2)try{}catch{}函数能将错误信息抛出.

    ThrowDemo的测试:

     1 package test;
     2 public class ThrowDemo { 
     3     public static void main(String[] args) { 
     4 //        try {
     5             double data = 100 / 0.0;
     6             System.out.println("浮点数除以零:" + data); 
     7 //            if(String.valueOf(data).equals("Infinity"))
     8 //            { 
     9 //                System.out.println("In Here" ); 
    10 //                throw new ArithmeticException("除零异常");
    11 //            }
    12 //        } 
    13 //        catch(ArithmeticException e) { 
    14 //            System.out.println(e); 
    15 //        } 
    16     } 
    17 }
    18  

    1.第一次测试

    没有报错,但是如果将0.0改为0就会有如下结果:

    这个错误相比不是很陌生了,因为在上一个测试中我们遇到了无数次这个错误类型,就是因为分母为零,根据Java对double的定义运算,结果为无限。

    2.第二次测试

    系统抛出新的错误被截取,

    3.第三次测试

      

    错误被截取后正常输出。

    在这个测试里,第二个catch没有被编译执行。

    CatchWho测试:

     1 package test;
     2 public class CatchWho { 
     3     public static void main(String[] args) { 
     4         try { //2
     5                 try { //1
     6                     throw new ArrayIndexOutOfBoundsException(); 
     7                 } 
     8                 catch(ArrayIndexOutOfBoundsException e) { 
     9                        System.out.println(  "ArrayIndexOutOfBoundsException" +  "/内层try-catch"); 
    10                 }
    11  
    12             throw new ArithmeticException(); //扔出新的错误
    13         } 
    14         catch(ArithmeticException e) { 
    15             System.out.println("发生ArithmeticException"); 
    16         } 
    17         catch(ArrayIndexOutOfBoundsException e) { //没有输出,因为前面有一个catch将错误捕捉,这个就不会被执行了
    18            System.out.println(  "ArrayIndexOutOfBoundsException" + "/外层try-catch"); 
    19         } 
    20     } 
    21 }

    测试结果

     抛出错误类型。

    CatchWho2测试:

     1 package test;
     2 public class CatchWho2 { 
     3     public static void main(String[] args) { 
     4         try {
     5                 try { //第一次扔出错误
     6                     throw new ArrayIndexOutOfBoundsException(); 
     7                 } 
     8                 catch(ArithmeticException e) {//截取错误,但没有输出
     9                     System.out.println( "ArrayIndexOutOfBoundsException" + "/内层try-catch"); 
    10                 }
    11             throw new ArithmeticException(); //第二次扔出错误
    12         } 
    13         catch(ArithmeticException e) { //不是正确的错误类型,错误类型不匹配,不输出
    14             System.out.println("发生ArithmeticException"); 
    15         } 
    16         catch(ArrayIndexOutOfBoundsException e) { //截取错误类型
    17             System.out.println( "ArrayIndexOutOfBoundsException" + "/外层try-catch"); 
    18         } 
    19     } 
    20 }

    EmbededFinally测试;

     1 package test;
     2 public class EmbededFinally {
     3 
     4     
     5     public static void main(String args[]) {
     6         
     7         int result;
     8         
     9         try {
    10             //result=100/0;
    11             System.out.println("in Level 1");
    12 
    13            
    14              try {
    15                  result=100/0;
    16                 System.out.println("in Level 2");
    17   // result=100/0;  //Level 2
    18                
    19                  try {
    20                    
    21                      System.out.println("in Level 3");
    22                       
    23                      result=100/0;  //Level 3
    24                 
    25                 } 
    26                 
    27                 catch (Exception e) {
    28                     
    29                     System.out.println("Level 3:" + e.getClass().toString());
    30                 
    31                 }
    32                 
    33                 
    34                 finally {
    35                     
    36                     System.out.println("In Level 3 finally");
    37                 
    38                 }
    39                 
    40                
    41                 // result=100/0;  //Level 2
    42 
    43             
    44                 }
    45             
    46             catch (Exception e) {
    47                
    48                  System.out.println("Level 2:" + e.getClass().toString());
    49            
    50              }
    51              finally {
    52                 
    53                 System.out.println("In Level 2 finally");
    54            
    55              }
    56              
    57             // result = 100 / 0;  //level 1
    58         
    59         } 
    60         
    61         catch (Exception e) {
    62             
    63             System.out.println("Level 1:" + e.getClass().toString());
    64         
    65         }
    66         
    67         finally {
    68            
    69              System.out.println("In Level 1 finally");
    70         
    71         }
    72     
    73     }
    74 
    75 }

    测试结果:

     总结:

    当有多层嵌套的finally时,异常在不同的层次抛出,在不同的位置抛出,可能会导致不同的finally语句块执行顺序。

  • 相关阅读:
    洛谷P1357 Solution
    洛谷P3469 Solution
    洛谷P2617 Solution
    CF818F Solution
    CF802K Solution
    CF519E Solution
    在代码中改变log的级别
    Java非对称加密解密
    mvn test 远程调试
    rsyn实现服务器源码同步
  • 原文地址:https://www.cnblogs.com/msdog/p/9943602.html
Copyright © 2011-2022 走看看