【Java基础】java 异常

简介: Throwable 是 Java 语言中所有错误与异常的超类。只有当对象是此类或其子类之一的实例时,才能通过 Java 虚拟机或者 Java throw 语句抛出,才可以是 catch 子句中的参数类型。

 image.gif编辑

Throwable 是 Java 语言中所有错误与异常的超类。只有当对象是此类或其子类之一的实例时,才能通过 Java 虚拟机或者 Java throw 语句抛出,才可以是 catch 子句中的参数类型。

Throwable 包含两个子类:Error(错误)和 Exception(异常)

Error(错误)

Error 类及其子类:程序中无法处理的错误,表示运行应用程序中出现了严重的错误。

此类错误一般表示代码运行时 JVM 出现问题。通常有 Virtual MachineError(虚拟机运行错误)、NoClassDefFoundError(类定义错误)等。比如 OutOfMemoryError:内存不足错误;StackOverflowError:栈溢出错误。此类错误发生时,JVM 将终止线程。

这些错误是不受检异常,非代码性错误。因此,当此类错误发生时,应用程序不应该去处理此类错误。按照Java惯例,我们是不应该实现任何新的Error子类。

Exception(异常)

程序本身可以捕获并且可以处理的异常。

    • 运行时异常

    都是RuntimeException类及其子类异常,如NullPointerException(空指针异常)、ClassCastException、IndexOutOfBoundsException(下标越界异常)等,这些异常是不检查异常,程序中可以选择捕获处理,也可以不处理。这些异常一般是由程序逻辑错误引起的。

      • 非运行时异常

      (编译异常 或者叫 检查异常)

      属于Exception类及其子类。从程序语法角度讲是必须进行处理的异常,如果不处理,程序就不能编译通过。如IOException、SQLException等以及用户自定义的Exception异常

      异常关键字

        • try

        – 用于监听。将要被监听的代码(可能抛出异常的代码)放在try语句块之内,当try语句块内发生异常时,异常就被抛出。

          • catch

          – 用于捕获异常。catch用来捕获try语句块中发生的异常。

            • finally

            – finally语句块总是会被执行。它主要用于回收在try块里打开的物力资源(如数据库连接、网络连接和磁盘文件)。只有finally块,执行完成之后,才会回来执行try或者catch块中的return或者throw语句,如果finally中使用了return或者throw等终止方法的语句,则就不会跳回执行,直接停止。

              • throw

              – 用于抛出异常。

                • throws

                – 用在方法签名中,用于声明该方法可能抛出的异常(异常的声明)。

                注意:若是父类的方法没有声明异常,则子类继承方法后,也不能声明异常。

                异常的捕获

                异常捕获处理的方法通常有:

                  • try-catch
                  • try-catch-finally
                  • try-finally
                  • try-with-resource

                  当Java程序在运行时发现错误或异常情况时,会抛出异常并中断程序的正常执行。下面是一段简单的Java异常代码示例:

                  public class ExceptionExample {
                    public static void main(String[] args) {
                      int dividend = 10;
                      int divisor = 0;
                      int result;
                      try {
                        result = dividend / divisor; // 这里会抛出 ArithmeticException 异常
                        System.out.println("Result: " + result);
                      } catch (ArithmeticException e) {
                        System.out.println("Error: " + e.getMessage()); // 捕获异常并输出错误信息
                      } finally {
                        System.out.println("This code will always execute.");
                      }
                    }
                  }

                  image.gif

                  这段代码尝试将变量 dividend 除以变量 divisor,由于 divisor 的值为 0,会抛出 ArithmeticException 异常。使用 try-catch 结构捕获异常,并输出错误信息。此外,在 finally 语句块中定义的代码始终会被执行,不论是否有异常被抛出。

                  目录
                  打赏
                  0
                  0
                  0
                  0
                  46
                  分享
                  相关文章
                  |
                  8月前
                  |
                  在 Java 中捕获和处理自定义异常的代码示例
                  本文提供了一个 Java 代码示例,展示了如何捕获和处理自定义异常。通过创建自定义异常类并使用 try-catch 语句,可以更灵活地处理程序中的错误情况。
                  247 1
                  重学Java基础篇—Java类加载顺序深度解析
                  本文全面解析Java类的生命周期与加载顺序,涵盖从加载到卸载的七个阶段,并深入探讨初始化阶段的执行规则。通过单类、继承体系的实例分析,明确静态与实例初始化的顺序。同时,列举六种触发初始化的场景及特殊场景处理(如接口初始化)。提供类加载完整流程图与记忆口诀,助于理解复杂初始化逻辑。此外,针对空指针异常等问题提出排查方案,并给出最佳实践建议,帮助开发者优化程序设计、定位BUG及理解框架机制。最后扩展讲解类加载器层次与双亲委派机制,为深入研究奠定基础。
                  137 0
                  【Java基础-环境搭建-创建项目】IntelliJ IDEA创建Java项目的详细步骤
                  IntelliJ IDEA创建Java项目的图文详细步骤,手把手带你创建Java项目
                  221 10
                  【Java基础-环境搭建-创建项目】IntelliJ IDEA创建Java项目的详细步骤
                  如何避免 Java 中的 TimeoutException 异常
                  在Java中,`TimeoutException`通常发生在执行操作超过预设时间时。要避免此异常,可以优化代码逻辑,减少不必要的等待;合理设置超时时间,确保其足够完成正常操作;使用异步处理或线程池管理任务,提高程序响应性。
                  406 13
                  【YashanDB知识库】yasdb jdbc驱动集成BeetISQL中间件,业务(java)报autoAssignKey failure异常
                  在BeetISQL 2.13.8版本中,客户使用batch insert向yashandb表插入数据并尝试获取自动生成的sequence id时,出现类型转换异常。原因是beetlsql在prepareStatement时未指定返回列,导致yashan JDBC驱动返回rowid(字符串),与Java Bean中的数字类型tid不匹配。此问题影响业务流程,使无法正确获取sequence id。解决方法包括:1) 在batchInsert时不返回自动生成的sequence id;2) 升级至BeetISQL 3,其已修正该问题。
                  【YashanDB知识库】yasdb jdbc驱动集成BeetISQL中间件,业务(java)报autoAssignKey failure异常
                  重学Java基础篇—Java对象创建的7种核心方式详解
                  本文全面解析了Java中对象的创建方式,涵盖基础到高级技术。包括`new关键字`直接实例化、反射机制动态创建、克隆与反序列化复用对象,以及工厂方法和建造者模式等设计模式的应用。同时探讨了Spring IOC容器等框架级创建方式,并对比各类方法的适用场景与优缺点。此外,还深入分析了动态代理、Unsafe类等扩展知识及注意事项。最后总结最佳实践,建议根据业务需求选择合适方式,在灵活性与性能间取得平衡。
                  193 3
                  |
                  4月前
                  |
                  重学Java基础篇—Java泛型深度使用指南
                  本内容系统介绍了Java泛型的核心价值、用法及高级技巧。首先阐述了泛型在**类型安全**与**代码复用**中的平衡作用,解决强制类型转换错误等问题。接着详细讲解了泛型类定义、方法实现、类型参数约束(如边界限定和多重边界)、通配符应用(PECS原则)以及类型擦除的应对策略。此外,还展示了泛型在通用DAO接口、事件总线等实际场景的应用,并总结了命名规范、边界控制等最佳实践。最后探讨了扩展知识,如通过反射获取泛型参数类型。合理运用泛型可大幅提升代码健壮性和可维护性,建议结合IDE工具和单元测试优化使用。
                  79 1
                  |
                  4月前
                  |
                  重学Java基础篇—Java Object类常用方法深度解析
                  Java中,Object类作为所有类的超类,提供了多个核心方法以支持对象的基本行为。其中,`toString()`用于对象的字符串表示,重写时应包含关键信息;`equals()`与`hashCode()`需成对重写,确保对象等价判断的一致性;`getClass()`用于运行时类型识别;`clone()`实现对象复制,需区分浅拷贝与深拷贝;`wait()/notify()`支持线程协作。此外,`finalize()`已过时,建议使用更安全的资源管理方式。合理运用这些方法,并遵循最佳实践,可提升代码质量与健壮性。
                  117 1
                  【YashanDB知识库】yasdb jdbc驱动集成druid连接池,业务(java)日志中有token IDENTIFIER start异常
                  客户Java日志中出现异常,影响Druid的merge SQL功能(将SQL字面量替换为绑定变量以统计性能),但不影响正常业务流程。原因是Druid在merge SQL时传入null作为dbType,导致无法解析递归查询中的`start`关键字。

                  热门文章

                  最新文章

                  AI助理

                  你好,我是AI助理

                  可以解答问题、推荐解决方案等

                  登录插画

                  登录以查看您的控制台资源

                  管理云资源
                  状态一览
                  快捷访问