Bootstrap

Java异常机制以及io流

1. 异常分类与体系结构

Java异常以Throwable为基类,分为Error和Exception两大分支:

Error:表示程序无法处理的严重系统级错误(如OutOfMemoryError),通常由JVM抛出,无法通过代码修复。
Exception:程序可处理的异常,进一步分为:
检查型异常(Checked Exception):编译时必须处理(如IOException),否则无法通过编译。
运行时异常(Unchecked Exception):由程序逻辑错误引起(如NullPointerException),编译时可不处理。

2. 异常处理机制

核心关键字:try-catch-finally用于捕获和处理异常;throw主动抛出异常;throws声明方法可能抛出的异常类型。
执行流程:
try监控代码块,异常发生时JVM创建异常对象并跳转至匹配的catch块。
finally块无论是否发生异常都会执行,常用于资源释放(如关闭文件流)。
底层原理:JVM通过异常处理表(Exception Table)记录try-catch范围,异常发生时按类型匹配处理逻辑。

3. 实践

精准捕获:避免笼统捕获Exception,优先按具体异常类型分多个catch块处理。
资源管理:使用try-with-resources(Java 7+)或finally确保资源释放,避免内存泄漏。
异常信息处理:避免空catch块,记录异常日志(e.printStackTrace()或日志框架)并考虑用户友好提示。

4. 自定义异常

创建方式:继承Exception(检查型)或RuntimeException(非检查型),添加带参构造器传递异常信息。
应用场景:封装业务逻辑错误(如登录失败InvalidCredentialsException),增强代码可读性和错误定位能力。

Throwable
+String message
+StackTraceElement[] stackTrace
+void printStackTrace()
«Severe System Errors»
Error
+OutOfMemoryError
+StackOverflowError
«Programmable Exceptions»
Exception
«Unchecked Exceptions»
RuntimeException
+NullPointerException
+IndexOutOfBoundsException
+IllegalArgumentException
«Checked Exceptions»
IOException
+FileNotFoundException
+EOFException
SQLException

5. IO流分类

按方向:
输入流:从外部读取数据(InputStream、Reader)。
输出流:向外部写入数据(OutputStream、Writer)。
按数据类型:
字节流:处理二进制数据(如图片、视频),核心类为InputStream/OutputStream。
字符流:处理文本数据(如日志文件),核心类为Reader/Writer,支持字符编码转换。

2. 常用类与使用场景

字节流:
FileInputStream/FileOutputStream:文件读写。
BufferedInputStream/BufferedOutputStream:通过缓冲区提升读写效率。
字符流:
FileReader/FileWriter:文本文件读写。
BufferedReader/BufferedWriter:支持按行读写(readLine()方法)。
转换流:InputStreamReader(字节→字符输入)、OutputStreamWriter(字符→字节输出),解决编码问题。

3. 高级流与缓冲区机制

缓冲区作用:减少直接IO操作次数,提升性能(默认缓冲区大小通常为8KB)。
其他高级流:
数据流:DataInputStream/DataOutputStream处理基本数据类型序列化。
对象流:ObjectInputStream/ObjectOutputStream实现对象序列化(需实现Serializable接口)。
打印流:PrintStream/PrintWriter提供格式化输出功能(如System.out)。

4. IO实践

资源关闭:使用try-with-resources自动管理资源,避免手动关闭遗漏。
性能优化:优先使用缓冲流处理大文件;字符流处理文本时指定统一编码(如UTF-8)。
异常处理:IO操作需捕获IOException,并在读写失败时提供回退机制(如重试或备份)。

«Byte Input Base Class»
InputStream
+int read()
+int read(byte[] b)
FileInputStream
ByteArrayInputStream
«Decorator Pattern»
FilterInputStream
BufferedInputStream
DataInputStream
OutputStream
FileOutputStream
ByteArrayOutputStream
FilterOutputStream
BufferedOutputStream
DataOutputStream
«Character Input Base Class»
Reader
+int read()
+int read(char[] cbuf)
InputStreamReader
FileReader
BufferedReader
Writer
OutputStreamWriter
FileWriter
BufferedWriter
;