iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Java Exception异常全方面分析
  • 150
分享到

Java Exception异常全方面分析

2024-04-02 19:04:59 150人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

目录一、什么是异常?Java的异常体系如何排查异常二、 处理异常try…catch基本语法这个时候就要处理异常如果我们用Exception来捕获异常呢?finally在

如下实例:


public class Demo {
    public static void main(String[] args) {
        int num = 2/0;
    }
}

这段代码中“除0”的逻辑在C语言中就只是报个警告,但是Java是比较安全的语言,在编译运行的时候会直接抛出异常

那么到底什么是异常?

一、什么是异常?

异常指的是在程序运行过程中发生的异常事件,通常是由外部问题(如硬件错误、输入错误)所导致的。在Java等面向对象编程语言中异常属于对象.

异常本身是一个对象,产生异常就是产生了一个异常对象

Java的异常体系

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oL91wEfr-1645859727173)(C:\Users\LY\AppData\Roaming\Typora\typora-user-images\image-20220110210046681.jpg)]

我们都知道Java中所有类都是继承自Object的,Throwable这个类也是如此,如下Java官方文档

我们可以看到

继承于throwable类的有两个,一个是Error(错误),一个是Exception(异常),throwable是Java中所有错误和异常的父类

而异常又分为受查异常和非受查异常(我们之前碰到过的除0发生的异常就是非受查异常)

非受查异常:Java语言规范将派生于 Error 类或 RuntimeException 类的所有异常称为非受查异常(因为程序的代码Bug导致的问题,空指针异常,数组下标越界异常)

受查异常:所有的其他异常称为 受查异常(程序编译时抛出的异常),必须处理,否则代码编译不能通过(一些可以经过重试或者程序自动修复可以解决的问题)

错误:因为设备或其他硬性环境导致的,程序根本无法修复的问题

如何排查异常

如下代码:

在文章开头写的一个"除0"代码的运行结果:

这里面java.lang.ArithmeticException是异常的种类,by zero是异常的具体信息

常见的异常种类有:

NullPointerException:空指针异常

ArithmeticException:算术异常

ArrayIndexOutOfBoundsException:数组下标越界异常

PS:异常的种类有很多,不同的异常具有不同的含义,也有不同的处理方式

有的时候异常信息会有很多行,这些异常信息被称为异常信息栈/异常跟踪栈,那么我们如何在这些异常信息中找到引发异常的第一现场呢?

直接点击最上面第一条异常信息的蓝色部分,光标就会自动跳转到引发异常的地方,从而进行相应的修改

二、 处理异常

Java当中异常的核心思想其实就是让我们先操作,在操作过程中遇到问题再处理

try…catch基本语法

try{
有可能出现异常的语句;
}[catch (异常类型 异常对象) {
捕捉try当中可能出现的异常;
可以写多个catch;
} ... ]
[finally {
异常的出口;
可以不写;
finally中的代码一定会被执行,用来做一些善后工作;
}]

  • try 代码块中放的是可能出现异常的代码.
  • catch 代码块中放的是出现异常后的处理行为
  • finally 代码块中的代码用于处理善后工作, 会在最后执行.
  • 其中 catch 和 finally 都可以根据情况选择加或者不加.

我们还是以"除0"问题为例


public static void main(String[] args) {
    int a = 10/0;
    System.out.println("666");
}

这个程序显然到了int a = 10/0;就会抛出异常,后面的666不会被打印出来

此处发生异常,程序会直接交给JVM处理异常,导致的结果是程序会立即停止,不再向下执行

那么我们如果想要让程序继续往下执行呢?

这个时候就要处理异常


public static void main(String[] args) {
    try {
        int a = 10 / 0;
    } catch (ArithmeticException e) {
        e.printStackTrace();
    }
     System.out.println("666");
}

在try中放入可能会引发异常的语句,在catch后面的圆括号内写入想要捕获异常的种类ArithmeticException,然后就可以对此异常做出处理,e.printStackTrace();打印异常追踪栈,最后再打印666

运行结果:

当程序抛出异常的时候,由catch块进行捕获,程序自己来处理异常,导致的结果就是程序会继续向下执行

注意:如果catch中要捕获的异常种类和实际发生异常的种类不一样的话,就还是交给JVM处理了,程序立即停止

如果我们用Exception来捕获异常呢?

如下代码


public static void main(String[] args) {
    try {
        int a = 10 / 0;
    }catch (Exception e) {
        System.out.println(999);
    }catch (ArithmeticException e) {
        System.out.println(888);
    }     // 直接捕获Exception的话,后面的这些catch就没啥用了,编译器就会报错
    System.out.println("666");
}   

所有异常继承于Exception,那么当出现异常的时候,Exception可以捕获所有的异常,这样只需要写一个捕获Exception的catch就行了,但是不建议这么写,这样得不到具体的异常种类

finally

无论catch有没有捕获到异常,finally块中的代码都会在最后被执行


public static void main(String[] args) {
    try {
        int a = 10 / 0;
        System.out.println("666");
    }catch (ArithmeticException e) {
        System.out.println("888");
    }finally {
        System.out.println("999");
    }
    System.out.println("777");
}

在方法中出现异常

如果本方法中没有合适的处理异常的方式,就会沿着调用栈向上传递


public class ExceptionLearning {
    public static void demo() {
        int a = 10/0;
    }
    public static void main(String[] args) {
        demo();
    }
}

运行结果:

在demo方法中执行时,抛出算术异常,因为demo方法是被main方法调用的,所以demo就会让main方法来处理异常,但是main方法中也没有处理异常,就会交给JVM来处理,程序就会异常终止

若对异常做出处理


public class ExceptionLearning {
    public static void demo() {
        int a = 10/0;
    }
    public static void main(String[] args) {
        try {
            demo();
        }catch (ArithmeticException e) {
            e.printStackTrace();
        }finally {
            System.out.println("继续向下执行");
        }
    }
}

在demo方法中执行时,抛出算术异常,因为demo方法是被main方法调用的,所以demo就会让main方法来处理异常,main方法中对异常做出处理,程序继续向下执行

异常处理流程

  • 程序先执行 try 中的代码,如果 try 中的代码出现异常, 就会结束 try 中的代码, 看和 catch 中的异常类型是否匹配.
  • 如果找到匹配的异常类型, 就会执行 catch 中的代码,如果没有找到匹配的异常类型, 就会将异常向上传递到上层调用者.
  • 无论是否找到匹配的异常类型, finally 中的代码都会被执行到(在该方法结束之前执行).
  • 如果上层调用者也没有处理异常, 就继续向上传递,一直到 main 方法也没有合适的代码处理异常, 就会交给 JVM 来进行处理, 此时程序就会异常终止

手动抛出异常

除了Java编译器来抛出异常以外,我们也可以自己针对一些情况来抛出异常

三、自定义异常

要知道,异常本身就是一个对象,它肯定是对应一个类的,那么我们也可以通过创建类的方式来自定义异常

源码剖析

我们这里以Arithmetic类为例,可以先看看它的源码

从源码中会发现Arithmetic这个类继承自RuntimeException类,并且有两个构造方法,一个有参,一个无参

自定义

我们也可以仿照Arithmetic来自定义,如下代码


class MyException extends RuntimeException{
    public MyException() {
        super();
    }
    public MyException(String str) {
        super(str);
    }
}
public class ExceptionLearning {
    public static void main(String[] args) throws MyException{   //在方法上加上异常说明, 相当于将处理动作交给上级调用者
        int b = 0;
        if (b == 0) {
            throw new MyException("b == 0");
        }
    }
}

运行结果

注意

当我们将MyException继承于RuntimeException的时候,这个异常就默认是非受查异常;继承于Exception的时候,这个异常就默认是受查异常

Java针对受查异常,强制要求: 一个方法如果抛出了受查异常,则必须通过throws声明异常;如果抛出了非受查异常,则必须声明

到此这篇关于Java Exception异常全方面分析的文章就介绍到这了,更多相关Java 异常内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Java Exception异常全方面分析

本文链接: https://www.lsjlt.com/news/143568.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Java Exception异常全方面分析
    目录一、什么是异常?Java的异常体系如何排查异常二、 处理异常try…catch基本语法这个时候就要处理异常如果我们用Exception来捕获异常呢finally在方...
    99+
    2024-04-02
  • Java异常处理操作Throwable、Exception、Error的示例分析
    这篇文章主要介绍了Java异常处理操作Throwable、Exception、Error的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。异常是一个事件,它发生在程序运...
    99+
    2023-06-15
  • PHP中Exception异常机制的示例分析
    这篇文章将为大家详细讲解有关PHP中Exception异常机制的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。异常的基本使用当异常被抛出时,其后的代码不会继续执行,PHP 会尝试查找匹配的 &qu...
    99+
    2023-06-20
  • Java异常Exception详细讲解
    目录1、异常中最大的父类Throwable2、try-catch-finally三条语句注意的问题3、final-finally-finalize的各作用4、throws关键字5、t...
    99+
    2024-04-02
  • Java 异常机制Exception和自定义异常
    目录异常机制异常体系结构异常的捕获与抛出自定义异常异常机制 异常:就是不符合实际需求,在实际中可能不存在也可能不满足实际,所以出现的问题称之为异常。 异常的三种类型: 检查性异常:用...
    99+
    2024-04-02
  • 全面了解java异常
    目录异常的概念异常体系异常的分类异常产生的过程分析异常的处理抛出异常throw声明异常throws捕获异常try…catch捕获异常语法如何获取异常信息:finally代码块try ...
    99+
    2024-04-02
  • 解析PHP中Exception异常机制
    异常的基本使用 当异常被抛出时,其后的代码不会继续执行,PHP 会尝试查找匹配的 "catch" 代码块。 如果异常没有被捕获,而且又没用使用 set_exception_handl...
    99+
    2024-04-02
  • Java异常(Exception)处理以及常见异常总结
    目录前言异常简介 异常类型 总结前言 很多事件并非总是按照人们自己设计意愿顺利发展的,经常出现这样那样的异常情况。例如: 你计划周末郊游,计划从家里出发→到达目的→游泳→烧烤→回家。...
    99+
    2024-04-02
  • 详解Java的Exception异常机制
    目录一、前言二、关于RuntimeException三、异常的避免四、异常的捕获五、异常的抛出(异常的转移)六、自定义异常一、前言 在Java中,我们在执行代码的过程中难免会遇到错误...
    99+
    2024-04-02
  • Java异常 Factory method'sqlSessionFactory'rew exception;ested exception is java.lang.NoSuchMet
    springboot 引入mybatis-plus后报错: Factory method ‘sqlSessionFactory' threw exception; nested ex...
    99+
    2024-04-02
  • JAVA中的深情哥-Exception(异常)-上
    文章目录 目录 文章目录 前言 一,Exception的起源  二,异常类  三,自定义异常 总结 前言 大家好,我是最爱吃兽奶,今天给大家介绍一下java中的深情哥 - Exception 秋风依依秋水寒,一点离愁两黯然;今生默默唯轻舞...
    99+
    2023-09-07
    开发语言 java
  • 怎么分析Java异常
    怎么分析Java异常,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。你觉得自己是一个Java专家吗?是否肯定自己已经全面掌握了Java的异常处理机制?在下面这段代码中,你能够迅速...
    99+
    2023-06-03
  • Java中Exception异常机制的原理
    本篇文章给大家分享的是有关Java中Exception异常机制的原理,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。Error与Exception的区别与相同点:Error是严重...
    99+
    2023-06-15
  • Java异常处理操作 Throwable、Exception、Error
    异常是一个事件,它发生在程序运行期间,干扰了正常的指令流程。 Java通过API中Throwable类的众多子类描述各种不同的异常。因而,Java异常都是对象,是Throwable子...
    99+
    2024-04-02
  • Java详细讲解异常Exception的处理
    目录异常介绍常见的运行时异常1.空指针异常2.数学运算异常3.数组下标越界异常4.类型转换异常5.数字格式不正确异常异常处理流程异常介绍 基本概念 程序执行中发生的不正常情况称为异常...
    99+
    2024-04-02
  • Spring Cloud Gateway自定义异常处理Exception Handler的示例分析
    这篇文章给大家分享的是有关Spring Cloud Gateway自定义异常处理Exception Handler的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。方法1: ErrorWebExceptio...
    99+
    2023-06-20
  • java注解的全面分析
    全面解析java注解Java中的常见注解 a.JDK中的注解    @Override 覆盖父类或者父接口的方法    @Deprecated 表示方法已经过时 &nbs...
    99+
    2023-05-31
    java 注解 ava
  • Java异常 Exception类及其子类(实例讲解)
    C语言时用if...else...来控制异常,Java语言所有的异常都可以用一个类来表示,不同类型的异常对应不同的子类异常,每个异常都对应一个异常类的对象。Java异常处理通过5个关键字try、catch、finally、throw、thr...
    99+
    2023-05-30
    java exception 子类
  • Java中为什么会出现Exception结构异常
    这期内容当中小编将会给大家带来有关Java中为什么会出现Exception结构异常,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。1. Java异常Exception的结构分析我们通常所说的Exceptio...
    99+
    2023-05-31
    java exception 中为
  • Java注解和异常实例分析
    今天小编给大家分享一下Java注解和异常实例分析的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。注解作用注解是JDK1.5版本...
    99+
    2023-07-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作