• 异常处理


    一,当有多个嵌套的try…catch…finally时,要特别注意finally的执行时机。
    请先阅读 EmbedFinally.java示例,再运行它,观察其输出并进行总结。
    特别注意:
    当有多层嵌套的finally时,异常在不同的层次抛出 ,在不同的位置抛出,可能会导致不同的finally语句块执行顺序。

     EmbedFinally.java

    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");
            
            }
        
        }
    
    }

    输出结果

     当条件生成时,错误将引发异常。这样也能使用户明白输入或者使用方法有误,并给予用户提示,也防止有不必要的麻烦和造成代码错误。

    二,辨析:finally语句块一定会执行吗? 请通过 SystemExitAndFinally.java示例程序回答上述问题

     SystemExitAndFinally.java

    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");
            
            }
        
        }
    
    
    }

    在测试运行实例AboutException.java,出现Exception in thread "main" java.lang.ArithmeticException:/by........,
    double d1=100,d2=0,result; result=d1/d2; System.out.println("浮点数除以零:" + data);中却不出现异常,而出现Infinity。

    是因为其中没有用到try{} catch{} finally{},没有用到异常捕获语句,所以没有出现异常,而这样最容易出现致命错误,且不易被发现。

  • 相关阅读:
    C#编写ActiveX在WEB中应用
    Asp.net中Array的用法
    CAB打包方法
    C#获取文件路径的几种方法
    使用MakeCAB.exe命令创建CAB文件
    VS2005 工具里添加“OLE/COM 对象查看器”命令
    【转载】ASP.NET MVC中Controller与View之间的数据传递总结
    F如何配置外向交货单的定价过程
    解决 局域网XP无权限访问的问题 (转)
    U盘装XP系统(含截图,2012最新原创超简单方法)
  • 原文地址:https://www.cnblogs.com/shenaoyu/p/11782731.html
Copyright © 2020-2023  润新知