当前位置:   article > 正文

Java中异常分为哪两大类_java的异常分为哪两类

java的异常分为哪两类

java中异常分类:

1、异常在java中以类和对象的形式存在,那么异常的继承结果是怎样的?

最先是Object

  • Object下有Throwable
    • Throwable下有两个分支:Error(不可处理,直接退出JVM)和Exception(可处理的)
      Exception下有两个分支: Exception直接子类,RuntimeException。

      • Exception的直接子类:编译时异常(要求程序员在编写程序阶段必须预先对这些异常进行处理,不处理,编译不通过)
        编译时异常也被称为:受检异常(CheckedException)、受控异常。

      • RuntimeException:运行时异常(在编写程序阶段程序员可以处理,也可以不处理)。
        运行时异常也被称为:未受检异常(UnCheckedException)、非受控异常。


2、下面给出常见异常类的继承结构图:
在这里插入图片描述

3、编译时异常和运行时异常,都是发生在运行阶段。编译阶段异常是不会发生的。

编译时异常因为什么而得名?因为编译时异常必须在编译前先处理,如果不处理编译器报错,因此得名。

4、所有异常都是在运行阶段发生的。因为只有程序运行阶段才可以new对象。因为异常的发生就是new异常对象。

编译时异常和运行时异常的区别是什么?

答:编译时异常一般发生的概率比较高。对于一些发生概率高的异常,需要在编译时预先对其处理。
运行时异常一般发生的概率很低。你可以预先处理,也可以不处理。

假设java中没有对异常进行划分,没有分编译时异常和运行时异常,所有的异常都需要在编写阶段对其预处理,将是怎样的效果?
首先,如果这样做的话,程序肯定是绝对的安全。
但是程序员就太累,到处都是处理异常的代码,显得很乱。

5、java中对异常的处理方式包括两种方式:
第一种:在方法声明的位置上,使用throws关键字,抛给上一级。谁掉用我我就抛给谁。
第二种:使用try…catch语句进行异常的捕捉。

异常发生之后,如果选择了上抛,抛给了调用者,调用者需要对这个异常继续处理,同样调用者处理这个异常也有两种方式。

注意:java中异常发生之后如果一直上抛,最终抛给了main方法,main方法继续上抛,抛给了调用者JVM,JVM知道这个异常发生,只有一个结果,终止程序执行。

测试代码:

public class Test03 {
    public static void main(String[] args) {
        System.out.println(100 / 0);
        /*
        * 程序执行完100/0,发生了ArithmeticException异常,底层new了一个ArithmeticException对象
        * 因为没有进行捕捉异常,所以进行异常上抛,抛给调用者main方法,main方法也没有处理,
        * 将这个异常抛给了JVM,JVM最终终止程序的执行。
        *
        * ArithmeticException 继承 RuntimeException,属于运行时异常
        * 在编写阶段不需要对这种异常进行预先处理,编译通过。
        *
        * */

        System.out.println("hello world!");  // 没有执行
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/很楠不爱3/article/detail/390726?site
推荐阅读
相关标签
  

闽ICP备14008679号