• Java异常机制


    什么是异常?

    程序在执行中发生了不正常的情况,这种情况就叫做异常。

    为了应对程序中的异常,java提供了异常机制,它的作用:

    java语言是很完善的语言,提供了异常的处理方式。当程序执行出现异常的时候,java会把异常信息打印输出到控制台,以供参考。程序员看到异常信息后,会对程序进行修改,让程序更加健壮,这体现了java的健壮性。

    1. Error

    2. Exception

    异常分为编译时异常和运行时异常,他们都发生在运行阶段,是不会发生在编译阶段的。

    那为什么有编译时异常呢?

    编译时异常是必须在编译阶段预先处理的,如果不处理编译器报错。并且异常的发生就是new了异常对象,而创建对象是发生在运行阶段的,所以异常都是发生在运行阶段的。

    编译时异常概率较高,可以进行预先处理;运行时异常概率较低,不能进行预先处理

    编译时异常(受检异常和受控异常)和运行时异常(未受检异常、未受控异常)

    两者之间的区别:

    运行时异常:所有的RuntimeException及子类都属于运行时异常。运行时异常在编写程序阶段,可以选择处理或不处理。运行时异常发生概率较低。

    编译时异常:所有的Exception的直接子类,都叫做编译时异常。编译时异常必须在编写程序的时候预先对异常进行处理,如果不处理编译器报错。编译时异常发生概率较高。这个必须要处理,即在我们的编译器中代码不变红

    处理方式

    • 在方法声明的位置,使用throws关键字,抛出异常,(抛给上一级)。
    • 使用try catch语句进行异常捕捉。

    编译时异常

    方法一:利用try catch捕捉异常,在当前文件就可以解决。

    语法如下:

    1. try{
    2. //可能会出错的代码块
    3. }catch(Exception e){
    4. //出现异常后,执行的语句
    5. e.;
    6. }finally{
    7. //通常用来释放资源
    8. }

    try catch之后的语句正常执行。try内部的捕捉代码出现错误,内部的代码不会执行。

    方法二:一级一级往上抛,直到解决为止。可以抛出具体异常,也可以抛出父类异常。最终抛给JVM。(抛给上级,让上级处理,自己并不进行处理)

    抛出异常的语句之后的语句不会执行。

    运行时异常

    可以处理,也可以不处理

    处理方式:可以使用try catch来对可能存在异常的代码进行捕捉。

    异常对象

    异常对象的生成:
    由虚拟机自动生成:程序运行过程中,虚拟机检测到程序发生了问题,如果在当前代码中没有找到相应的处理程序,就会在后台自动创建一个对应异常类的实例对象并抛出——自动抛出。
    由开发人员手动创建:Exception exception = new Exception();——创建好的异常对象不抛出对程序没有任何影响,和创建一个普通对象一样。
    只有进行打印或者throw抛出才可以中断程序。

    我们可以利用Exception类创建异常对象。

    ``

    1. public static void main(String[] args) {
    2. Exception exception = new Exception("此处有异常");
    3. String message = exception.getMessage();
    4. System.out.println(message);
    5. exception.printStackTrace();
    6. }

    异常对象的方法:

    getMessage:获取异常信息。

    printStackTrace():打印异常跟踪信息和异常位置。(常用

    异常体系结构图

    自定义异常

    作用:能够使自己创建的类更加符合实际开发形式,能够抛出异常跟踪信息。

    • 继承Exception或RuntimeException。
    • 提供两个构造方法,一个无参构造,一个参数为String参数构造。

    3. try catch语法

    语法如下:

    1. try{
    2. //可能会出错的代码块
    3. }catch(Exception e){
    4. //出现异常后,执行的语句
    5. e.;
    6. }finally{
    7. //通常用来释放资源
    8. }

    分析:

    1. catch()中的异常,可以写具体异常,也可以写父类异常
    2. catch()可以写多个,写多个具体异常。一个一个精确的处理。
    3. 多个catch捕捉,建议从小到大,从上到下的原则
    4. finally中的代码是最后执行,并且一定会执行(即使try块中有return)。
  • 相关阅读:
    神经网络在科研中的应用,神经网络技术及其应用
    【JavaScript】使用Canvas组件自动生成海报图片
    Android Java JVM常见问答分析与总结
    小白月赛96
    【MySQL入门】第五话 · SQL单表查询
    C&Python:表达式的求值顺序(evaluation order)
    排序算法——希尔排序
    数据结构 2.1 线性表的定义和基本操作
    虚拟环境中使用的Python不是当前虚拟环境的,解决方法
    vscode中设置vue用户代码片段
  • 原文地址:https://blog.csdn.net/guanshengg/article/details/126424928