zoukankan      html  css  js  c++  java
  • JAVA 中的异常(3)- 异常的处理方式二:throw/throws

    1. throw 用法

    throw 是用于抛出异常,将这个异常对象传递到调用者处,并结束当前方法的执行

    public static void main(String[] args) {
    
      try {
        int i = 10 / 0;
        System.out.println("i = " + i);
      }catch(ArithmeticException e) { 
        // 抛出异常,传递自定义异常信息提示
        // 默认抛出给 JVM 处理打印异常详细信息    
        throw new ArithmeticException("除数不能为0");
      } 
      
    }
    

    throws抛出异常的规则:

    • 1)如果是不可查异常(unchecked exception),即Error、RuntimeException或它们的子类,那么可以不使用throws关键字来声明要抛出的异常,编译仍能顺利通过,但在运行时会被系统抛出。

    • 2)必须声明方法可抛出的任何可查异常(checked exception)。即如果一个方法可能出现受可查异常,要么用try-catch语句捕获,要么用throws子句声明将它抛出,否则会导致编译错误

    • 3)仅当抛出了异常,该方法的调用者才必须处理或者重新抛出该异常。当方法的调用者无力处理该异常的时候,应该继续抛出,而不是囫囵吞枣。

    • 4)调用方法必须遵循任何可查异常的处理和声明规则。若覆盖一个方法,则不能声明与覆盖方法不同的异常。声明的任何异常必须是被覆盖方法所声明异常的同类或子类。

    2. throws 用法

    throws运用于方法声明之上,用于表示当前方法不处理异常,而是提醒该方法的调用者来处理异常(抛出异常)。

    public class ExceptionDemo {
    
        public static void main(String[] args) {
            demo();
        }
        
        public static void demo() throws ArrayIndexOutOfBoundsException{
            try {
                int[] arr = {1,2,3};
                int i = arr[3];
                System.out.println("i = " + i);
            }catch(ArrayIndexOutOfBoundsException e) { 
               System.out.println(e.toString());
            } 
        }
    }
    

    throws子句放在方法参数列表的右括号之后,一个方法可以声明抛出多个异常,多个异常之间用逗号隔开

    public class Main {
        public static void readChar() throws IOException,RemoteException {
            int input = System.in.read(); 
        }
    }
    

    3. 关键字throw和throws的区别

    throw:用在方法内,后面跟异常对象,用于抛出异常对象,相当于new一个异常对象。在方法内 出现某种情况,使程序不能继续运行,需要进行跳转时,用throw把异常对象抛出

    throws:用在方法上,后面跟异常的类名,用于声明异常,标识方法会暴露出的异常。在定义方法时,需要把会出现的问题暴露出来让调用者去处理,就用throws在方法上标识出来。

    4. 选择用try-catch-finally还是throw/throws

    如果父类中被重写的方法没有throws方式处理异常,则子类重写的方法也不能使用throws,意味着如果子类重写的方法中有异常,必须使用try-catch-finally方式处理。

    执行的方法a中,先后又调用了另外的几个方法,这几个方法是递进关系执行的。我们建议这几个方法使用throws的方式进行处理。而执行的方法a可以考虑使用try-catch-finally方式进行处理。


    作者:快乐随行

    https://www.cnblogs.com/jddreams/p/14281935.html


    ---- 作者:快乐随行 著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明原文作者及出处。 ----
  • 相关阅读:
    scrapy中selenium的应用
    Django的锁和事务
    redis
    【leetcode】187. Repeated DNA Sequences
    【leetcode】688. Knight Probability in Chessboard
    【leetcode】576. Out of Boundary Paths
    【leetcode】947. Most Stones Removed with Same Row or Column
    【leetcode】948. Bag of Tokens
    【leetcode】946. Validate Stack Sequences
    【leetcode】945. Minimum Increment to Make Array Unique
  • 原文地址:https://www.cnblogs.com/jddreams/p/14281935.html
Copyright © 2011-2022 走看看