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

    1.

    import javax.swing.*;
    class AboutException {
       public static void main(String[] a) 
       {
          double i=1, j=0, k;
          k=i/j;
    
          System.out.print(k);
        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");
         }
    
      }
    }

     运行结果:

    Hello.Exception!

    总结:Java 中所有可捕获的异常都派生自 Exception 类。

    把可能会发生错误的代码放进try语句块中。 当程序检测到出现了一个错误时会抛出一个异常对象。

    异常处理代码会捕获并处理这个错误。 catch语句块中的代码用于处理错误。

    当异常发生时,程序控制流程由try语句块跳转到catch语句块。

    不管是否有异常发生,finally语句块中的语句始终保证被执行。

    如果没有提供合适的异常处理代码,JVM将会结束掉整个应用程序。

    2,

    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

    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

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

    运行结果:

    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

    改变 result=100/0; 位置

    运行结果:

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

    总结:

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

    当程序中出现异常时,JVM会依据方法调用顺序依次查找有关的错误处理程序。

    3.

    public class SystemExitAndFinally {    
        public static void main(String[] args)
        {
            
            try{         
                System.out.println("in main");            
                throw new Exception("Exception is thrown in main");     
            }        
            catch(Exception e)
                {            
                System.out.println(e.getMessage());//getmessage()输出错误信息,可直接用对象调用。            
                //System.exit(0);        
            }
            
            finally        
            {            
                System.out.println("in finally");        
            }    
        }
    }

    运行结果:

    in main
    Exception is thrown in main

    总结:不管是否有异常发生,finally语句块中的语句始终保证被执行。特殊情况,在catch中有“System.exit(0);”执行此语句后,就已经结束程序,故不会运行finally语句。

  • 相关阅读:
    Centos 7 zabbix 实战应用
    Centos7 Zabbix添加主机、图形、触发器
    Centos7 Zabbix监控部署
    Centos7 Ntp 时间服务器
    Linux 150命令之查看文件及内容处理命令 cat tac less head tail cut
    Kickstart 安装centos7
    Centos7与Centos6的区别
    Linux 150命令之 文件和目录操作命令 chattr lsattr find
    Linux 发展史与vm安装linux centos 6.9
    Linux介绍
  • 原文地址:https://www.cnblogs.com/zhukaile/p/13887387.html
Copyright © 2011-2022 走看看