• 多太与异常动手动脑


    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");
            
            }
        
        }
    
    }
     请先阅读 EmbedFinally.java示例,再运行它,观察其输出并进行总结。
    Level 3:class java.lang.ArithmeticException
    In Level 3 finally
    In Level 2 finally
    In Level 1 finally
    当有多层嵌套的finally时,异常在不同的层次抛出 ,在不同的位置抛出,可能会导致不同的finally语句块执行顺序。
    辨析:finally语句块一定会执行吗?
    请通过 SystemExitAndFinally.java示例程序回答上述问题
    package d;
    
    public class D2 {
         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不一定必须执行,当try语句执执行且无异常室。

    如何跟踪异常的传播路径

    当程序中出现异常时,JVM会依据方法调用顺序依次查找有关的错误处理程序。
    可使用printStackTrace 和 getMessage方法了解异常发生的情况:
    printStackTrace:打印方法调用堆栈。
    每个Throwable类的对象都有一个getMessage方法,它返回一个字串,这个字串是在Exception构造函数中传入的,通常让这一字串包含特定异常的相关信息。

    public class D2 {
          public static void main( String args[] )
           {
              try {
                 method1();
              }
              catch ( Exception e ) {
                 System.err.println( e.getMessage() + "
    " );
                 e.printStackTrace();
              }
           }
    
           public static void method1() throws Exception
           {
              method2();
           }
    
           public static void method2() throws Exception
           {
              method3();
           }
    
           public static void method3() throws Exception
           {
              throw new Exception( "Exception thrown in method3" );
           }
    }

    at d.D2.method3(D2.java:27)
     at d.D2.method2(D2.java:22)
     at d.D2.method1(D2.java:17)
     at d.D2.main(D2.java:7)

    (二)

    Ø阅读并运行AboutException.java示例,然后通过后面的几PPT了解Java中实现异常处理的基础知识
     
    import javax.swing.*;
    
    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");
         }
            
      }
    }
    Ø把可能会发生错误的代码放进try语句块中。
    Ø当程序检测到出现了一个错误时会抛出一个异常对象。异常处理代码会捕获并处理这个错误。
    catch语句块中的代码用于处理错误。
    Ø当异常发生时,程序控制流程由try语句块跳转到catch语句块。
    Ø不管是否有异常发生,finally语句块中的语句始终保证被执行。
     请先阅读 EmbedFinally.java示例,再运行它,观察其输出并进行总结。
     
  • 相关阅读:
    Corosync+Pacemaker+DRBD+Mysql高可用HA配置
    高可用集群corosync+pacemaker之crmsh使用
    nfs+DRBD+corosync+pacemaker 实现高可用(ha)的nfs集群
    nginx匹配
    2011年的最后一篇
    Python自然语言处理学习笔记(66):7.7 小结
    Python自然语言处理学习笔记(65):7.6 关系抽取
    Python自然语言处理学习笔记(64): 7.5 命名实体识别
    Python自然语言处理学习笔记(67):7.8 扩展阅读
    Python自然语言处理学习笔记(68):7.9 练习
  • 原文地址:https://www.cnblogs.com/gdp176119/p/4961905.html
Copyright © 2020-2023  润新知