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


    ---- 作者:快乐随行 著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明原文作者及出处。 ----
  • 相关阅读:
    计算机网络
    二叉树
    队列
    百度脑图-离线版(支持Linux、Mac、Win)
    nested exception is java.lang.NoClassDefFoundError: javax/xml/soap/SOAPElement
    手写注解实现SpringMVC底层原理(虽简单却五脏俱全《注重思路》)
    java异常
    JVM相关
    redis相关总结
    mysql 数据库相关
  • 原文地址:https://www.cnblogs.com/jddreams/p/14281935.html
Copyright © 2011-2022 走看看