• Java异常体系


    一、异常体系

      使用Java编程过程中,从编译时到运行时都可能会“出错”。这些出错信息我们一般通过异常处理或抛出异常进行解决。首先这些出错中包含异常Exception错误Error。两者存在本质上的区别,异常是出现特殊情况,可以避免。错误是不可避免的,常常引起程序中断或终止。 

      异常发生的原因有很多,通常包含以下几大类:

    • 用户输入了非法数据。
    • 要打开的文件不存在。  

      而大多数错误与代码编写者执行的操作无关,而表示代码运行时 JVM(Java 虚拟机)出现的问题。例如,当JVM内存溢出时,将出现 OutOfMemoryError。

      Throwable是 Java 语言中所有错误或异常的超类。只有当对象是此类(或其子类之一)的实例时,才能通过 Java 虚拟机或者 Java throw 语句抛出。类似地,只有此类或其子类之一才可以是 catch 子句中的参数类型。Throwable 包含了其线程创建时线程执行堆栈的快照。它还包含了给出有关错误更多信息的消息字符串。最后,它还可以包含 cause(原因):另一个导致此 throwable 抛出的 throwable。此 cause 设施在 1.4 版本中首次出现。它也称为异常链 设施,因为 cause 自身也会有 cause,依此类推,就形成了异常链,每个异常都是由另一个异常引起的。

      方法

      

    二、Error

      ErrorThrowable 的子类,用于指示合理的应用程序不应该试图捕获的严重问题。大多数这样的错误都是异常条件。虽然 ThreadDeath 错误是一个“正规”的条件,但它也是 Error 的子类,因为大多数应用程序都不应该试图捕获它。

      在执行该方法期间,无需在其 throws 子句中声明可能抛出但是未能捕获的 Error 的任何子类,因为这些错误可能是再也不会发生的异常条件。

    三、Exception

      所有的异常类是从 java.lang.Exception 类继承的子类。Java 程序通常不捕获错误。错误一般发生在严重故障时,它们在Java程序处理的范畴之外。异常类有两个主要的子类:IOException 类和 RuntimeException 类。主要分为检查性异常和非检查性异常。

      常见的非检查性异常

      

      常见的检查性异常

      

    四、捕获异常

      1、try...catch关键字

      使用 try 和 catch 关键字可以捕获异常。try/catch 代码块放在异常可能发生的地方。

      try/catch代码块中的代码称为保护代码,使用 try/catch 的语法如下:

    try
    {
       // 程序代码
    }catch(ExceptionName e1)
    {
       //Catch 块
    }

      Catch 语句包含要捕获异常类型的声明。当保护代码块中发生一个异常时,try 后面的 catch 块就会被检查。如果发生的异常包含在 catch 块中,异常会被传递到该 catch 块,这和传递一个参数到方法是一样。

      一个 try 代码块后面跟随多个 catch 代码块的情况就叫多重捕获

      多重捕获块的语法如下所示:

    try{
       // 程序代码
    }catch(异常类型1 异常的变量名1){
      // 程序代码
    }catch(异常类型2 异常的变量名2){
      // 程序代码
    }catch(异常类型2 异常的变量名2){
      // 程序代码
    }

      2、throws/throw 关键字

      如果一个方法没有捕获一个检查性异常,那么该方法必须使用 throws 关键字来声明。throws 关键字放在方法签名的尾部。也可以使用 throw 关键字抛出一个异常,无论它是新实例化的还是刚捕获到的。

      下面方法的声明抛出一个 RemoteException 异常:

    import java.io.*;
    public class className
    {
      public void deposit(double amount) throws RemoteException
      {
        // Method implementation
        throw new RemoteException();
      }
      //Remainder of class definition
    }

      一个方法可以声明抛出多个异常,多个异常之间用逗号隔开。 

      3、finally关键字

      finally 关键字用来创建在 try 代码块后面执行的代码块。无论是否发生异常,finally 代码块中的代码总会被执行。在 finally 代码块中,可以运行清理类型等收尾善后性质的语句。

      finally 代码块出现在 catch 代码块最后,语法如下:

    try{
      // 程序代码
    }catch(异常类型1 异常的变量名1){
      // 程序代码
    }catch(异常类型2 异常的变量名2){
      // 程序代码
    }finally{
      // 程序代码
    }

      4、自定义异常

      在 Java 中你可以自定义异常。编写自己的异常类时需要记住下面的几点。

    • 所有异常都必须是 Throwable 的子类。
    • 如果希望写一个检查性异常类,则需要继承 Exception 类。
    • 如果你想写一个运行时异常类,那么需要继承 RuntimeException 类。
    class MyException extends Exception{
    }

      参考地址:http://www.runoob.com/java/java-exceptions.html

  • 相关阅读:
    NOIP2017宝藏
    ARC114
    字符串乱记
    [SDOI2016]储能表
    quq
    口胡图论
    一双木棋 chess
    数论小记
    CF961G Partitions
    [HAOI2016]字符合并
  • 原文地址:https://www.cnblogs.com/fzz9/p/8980266.html
Copyright © 2020-2023  润新知