• 课堂动手动脑验证以及自定义异常类实现对异常处理——java异常类


    异常(exception):发生在程序执行期间,表明出现了一个非法运行的情况。许多JDK中的方法在检测到非法情况时,都会抛出一个异常对象。例如:数组越界和被0除。

    代码验证:

    package test;
    
    import javax.swing.*;
    
    class AboutException {
       public static void main(String[] a) 
       {
          int i=1, j=0, 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");
         }
            
      }
    }

    输出结果:

    当java程序中出现多try catch的情况时,一定要注意程序执行的先后顺序。

    多try catch的java异常处理代码一

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

    程序运行结果:

    多try catch的java异常处理代码二

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

    程序运行结果:

    当有多个try catch finally嵌套 时,要特别注意finally的执行时机。特别注意:当有多层嵌套的finally时,异常在不同的层次抛出,在不同的位置抛出,可能会导致不同的finally语句的执行顺序。再者,我们一般认为finally语句中的句子一定会被执行,这里的一定是相对而言的,并不是绝对的。例如以下程序代码的运行:

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

    运行结果:

    在这段java代码中finally语句块并没有执行。

    通过过异常的学习,自己尝试了自定义了一个异常类来处理异常,源码如下:

    package classtest;
    
    import java.util.Scanner;
    
    class Myexception extends Exception {
        public Myexception(String message) {
            super(message);
        }
    }
    
    public class Mytest {
    
        public static void main(String[] args) throws Exception{
            // TODO Auto-generated method stub
            try{
                function();
            }
            catch (Exception e) {
                System.out.println(e.getMessage());
                System.out.println("main()函数运行时出现异常");
            }
            finally {
                System.out.println("main()函数运行完毕");
            }
        }
    
        public static int judge(String str) {
            int c = 0;
            String regex = "[0-9]+";
            String regex1="[-][0-9]+";
            boolean d = str.matches(regex);
            boolean e = str.matches(regex1);
            if (d == false) {
                c = 1;
                if (e == true) {
                    c = 0;
                }
            }
            return c;
        }
    
        public static void function() {
            try {
                System.out.println("请输入一个正整数:");
                Scanner input = new Scanner(System.in);
                String a = input.next();
                int temp = judge(a);
                if (temp == 1) {
                    throw new Myexception("不能输入非法字符");
                } else {
                    int num = Integer.parseInt(a);
                    if (num < 0)
                        throw new Myexception("输入不能为负数");
                    else if (num == 0) {
                        throw new Myexception("正整数不包括0");
                    }
                }
    
            } catch (Myexception f) {
                System.out.println(f.getMessage());
            } catch (Exception e) {
                System.out.println(e.getMessage());
                System.out.println("function()函数运行时出现异常");
            }
           finally {
               System.out.println("function()函数已运行完毕,请指示下一步动作");
           }
            
        }
    }

  • 相关阅读:
    hive从入门到放弃(一)——初识hive
    LeetCode 2040. Kth Smallest Product of Two Sorted Arrays
    LeetCode weekly contest 278 (amazon pay)
    LeetCode Weekly Contest 281
    《前端运维》一、Linux基础06Shell流程控制
    《前端运维》一、Linux基础05Shell运算符
    一比一还原axios源码(二)—— 请求响应处理
    一比一还原axios源码(八)—— 其他功能
    一比一还原axios源码(三)—— 错误处理
    《前端运维》一、Linux基础04Shell变量
  • 原文地址:https://www.cnblogs.com/weixiao1717/p/11780111.html
Copyright © 2020-2023  润新知