zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    Delphi公用函数单元
    Delphi XE5 for Android (十一)
    Delphi XE5 for Android (十)
    Delphi XE5 for Android (九)
    Delphi XE5 for Android (八)
    Delphi XE5 for Android (七)
    Delphi XE5 for Android (五)
    Delphi XE5 for Android (四)
    Delphi XE5 for Android (三)
    Delphi XE5 for Android (二)
  • 原文地址:https://www.cnblogs.com/chenmingjun/p/8684594.html
Copyright © 2011-2022 走看看