zoukankan      html  css  js  c++  java
  • 动手动脑总结

    1.请阅读并运行AboutException.java示例

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

    运行结果:

    2.多层的异常捕获-1

    阅读以下代码(CatchWho.java),写出程序运行结果。

    package jiang;
    
    
    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();该异常被第16行的catch语句捕获。

    多层的异常捕获-2

    写出CatchWho2.java程序运行的结果

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

    运行结果:

    分析:程序运行到第5行时抛出ArrayIndexOutOfBoundsException();该异常被第15行的catch语句捕获

    总结:

    (1)异常捕获时可以有多个catch语句块,每个代码块捕获一种异常。

    (2)在某个try块后有两个不同的catch 块捕获两个相同类型的异常是语法错误。

    (3)使用catch语句,只能捕获Exception类及其子类的对象。因此,一个捕获Exception对象的catch语句块可以捕获所有“可捕获”的异常。

    (4)将catch(Exception e)放在别的catch块前面会使这些catch块都不执行,因此Java不会编译这个程序。

    3.当有多个嵌套的try...catch....finally时,要特别注意finally的执行时机,请先阅读EmbedFinally.java示例,再运行它,观察其输出再进行总结。

    package jiang;
    
    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时,异常在不同层次抛出,在不同的位置抛出,可能导致不同的finally语句执行顺序。

    4.finally语句块一定会执行吗?请通过SystemExitAndFinally.java示例程序回答上述问题。

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

    运行结果:

     分析总结:

    (1)try语句没有被执行到,如在try语句之前return就返回了,这样finally语句就不会执行。这也说明了finally语句被执行的必要而非充分条件是:相应的try语句一定被执行到。

    (2)在try块|catch块中有System.exit(0);这样的语句。System.exit(0)是终止Java虚拟机JVM的,连JVM都停止了,所有都结束了,当然finally语句也不会被执行到。

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

    }

  • 相关阅读:
    idea html,js修改不用重启进程
    opencv rtsp 人脸识别
    The system is running in low-graphics mode UB16
    阿里云ecs 增加虚拟网卡
    rtsp
    mysql5.7报err 1055错误 sql_mode=only_full_group_by
    python 生成requirements.txt
    Linux 保护文件 不给修改
    logback logback.xml常用配置详解(三) <filter>
    logback 常用配置详解(二) <appender>
  • 原文地址:https://www.cnblogs.com/yongyuandishen/p/13890998.html
Copyright © 2011-2022 走看看