博客
关于我
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/

你可能感兴趣的文章
MySQL-【4】基本操作
查看>>
Mysql-丢失更新
查看>>
Mysql-事务阻塞
查看>>
Mysql-存储引擎
查看>>
mysql-开启慢查询&所有操作记录日志
查看>>
MySQL-数据目录
查看>>
MySQL-数据页的结构
查看>>
MySQL-架构篇
查看>>
MySQL-索引的分类(聚簇索引、二级索引、联合索引)
查看>>
Mysql-触发器及创建触发器失败原因
查看>>
MySQL-连接
查看>>
mysql-递归查询(二)
查看>>
MySQL5.1安装
查看>>
mysql5.5和5.6版本间的坑
查看>>
mysql5.5最简安装教程
查看>>
mysql5.6 TIME,DATETIME,TIMESTAMP
查看>>
mysql5.6.21重置数据库的root密码
查看>>
Mysql5.6主从复制-基于binlog
查看>>
MySQL5.6忘记root密码(win平台)
查看>>
MySQL5.6的Linux安装shell脚本之二进制安装(一)
查看>>