zoukankan      html  css  js  c++  java
  • JAVA异常详解(RuntimeExecption,Exception)

    1)关于运行时异常(RuntimeExecption):运行时异常是一个超类,当java虚拟机正常时一定抛出;运行时异常可以不用捕捉;空异常是一种运行时异常。

    2)一个合理的应用程序不应该(没必要)捕捉运行时也常。

    3)在java程序运行时,常会出现一些非正常现象,根据其性质可以分为错误和异常。java程序中,所有的抛出(throw)的异常都必须从Throwable派生而来。

    4)类Throwabel有两个直接的子类:Error和Exception。

    5)常见的错误,如死循环、内存泄漏等,这种情况下,程序运行时本身无法解决,只能通过其他程序干预。java对应的类位Error类。Error类对象由java虚拟机生成并抛弃(java程序通常不对这类异常进行处理)。

    6)以下情况可以引发异常,如下标越界、内存溢出、除数为零等,这种情况下,程序本身可以解决,由异常代码调整程序运行方向,时程序仍可以继续运行,直到正常结束。

    7)异常对应的类为Exception类。它有各种子类分别对应不同类型的异常。

    8)java编译器要求程序必须捕获或者声明所有的非运行时异常,但对异常可以不做处理。

    9)其中RuntimeException代表运行时由java虚拟机生成的异常,原因时编译错误。其他则为非运行时异常,原因是程序碰到了意外情况,如输入异常IOException等。

    10)throw关键字用于方法体内部,用来抛出一个Throwable类型的异常。如果抛出了检查异常,则还应该在头部声明方法可能抛出的异常类型。该方法的调用者也必须检查处理抛出的异常。如果所有的方法都层层上抛获取的异常,最中JVM会进行处理,处理的方式为:打印异常信息和堆栈信息。如果抛出的异常时Eroor或RuntimeException,则该方法的调用者可选择处理该异常。

    11)

     1 public class ExcepionDemo02 {
     2 
     3     public static void main(String[] args) {
     4         System.out.println(",,,,,,计算开始。。。");
     5         int i = 10;
     6         int j = 0;
     7         try{
     8             int temp = i/j;
     9             System.out.println("两个数字相除" + temp);
    10             System.out.println(",,,,,,,,,。。");
    11         }catch(ArithmeticException e){
    12             System.out.println(",,,出现了异常。。");
    13         }
    14         System.out.println(",,,,计算结束。。。");
    15     }
    16 }

    输出结果为:

    ,,,,,,计算开始。。。
    ,,,出现了异常。。
    ,,,,计算结束。。。

    12)改变上边的catch:

     1 package exception01;
     2 
     3 public class ExceptionDemo03 {
     4 
     5     public static void main(String[] args) throws Exception {
     6         System.out.println(",,,,,,计算开始。。。");
     7         int i = 10;
     8         int j = 0;
     9         try{
    10             int temp = i/j;
    11             System.out.println("两个数字相除" + temp);
    12             System.out.println(",,,,,,,,,。。");
    13         }catch(Exception e){
    14             throw e;
    15             
    16         }
    17         System.out.println(",,,,计算结束。。。");
    18     }
    19 
    20 }

    输出结果为:

    Exception in thread "main" java.lang.ArithmeticException: / by zero
    at exception01.ExceptionDemo03.main(ExceptionDemo03.java:10)
    ,,,,,,计算开始。。。

    13)如果去掉try……catch语句

     1 package exception01;
     2 
     3 public class ExceptionDemo04 {
     4 
     5     public static void main(String[] args) throws Exception {
     6         System.out.println(",,,,,,计算开始。。。");
     7         int i = 10;
     8         int j = 0;
     9         
    10             int temp = i/j;
    11             System.out.println("两个数字相除" + temp);
    12             System.out.println(",,,,,,,,,。。");
    13         
    14             
    15         
    16         System.out.println(",,,,计算结束。。。");
    17     }
    18 }

    输出结果为:

    ,,,,,,计算开始。。。
    Exception in thread "main" java.lang.ArithmeticException: / by zero
    at exception01.ExceptionDemo04.main(ExceptionDemo04.java:10)

    14)throws关键字用于方法体外部的方法的声明部分,用来声明方法可能会抛出某些异常。仅当抛出了检查异常,该方法的调用者才必须处理或者重新抛出该异常。当方法的调用者无力处理该异常的时候,应该继续抛出。

    15)catch语句表示会出现的某种异常,而且希望能够处理该异常。所以在catch语句中就应该尽量指定异常类型,也可以实用多个catch,用于分别处理不同的异常。

    16)如果一个函数内部,它可能抛出了一种类型的异常,但该函数内部又不想用catch处理这种异常,此时,它就必须(强制性)使用throws关键字来显式地声明该函数可能会向外部抛出一个异常,以便该函数的调用者知晓并能够及时处理这种类型的异常。

    17)在JAVVA异常处理中,通常由两类异常,其一,就是通过throw语句,程序员在代码中人为抛出的异常,此种异常称为checked exception;另外一个时系统运行时异常(runtime exception),例如被零除等,对于这类异常,程序员完全可以避免它,只要我们写代码时足够小心。因此,为了彻底解决这种隐患,提高程序的可靠性,(不至于因为编码时考虑不周或者一个小疏忽导致系统运行时崩溃),使用RuntimeException异常就是为了实现这样的功能。

    18)RuntimeException也可以被程序员显示地抛出,而且为了程序的可靠性,对一些可能出现“运行时异常”的代码区域,程序员最好能够及时地处理这些意外的异常,即通过catch(RuntimeException)或catch(Exception)来捕获它们。

  • 相关阅读:
    隔离模式-常用的架构设计原则
    代理模式-常用的架构设计原则
    重试模式-常用的架构设计原则
    断路器模式-常用的架构设计原则
    磁盘IOPS(每秒读写次数)的计算方法与测量
    Spring深入浅出(七),自动装配,byName/byType
    Spring深入浅出(六),依赖注入,注入集合(含注入 Bean 引用)
    Spring深入浅出(五),依赖注入,构造函数/设值/注入内部Bean
    Spring深入浅出(四),Spring Bean定义继承
    【算法】算法的艺术(四)
  • 原文地址:https://www.cnblogs.com/XuGuobao/p/7231161.html
Copyright © 2011-2022 走看看