• throws 与 throw


    /*
    * 有些时候,我们是可以对异常进行处理的,但是又有些时候,我们根本就没有权限去处理某个异常。
    * 或者说,我处理不了,我就不处理了。
    * 为了解决出错问题,Java针对这种情况,就提供了另一种处理方案:抛出。
    *
    * 格式:
    *    throws 异常类名
    *    注意:这个格式必须跟在方法的括号后面。
    *
    * 注意:
    *    尽量不要在main方法上抛出异常(因为这样就没有意义了)。
    *    但是我讲课为了方便我就这样做了(将来实际开发中是弹出页面)。
    *
    * 小结:
    *    编译期异常的抛出,将来调用者必须处理。
    *    运行期异常的抛出,将来调用可以不用处理,也可以处理(像处理编译期异常那样处理)。。
    */

    示例代码如下:

     1 package cn.itcast_05;
     2 
     3 import java.text.ParseException;
     4 import java.text.SimpleDateFormat;
     5 import java.util.Date;
     6 
     7 /*
     8  * 有些时候,我们是可以对异常进行处理的,但是又有些时候,我们根本就没有权限去处理某个异常。
     9  * 或者说,我处理不了,我就不处理了。
    10  * 为了解决出错问题,Java针对这种情况,就提供了另一种处理方案:抛出。
    11  * 
    12  * 格式:
    13  *         throws 异常类名
    14  *         注意:这个格式必须跟在方法的括号后面。
    15  * 
    16  * 注意:
    17  *         尽量不要在main方法上抛出异常(因为这样就没有意义了)。
    18  *         但是我讲课为了方便我就这样做了(将来实际开发中是弹出页面)。
    19  * 
    20  * 小结:
    21  *         编译期异常的抛出,将来调用者必须处理。
    22  *         运行期异常的抛出,将来调用可以不用处理,也可以处理(像处理编译期异常那样处理)。。
    23  */
    24 public class ExceptionDemo {
    25     public static void main(String[] args) {
    26         System.out.println("今天天气很好");
    27         try {
    28             method(); // 调用者也可以继续再把异常抛出给main函数,即把异常抛给虚拟机了,虚拟机会进行异常默认处理,同时将程序停止运行,可是这个方案这不是我想要的!
    29         } catch (ParseException e) {
    30             e.printStackTrace();
    31         }
    32         System.out.println("但是就是不该有雾霾");
    33 
    34         method2(); // 运行期异常的抛出,将来调用可以不用处理,也可以处理(像处理编译期异常那样处理)。
    35     }
    36 
    37     // 运行期异常的抛出(其实运行期异常是不需要抛出的,但是为了演示我依然抛出来,尽管我抛出来了,你调用者可以处理也可以不处理)
    38     public static void method2() throws ArithmeticException {
    39         int a = 10;
    40         int b = 0;
    41         System.out.println(a / b);
    42     }
    43 
    44     // 编译期异常的抛出
    45     // 在方法声明上抛出,是为了告诉调用者,你注意了,调用这个方法时可能会有问题,又因为是编译期异常,所以调用者必须要处理,否则编译通不过。
    46     public static void method() throws ParseException {
    47         String s = "2014-11-20";
    48         SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 
    49         Date d = sdf.parse(s); // 编译期异常,可以不在方法上进行声明,直接用try...catch对该句进行处理;也可以在方法声明上抛出异常声明,让调用者去用try...catch进行处理。
    50         System.out.println(d);
    51     }
    52 }
    程序运行结果为:
    今天天气很好 java.text.ParseException: Unparseable date:
    "2014-11-20" at java.base/java.text.DateFormat.parse(DateFormat.java:388) at cn.itcast_05.ExceptionDemo.method(ExceptionDemo.java:49) at cn.itcast_05.ExceptionDemo.main(ExceptionDemo.java:28) 但是就是不该有雾霾 Exception in thread "main" java.lang.ArithmeticException: / by zero at cn.itcast_05.ExceptionDemo.method2(ExceptionDemo.java:41) at cn.itcast_05.ExceptionDemo.main(ExceptionDemo.java:34)

    /*
    * throw:如果在功能方法内部出现了异常情况,程序不能继续运行,需要进行跳转时,我们可以把该异常抛出,这个时候的抛出的是该异常的对象。
    *
    * throws和throw的区别(面试题)
      throws
        用在方法声明后面,跟的是异常类名,
        可以跟多个异常类名,用逗号隔开,
        表示抛出异常,由该方法的调用者来处理,
        throws表示出现异常的一种可能性,并不一定会发生这个异常。
      throw
        用在方法体内,跟的是异常对象名,
        只能抛出一个异常对象名,
        表示抛出异常,由方法体内的语句处理,
        throw则是抛出了异常,执行throw则一定抛出了某种异常。
    *
    */

    示例代码如下:

     1 package cn.itcast_06;
     2 
     3 /*
     4  * throw:如果在功能方法内部出现了异常情况,程序不能继续运行,需要进行跳转时,我们可以把该异常抛出,这个时候的抛出的是该异常的对象。
     5  * 
     6    throws和throw的区别(面试题)
     7       throws
     8           用在方法声明后面,跟的是异常类名,
     9           可以跟多个异常类名,用逗号隔开,
    10           表示抛出异常,由该方法的调用者来处理,
    11           throws表示出现异常的一种可能性,并不一定会发生这个异常。
    12       throw
    13           用在方法体内,跟的是异常对象名,
    14           只能抛出一个异常对象名,
    15           表示抛出异常,由方法体内的语句处理,
    16           throw则是抛出了异常,执行throw则一定抛出了某种异常。
    17  *
    18  */
    19 public class ExceptionDemo {
    20     public static void main(String[] args) {
    21         // method();  // 运行期异常,用throw抛出,我们没有做处理,则会使用JVM的异常默认处理机制:即将该异常进行处理,将该异常的名称、异常的信息和异常出现的位置打印在了控制台上,同时将程序停止运行。
    22                       // 运行期异常的抛出,将来调用可以不用处理,也可以处理(像处理编译期异常那样处理)
    23         try {
    24             method2(); // 编译期异常的抛出,将来调用者必须处理(前提是这个异常要在方法上声明抛出给调用者,如果你直接在方法里就处理,那跟调用者就没有关系了)。
    25         } catch (Exception e) {
    26             e.printStackTrace();
    27         }
    28         
    29         System.out.println("over");
    30     }
    31 
    32     // throw是在方法功能内部抛出异常的对象,若是运行期异常,一般不用在方法上进行声明(也可以声明哦,但不管你声不声明,作为调用者可以处理也可以不处理)
    33     public static void method() {
    34         int a = 10;
    35         int b = 0;
    36         if (b == 0) {
    37             throw new ArithmeticException(); // 运行期异常,使用JVM的一个默认的异常处理机制:即将该异常进行处理,将该异常的名称、异常的信息和异常出现的位置打印在了控制台上,同时将程序停止运行。
    38         } else {
    39             System.out.println(a / b);
    40         }
    41     }
    42     
    43     // throw是在方法功能内部抛出异常的对象,若是编译期异常,一般在方法上进行声明,交给调用者处理
    44     public static void method2() throws Exception {
    45         int a = 10;
    46         int b = 0;
    47         if (b == 0) {
    48             throw new Exception(); // 编译期异常,这是一条正常的语句,而该正常的语句出现了编译期异常,必须要处理否则编译就不通过。
    49         } else {                   // 可以不在方法上进行声明,直接用try...catch对该句进行处理;也可以在方法声明上抛出异常声明,让调用者去用try...catch进行处理。
    50             System.out.println(a / b);
    51         }
    52     }
    53 }
    程序运行结果为:
    java.lang.Exception at cn.itcast_06.ExceptionDemo.method2(ExceptionDemo.java:
    48) at cn.itcast_06.ExceptionDemo.main(ExceptionDemo.java:24) over
  • 相关阅读:
    HTMLParser使用简介
    用自定义注解验证一些方法
    struts框架从.jsp页面直接访问action
    Hibernate更新数据(不用update也可以)
    设计模式的模板方式应用
    实现观察者模式设计方案
    struts2中的使用BaseAction获取Session
    brew,gem,rvm 和 bundler软件包的管理工具
    oh my zsh命令
    Ruby Gem命令
  • 原文地址:https://www.cnblogs.com/chenmingjun/p/8684594.html
Copyright © 2020-2023  润新知