• 异常


    Java中有三种异常:

    • 错误: 错误不是异常,而是脱离程序员控制的问题。错误在代码中通常被忽略。例如,当栈溢出时,一个错误就发生了,它们在编译也检查不到的。
    • 检查性异常:最具代表的检查性异常是用户错误或问题引起的异常,这是程序员无法预见的。例如要打开一个不存在文件时,一个异常就发生了,这些异常在编译时不能被简单地忽略。        检查性异常就是我们的工具会指出这个地方可能有错误。
    • 运行时异常: 运行时异常是可能被程序员避免的异常。与检查性异常相反,运行时异常可以在编译时被忽略。
    package com.shiro.springbootshiro.exception;
    
    /**
     * 作用:异常的学习
     */
    public class Exception1 {
        public static void main(String[] args) {
            //int i=1/0;
            //System.out.println(i);  //抛出ArithmeticException  它的父类是:RuntimeException 是运行时异常
            int[] a = {3,4,2,1};
            try {
                System.out.println(a[4]);
            }catch (ArrayIndexOutOfBoundsException  e){
                //捕获到了下标越界异常。
                System.out.println("捕获到了异常");
                e.printStackTrace();
            }
    
        }
    }

    throws:

    package com.shiro.springbootshiro.exception;
    
    /**
     * 作用:异常的学习
     */
    public class Exception1 {
        public static void main(String[] args) {
            Exception1.exception1();
        }
    
        public static void exception1() throws ArrayIndexOutOfBoundsException{
            int[] a={1,2,3};
            System.out.println(a[3]);
        }
    }

    输出:

    throws是这个方法有可能会抛出异常。用来提高程序的健壮性。

    我们看下这个例子:

    package com.shiro.springbootshiro.exception;
    
    /**
     * 作用:异常的学习
     */
    public class Exception1 {
        public static void main(String[] args) {
    
            try{
                int i = 100/ 0;
                System.out.print(i);
            }catch(Exception e){
                System.out.print(1);
                e.printStackTrace();
               // throw new  RuntimeException();
            }finally{
                System.out.print(2);
            }
            System.out.print(3);
        }
        }

    输出的结果:

     //e.printStackTrace();
               throw new  RuntimeException();

    输出:

    首先执行try,遇到算术异常,抛出,执行catch,打印1,然后抛出RuntimeException,缓存异常,执行finally,打印2,然后抛出RuntimeException。

    try catch是直接处理,处理完成之后程序继续往下执行,throw则是将异常抛给它的上一级处理,程序便不往下执行了。

    自定义异常:

    如果是一个检查性异常,就继承Exception

    如果是一个运行时异常,就继承RuntimeException .

    为什么要自定义异常呢。假如我们的业务中我们认为的是异常,但是Java中没有,这个时候就要我们自己来编写异常

    假如我们认为:中性是异常。

    package com.shiro.springbootshiro.exception;
    
    /**
     * 作用:自定义异常
     */
    public class MyException extends Exception {
    
        public MyException(String message) {
                     super(message);
                 }
    
    }
    package com.shiro.springbootshiro.exception;
    
    /**
     * 作用:异常的学习
     */
    public class Exception1 {
        public static void main(String[] args) throws MyException {
            String[] sexs = {"男性","女性","中性"};
                     for(int i = 0; i < sexs.length; i++){
                              if("中性".equals(sexs[i])){
                                      throw new MyException("你全家都是中性!");
                                  }else{
                                      System.out.println(sexs[i]);
                                  }
                    }
        }
        }

    输出:

    什么时候不知晓finally

    package com.shiro.springbootshiro.exception;
    
    /**
     * 作用:异常的学习
     */
    public class Exception1 {
        public static void main(String[] args) throws MyException {
            try {
                int i = 1 / 0;
            } catch (Exception e) {
                e.printStackTrace();
                System.exit(0);
                //return;
            }finally {
                System.out.println("执行了finally");
            }
    
        }
        }

    如果是return的话,还是会执行finally里的代码,只有当退出JVM的时候,才不会执行。

  • 相关阅读:
    PHP全栈学习笔记3
    PHP全栈学习笔记3
    JavaScript基础系列
    JavaScript基础系列
    Java语言
    Java语言
    HTML基础系列
    HTML基础系列
    PHP全栈从入门到精通1
    PHP全栈从入门到精通1
  • 原文地址:https://www.cnblogs.com/bulrush/p/10732963.html
Copyright © 2020-2023  润新知