博客
关于我
Java学习笔记(六)之异常
阅读量:794 次
发布时间:2019-03-25

本文共 2493 字,大约阅读时间需要 8 分钟。

Java 异常处理与错误分类

在Java编程中,异常处理是程序开发中至关重要的一部分。Throwable类作为顶层父类,将所有异常与错误划分为两大类:Error和Exception。以下将详细说明两类异常的区别及其常见子类,并探讨异常处理机制。

Error类:不可恢复的错误

Error类表示JVM中不可恢复的错误状态,程序员无法通过代码处理这些错误。例如,内存溢出导致的StackOverflowError,或者是虚拟机本身的崩溃错误如VirtualMachineError。这些错误通常是由于严重的系统资源耗尽或底层资源问题引起的。由于Error类及其子类的实例不可恢复,程序员应尽量避免它们的发生。

常见的Error子类包括:

  • LinkageError:反映动态链接时的失败,例如类加载失败或依赖错误。
  • VirtualMachineError:涉及JVM运行时的严重错误,通常已加载堆栈跟踪以帮助诊断。
  • AWTError:用于报告涉及AWT(Abstract Window Toolkit)组件的错误。

Exception类:可恢复的异常

Exception类及其子类则代表可恢复的异常事件。这类异常是程序运行中常见的不期望情况,比如文件未找到的FileNotFoundException,网络连接超时的IOException,以及其他运行时段错误如NullPointerException。这些异常可以被程序员主动捕获并处理,从而避免程序崩溃。根据其来源,Exception类分为两大类:

  • RuntimeException及其子类:由程序自身逻辑错误引起,如数组越界异常ArrayIndexOutOfBoundsException。这类异常在语法上不强制处理,但程序员应尽量进行异常处理,以提升程序的健壮性。
  • 其他Exception子类:通常由外部因素引起,如文件无法访问、网络连接问题等。这些异常在语法上要求程序员进行处理,否则将导致编译错误。

常见Exception子类概述

以下是几个常见且实用的Exception子类:

运行时异常类
  • ArithmeticException:表示数学运算异常,如除数为零或数值溢出。
  • IndexOutOfBoundsException:表示操作因索引越界而失败,如集合、数组等的越界操作。
  • NullPointerException:发生在对空对象调用方法或访问字段时。
其他非运行时异常
  • ClassNotFoundException:反映尝试加载某个类或接口失败。
  • IOException:表示输入或输出操作遇到问题。
  • FileNotFoundException:表示尝试访问不存在的文件。
  • MalformedURLException:反映统一资源定位符(URL)格式不正确。

异常处理机制

捕获异常

在Java中,try-catch-finally结构用于处理可能的异常。try块包围可能出现异常的代码段,catch块则处理对应的异常。fionally块则是执行一定会执行的代码段,如释放资源或进行回卷操作。

捕获过程示例:

public class Test1 {    public static void main(String[] args) {        AnotherClass obj = new AnotherClass();        try {            obj.someMethod();        } catch (NullPointerException e) {            System.out.println("空指针异常发生在:" + e.getMessage());            e.printStackTrace();        } finally {            System.out.println("资源释放或回卷操作");        }    }}

异常处理的关键信息:

  • getMessage():获取异常信息。
  • printStackTrace():显示异常调用堆栈。
抛出异常

使用throw语句或抛出指定异常类实例的方法,可以主动将异常传播。需要注意的是,重写方法不能抛出比原方法范围更大的异常。

示例:

public class B {    public void test() throws IOException {        // 可以抛出已声明的异常类型        System.out.println("测试方法");        throw new IOException("自定义异常");    }}public class Test1 {    public static void main(String[] args) {        try {            B b = new B();            b.test();        } catch (IOException e) {            System.out.println("发生了输入输出异常:" + e.getMessage());            e.printStackTrace();        }    }}

人工抛出异常的方式:

throw new Exception("错误信息");
用户自定义异常类

在需要特定异常类型时,可以定义自定义Exception类,方便异常处理和调试。由于这些自定义异常类属于Exception子类,程序员才能通过捕获机制处理它们。

总结

Java的异常体系为开发者提供了强大的异常处理能力和灵活的错误分类方法。通过掌握Error和Exception的区别,并熟悉常见异常类,可以更好地应对程序中的异常情况。在开发过程中,合理使用try-catch-finally结构,不仅能提升程序的健壮性,还可以避免程序运行时由于未处理异常而失败。

转载地址:http://jbzyk.baihongyu.com/

你可能感兴趣的文章
python vue3实现大文件分段续传(断点续传)--带暂停和继续功能
查看>>
Python WebDriver如何打印整个页面源(html)
查看>>
Python WebSocket自动化测试:构建高效接口测试框架
查看>>
Python Web开发
查看>>
Python 中只有一个 True 和一个 False 对象吗?
查看>>
Python 中多线程与多处理之间的区别
查看>>
Python 从入门到精通:30天速成教程到底有多狠?你能坚持下来吗?
查看>>
Python 从数据库中存储和检索密码的最安全方法
查看>>
Python 优化提速的 8 个小技巧
查看>>
Python 余弦相似度与皮尔逊相关系数 计算
查看>>
python 使用execjs 报编码错误解决办法,UnicodeDecodeError: ‘gbk‘ codec can‘t decode byte 0xac in position 145: il
查看>>
python 使用filetype校验文件
查看>>
Python 使用flush函数将缓冲区数据立即写磁盘
查看>>
python 使用in判断不准确,in不好使
查看>>
Python 使用pandas 进行查询和统计详解
查看>>
Redis 配置文件redis.conf详细解释
查看>>
python网络爬虫(2)——scrapy框架的基础使用
查看>>
Python 使用哈希函数用于加密
查看>>
Python 依赖管理的革新——Poetry 深度解析
查看>>
python 保留精度及增加去除数字的千位分隔符(金额化数字)
查看>>