Java中的例外处理

时间:2020-02-23 14:34:09  来源:igfitidea点击:

什么例外?

  • Java Doc说:"一个例外是一个事件,在执行程序期间发生,这会破坏程序的正常流程。"
  • 术语"例外"是指"卓越条件",并且是改变正常程序流程的发生。
  • 一堆事情可能导致例外,包括硬件故障,资源疲惫和良好的旧错误。
  • 当在Java中发生异常事件时,据说例外将被"抛出"。
  • 负责执行关于异常的代码称为"异常处理程序",它"捕获"抛出异常。
  • 每个例外都将在运行时抛出。

throwable.

  • java.lang套餐中存在ruplable类。
  • Throwable是Java中所有异常类的超级类。
  • 它有两个直接子类,如异常,错误(当然每种异常类直接或者间接划分丢弃的群)。
  • 它有一些方法是根据申请要求打印例外详细信息。

例外

  • 例外是java.lang包中存在的类。
  • 此类没有它是自己的方法,它继承了来自ROLLABLE类的方法。
  • 此类的所有子类被视为已检查的异常(Runtimeexception除外和它的子类除外)。

runtimeexception.

  • runtimeexception是java.lang包中存在的类。
  • 它是异常类的子类。
  • 此类也没有自己的方法,它继承了来自克拉的类的方法。因为Throwable是间接超级runtimeexception的。
  • 此类的所有子类被视为未经检查的异常。

错误

  • 错误是java.lang包中存在的类。
  • 它是划分的小类。
  • 此类也没有自己的方法,它继承了来自克拉的类的方法。因为Throwable是间接超级runtimeexception的。
  • 此类的所有子类被视为未选中的错误。

检查例外

  • 如果一个类是直接或者间接类别的异常类的子类,并且不应该是RuntimeException类的子类,它是一个检查的异常。
  • 为什么要检查的名称,因为可以在编译时检测到这些异常。
  • 当然检查了在运行时抛出的异常,必须是Java代码需要在编译时声明或者处理它们,否则代码不编译。
  • 这些是由代码控制外部的意外条件引起的(例如,数据库向下,文件I/O错误,错误输入等)。
  • 这些以编程方式抛出。
  • 这些是可恢复的错误。
  • 例如,IOException是一个被检查的异常,它会在尝试打开该位置中不存在的文件时发生。
  • 我们可以通过将文件放在同一位置来恢复此异常。

ocajp检查的例外

当代码尝试参考不存在IoException的文件时,FileNotFoundException以编程方式抛出的文件,当读取或者写入文件时,不存在。
对于OCA考试,我们只需要知道这些是检查的例外情况。
还要记住,FilenotFoundException是IoException的一个子类,但如果考试会提醒你这个事实,如果它出现。
我们将在OCP考试中更详细地看到这两个例外。

未经检查的例外

  • 如果一个类是直接或者间接或者间接runtimeexception类的子类,则它是一个未经检查的异常。
  • 为什么名称取消选中,因为这些未在编译时检测到这些。因此,Java代码要求申报或者处理它们不是必需的。
  • 这些也在运行时抛出。
  • 这些被JVM抛出。
  • 这些也是可恢复的错误。
  • 例如:当我们在参考变量上调用方法时,它为null导致nullpointerexception。
  • 我们可以从此异常中恢复,通过选中参考为null,或者在该引用的方法之前。

OCAJP未经检查的例外情况

arithmeticexception•当代码尝试划分为零时,它被JVM抛出。
例子 :

int b= 9;
 int c = b/0;

运行此代码导致以下输出:线程中的异常"main"java.lang.arithmeticexception:/by零

ArrayIndexoutofBoundSexception.

  • 当代码使用非法索引访问数组时,它被JVM抛出。
  • 例子 :
int[] a = new int[2]; 
    System.out.println(a[-1])
  • 这是一个问题,因为没有否定数组索引这样的东西。运行此代码givess以下输出:线程中的异常"main"java.lang.arrayIndexoutofBoundSexception:-1

classcastException.

  • 当尝试将异常投用到一个子类时,它被JVM抛出了它,它不是实例的子类
  • 例子 :
String type = "OCAJP8";
           Object obj = type;
           Integer number = (Integer) obj;
  • 编译器将来自对象的转换为整数。这可能没关系。编译器不会意识到该对象中有一个字符串。当代码运行时,它会给以下输出:线程"main"java.lang.classcastException:java.lang.string无法投射到java.lang.integer

IllegalArgumentException.

  • 它被程序员抛出,表示方法已通过非法或者不恰当的参数。
  • 例子 :
public static void setCount(int count)
    {
           if (count < 0)
                   throw new IllegalArgumentException("cont must not be negative");
           this.count = count;
     }
  • 当对参数值不满意时,该程序会抛出异常。输出如下所示:线程"main"java.lang.lang.illegalargumentException:count不得为负

空指针异常

  • 当有空引用时,它被JVM抛出,其中需要对象。
  • 例子 :
String name;
      public void printLength() throws NullPointerException 
      {
             System.out.println(name.length());
      }
  • 运行此代码会导致此输出:线程中的异常"main"java.lang.nullpointerexception

numberformatexception.

当尝试将字符串转换为数字类型但字符串没有适当的格式时,它被编程器抛出。
例子 :

Integer.parseInt("OCA");

输出看起来如此:线程"main"java.lang.numberformatexception:输入字符串:"oca"的例外

错误

  • 如果类是直接或者间接或者间接出现错误类的子类,则它是一个错误。
  • 对于错误,java代码要求申报或者处理它们不是必需的。如果我们捕获,则不会编译时间错误。但你不应该抓住它。
  • 这些被JVM抛出。
  • 这些是不可恢复的错误。
  • 例如,当我们尝试创建无限对象时,我们将获得OutofMemoryError。
  • 我们无法从这些错误中恢复。

ExpernipinItializerError.

  • 当静态初始化器抛出异常并且不处理它时,它被JVM抛出。
  • 例子 :
static {
       int[] c = new int[3];
       int num = c[-1];
       }
 
       public static void main(String[] args) { }
  • 此代码提供有关两个例外的信息:线程"main"java.lang.exceptionInitializerError引起的:java.lang.arrayIndexoutofboundsexception:-1
  • 我们得到ExperfipinItializerError,因为静态初始化程序中发生错误。
  • 单独的信息对于解决问题并不特别有用。因此,Java还告诉我们问题的原因:arrayIndexoutofBoundSexception
  • 我们需要修复ExpectionIninitializerError,因为Java无法加载整个类。此失败可防止Java继续。因此,错误是不可恢复的。

stackoverfloweror.

  • 当方法调用太多时间时,它被JVM抛出(这称为INFI NITE递归,因为该方法通常呼叫本身而无端)。
  • 例子 :
public static void call(int n) 
     {
              call(8);
     }
  • 输出包含此行:线程中的异常"main"java.lang.stackoverfloweror
  • 由于方法调用自己,它永远不会结束。最终,Java在堆栈上的房间内运行并抛出错误。这称为无限递归。

noclassdeffounderror

当代码使用在编译时但不运行时可用时,它被JVM抛出。
此错误不会在考试的代码中显示 - 我们只需要知道它是一个错误。

检查的异常,未经检查的异常和错误之间的区别

参数检查的异常未选中的异常错误
如何识别子类异常类runtimeexception类的子类子类错误类
是否容易catchno
是程序所需处理或者声明no
抛出 以编程方式JVMJVM
可恢复是 是no
示例ioException filenotfoundException等nullpointerexception classcastException 等等stackoverflowerror OutofMemoryError 等等