【Java异常体系】(二)异常体系之IOException解析...

一、IOException

IOException 同RuntimeException、SQLException一样,都是 Exception的一个子类。IOException表示发出某种I/O,即输入输出操作期间异常发生的信号,此异常是由失败或中断的I/O操作产生的一般异常

当Java程序尝试读取或写入文件、网络连接、数据库或其他外部资源时,可能会出现 IOException。这些异常可能是由于文件不存在、无法访问文件、网络连接中断、磁盘空间不足等原因引起的。

当IOException发生时,Java程序会抛出异常并停止执行,如果没有适当的异常处理程序,程序将崩溃。为了处理IOException,程序员通常使用try-catch语句块来捕捉并处理这些异常,以便在发生异常时采取适当的措施,如关闭文件或网络连接、输出错误消息等。

1、LoadException

LoadException(文件加载异常)这个异常类用于表示在加载Java类或资源时发生的异常。当Java程序尝试加载类或资源时,可能会出现此异常。这些异常可能是由于类文件或资源文件损坏、找不到类或资源文件、类或资源文件版本不兼容 等原因引起的。

LoadException通常与Java的类加载机制有关。在Java程序中,当需要使用某个类时,Java会尝试从文件系统或网络中加载该类,如果类文件损坏或找不到该类文件,则会引发LoadException。在某些情况下,LoadException可能会导致Java程序无法继续执行。

通常可使用try-catch语句块来捕捉并处理LoadException异常,以便在发生异常时采取适当的措施,如输出错误消息或重新加载类或资源文件。

异常例图

LoadException
异常分析
1、根据报错信息查看项目中是否存在指定的资源文件,若存在则查看文件是否能正常打开,文件数据是否正常;
2、若资源文件存在且能正常查看数据,则说明是项目的配置问题,导致加载不到此文件。

2、EOFException

EOFException(读取错误) 这个异常类用于表示在读取数据时已经到达了输入流的末尾。当尝试从输入流中读取数据时,如果输入流已经到达末尾,JVM会抛出EOFException异常。

EOFException通常发生在以下情况:

  • 试图从空文件中读取数据;
  • 试图从套接字(Socket)中读取数据,但对方已经关闭了连接;
  • 试图从输入流中读取数据,但已经读取到了文件的末尾。

异常例图
EOFException

3、FileNotFoundException

FileNotFoundException(文件找不到异常) 这个异常类表示在尝试打开、读取、写入文件时未找到相应的文件或目录。这个异常通常是由于文件不存在、文件名拼写错误或者访问权限不足等 原因引起的。

当具有指定路径名的文件不存在时,FileInputStream、FileOutputStream和RandomAccessFile构造函数将引发此异常。如果文件确实存在,但由于某些原因无法访问,例如试图打开只读文件进行写入时,这些构造函数也会抛出它。

异常例图

在这里插入图片描述
异常分析
FileNotFoundException异常处理方式一般包括打印错误信息、提示用户输入正确的文件名或路径、创建文件等。

4、InterruptedIOException

InterruptedIOException(线程中断或超时异常)是Java中的一个异常类,通常被用于处理网络连接、文件读写等I/O操作时的异常情况。它表示在进行I/O操作时,当前线程被中断或超时

当一个线程正在进行I/O操作时,如果另一个线程中断了当前线程,那么就会抛出这个异常。这个异常也用于在进行I/O操作时设置超时时间且在超时时间内没有完成I/O操作,也会抛出这个异常。

5、ObjectStreamException

ObjectStreamException(序列化或反序列化异常)是java.io包中的一个特定于对象流类的所有异常的超类,用于表示在对象序列化和反序列化期间发生的异常。当序列化或反序列化对象时,如果出现了异常情况,例如对象类型不匹配、流格式错误、版本不兼容等,就会抛出ObjectStreamException。

该异常有两个子类:InvalidClassException和NotSerializableException。

  • 当序列化或反序列化对象时,如果找不到类、类的版本不匹配或者类的序列化可能已经被禁止等情况时,会抛出InvalidClassException;
  • 如果对象没有实现Serializable接口,会抛出NotSerializableException。
    通常情况下,ObjectStreamException是由于对象序列化和反序列化期间出现了一些不可预期的问题,因此需要开发人员进行调试和修复。

6、UTFDataFormatException

UTFDataFormatException(非法UTF-8编码数据异常)异常类表示尝试将非法的UTF-8编码数据写入数据输出流或从数据输入流读取非法的UTF-8编码数据
在Java中,UTF-8编码是一种可变长度的编码方式,它使用1到4个字节来表示一个Unicode字符。

通常情况下,UTFDataFormatException的发生是由于以下原因引起的:

  • 尝试写入一个包含无效UTF-8编码的字符串;
  • 尝试读取一个包含无效UTF-8编码的字符串。
  • 尝试读取一个字节数组,但该字节数组的长度不足以表示一个有效的UTF-8编码。

如果出现UTFDataFormatException异常,通常需要检查数据的编码格式是否正确,并确保数据的长度足以表示一个有效的UTF-8编码。

7、UnknownServiceException

UnknownServiceException(未知协议或服务异常)异常类表示当试图在套接字上使用未知协议时,或者试图连接到未知服务时 抛出的异常。
当使用Java中的套接字进行网络编程时,可能会遇到UnknownServiceException异常。这通常是因为正在使用一个未知的协议或服务,或者试图连接到一个不存在的服务。

异常举例

Socket socket = new Socket("localhost", 99999);

异常分析
若 99999端口并不存在或者没有服务在该端口上运行,socket连接操作就会失败,并抛出UnknownServiceException异常。
也是因此,在Java中进行网络编程时,需要仔细检查和处理网络配置是否正确,以确保代码的正确性和稳定性。

8、ProtocolException

ProtocolException(错误协议异常)异常类用于表示在使用不正确的协议 时发生的异常。它通常是由于客户端和服务器之间协议不兼容或协议错误 而引起的。
ProtocolException通常与HTTP协议相关,例如当HTTP请求无法被服务器理解或处理时,服务器可能会抛出ProtocolException异常。此外,ProtocolException还可以在其他协议中发生,例如TCP,SMTP等等。
在Java中,ProtocolException类继承自IOException类,因此它是一个受检查的异常,必须在方法签名中声明或捕获并处理。当ProtocolException被抛出时,它会中断当前的操作并向上抛出,直到被捕获或程序终止。

9、UnknownHostException

UnknownHostException(无法解析主机异常)异常类表示在进行网络通信时无法解析主机名或IP地址。当程序试图使用一个不存在的主机名或IP地址时,就会抛出UnknownHostException异常。

在网络编程中,通常会使用主机名或IP地址来建立Socket连接或进行其他网络操作。如果使用的主机名或IP地址无法被解析,就会抛出UnknownHostException异常。这个异常通常是由DNS服务器无法解析主机名导致的,也可能是由于网络连接故障或主机名/IP地址输入错误引起的。

当出现UnknownHostException异常时,程序通常会中止运行或抛出其他异常。为了避免这种情况,可以在进行网络操作之前先对主机名或IP地址进行正确性检查,或者使用try-catch语句来捕获异常并进行处理。


🍭 一图总结

在这里插入图片描述


在这里插入图片描述

  • 11
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 6
    评论
### 回答1: 在Java中,异常是一种特殊的对象,表示在程序运行期间发生的不正常情况。异常体系是由Java语言提供的一组类和接口,用于描述异常和处理异常Java中的异常体系由两个主要部分组成: 1. 异常类:Java中的异常类都是 `Throwable` 类的子类,其中包括两种常见的子类:`Error` 和 `Exception`。 - `Error` 类表示严重的错误,通常是指与虚拟机相关的问题,例如内存溢出或栈溢出。通常情况下,我们不会处理 `Error` 类型的异常。 - `Exception` 类表示一般性异常,它可以被捕获并处理。 `Exception` 类有两个常见的子类:`RuntimeException` 和 `IOException`。`RuntimeException` 类表示运行时异常,通常是由程序逻辑错误引起的;`IOException` 类表示输入/输出异常,通常是由文件读写或网络通信引起的。 2. 异常处理机制:Java提供了两种方法来处理异常: - `try-catch` 语句:使用 `try-catch` 语句捕获异常的过程称为异常捕获。在 `try` 块中的代码可能会抛出异常,因此我们可以在 `try` 块后面跟着一个或多个 `catch` 块来处 ### 回答2: Java中的异常体系是指用来处理程序中出现的错误和异常情况的一套机制。异常是在程序执行过程中可能发生的非正常情况,如除零错误、空指针引用等。Java异常处理机制分为3种类型:可检查异常、运行时异常和错误。 可检查异常(checked exception)是指在程序编译时就必须处理的异常。如果一个方法可能会抛出可检查异常,要么在方法的声明中使用throws关键字声明该异常,要么使用try-catch块捕获并处理异常。可检查异常的目的是提醒开发者对可能的异常情况进行处理,确保程序的健壮性。 运行时异常(runtime exception)是指不需要在编译阶段处理的异常。这些异常通常由程序错误导致,如数组越界、空指针引用等。运行时异常不需要强制处理,但可以选择使用try-catch块处理。同时,运行时异常也可以使用throws关键字声明,将异常抛给调用者。 错误(error)是指严重的错误,通常是虚拟机无法恢复的问题。错误无法通过捕获和处理来解决,常见的错误类型有OutOfMemoryError和StackOverflowError等。一旦错误发生,程序的执行将中断。 Java异常体系中,所有的异常都继承自Throwable类。Throwable类有两个最重要的子类:Exception和Error。Exception类表示可检查异常,而Error类表示错误。此外,还有RuntimeException类,它是Exception的子类,用于表示运行时异常。 通过使用Java异常体系开发者能够在程序中处理和恢复各种异常情况,提高程序的可靠性和稳定性。在编写Java程序时,合理地处理异常是十分重要的一项技能。 ### 回答3: Java异常体系Java编程语言中用于处理程序运行错误的一种机制。在Java中,异常分为可检查异常和不可检查异常两种。 可检查异常(Checked Exception)是指需要在代码中显式处理的异常,这些异常一般表示程序处理外部资源时可能出现的错误情况,如文件读写错误、网络连接错误等。可检查异常需要使用try-catch语句来捕获并处理,或者使用throws关键字声明在方法的声明中,让调用者处理。可检查异常的父类是Exception。 不可检查异常(Unchecked Exception)也称为运行时异常(Runtime Exception),是指在代码中不需要显式处理的异常。不可检查异常一般表示程序出现了严重的错误,如除零错误、空指针异常等。不可检查异常可以选择性地使用try-catch语句捕获并处理,但不是强制要求。不可检查异常的父类是RuntimeException。 Java异常体系是通过抛出和捕获异常来实现的。当程序出现异常时,会抛出一个异常对象,该对象会沿着方法调用栈被传递到调用栈的上层,直到被捕获并进行处理。异常对象包含异常的类型和相关的信息,如异常的原因和调用栈等。捕获异常通常使用try-catch语句块来实现,try块中包含可能抛出异常的代码,catch块则用于捕获并处理异常Java异常体系还支持自定义异常,可以根据程序的需要创建自己的异常类。自定义异常类一般继承自Exception或RuntimeException。通过自定义异常,可以更好地表示程序中的特定错误,并提供更加详细的错误信息。 总之,Java异常体系是一种用于处理程序运行错误的机制,通过抛出和捕获异常来实现。通过可检查异常和不可检查异常,可以针对不同的错误情况进行适当的处理。同时,Java还支持自定义异常,可以提供更加详细和准确的错误信息。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小山code

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值