Java高频面试之SE-16
hello啊,各位观众姥爷们!!!本牛马baby今天又来了!哈哈哈哈哈嗝🐶
Java中异常的处理方式有哪些?
在 Java 中,异常的处理方式主要有以下几种:
1. 使用 try-catch
语句
try-catch
结构是 Java 异常处理的基本方式。可以将可能抛出异常的代码放在 try
块中,并在 catch
块中处理这些异常。
try {
// 可能抛出异常的代码
} catch (ExceptionType e) {
// 处理异常
}
可以有多个 catch
块来捕获不同类型的异常。
try {
// 可能抛出异常的代码
} catch (IOException e) {
// 处理 IO 异常
} catch (SQLException e) {
// 处理 SQL 异常
} catch (Exception e) {
// 处理其他异常
}
2. 使用 finally
块
finally
块用于放置无论如何都会执行的代码,通常用于释放资源,比如关闭文件流或数据库连接。
try {
// 可能抛出异常的代码
} catch (Exception e) {
// 处理异常
} finally {
// 清理资源,例如关闭流或数据库连接
}
3. 使用 try-with-resources
从 Java 7 开始,try-with-resources
语法允许在声明资源的同时自动管理其关闭。这对于处理如文件流、网络连接等可关闭的资源尤为重要。
try (BufferedReader br = new BufferedReader(new FileReader("file.txt"))) {
// 使用 br 读取文件内容
} catch (IOException e) {
// 处理 IO 异常
}
4. 抛出异常
使用 throw
语句可以主动抛出异常。可以抛出系统提供的异常,也可以抛出自定义异常。
throw new IllegalArgumentException("Invalid argument");
在方法声明中使用 throws
关键字指明该方法可能抛出的异常,这样调用该方法的代码就必须处理这些异常。
public void myMethod() throws IOException, SQLException {
// 可能抛出 IO 和 SQL 异常的代码
}
5. 自定义异常
可以创建自己的异常类,以满足特定需求。自定义异常类通常继承 Exception
或 RuntimeException
。
public class MyCustomException extends Exception {
public MyCustomException(String message) {
super(message);
}
}
6. 记录异常
通过日志记录异常信息可以帮助开发者追踪问题,常用的日志记录框架有 Log4j、SLF4J 等。
try {
// 可能抛出异常的代码
} catch (Exception e) {
logger.error("An error occurred", e);
}
7. 创建全局异常处理机制
在大型应用中,常常需要将异常处理集中到一个地方,例如使用 Spring 的全局异常处理机制,使用 @ControllerAdvice
和 @ExceptionHandler
注解来集中处理控制器中的异常。
@ControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(Exception.class)
public ResponseEntity<String> handleException(Exception e) {
return new ResponseEntity<>(e.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR);
}
}
Java中的IO流体系说一下
Java中的IO流体系是用于处理输入与输出的类库,提供了对数据的读写操作。Java的IO流体系分为几种主要的类和接口,通过这些类和接口,开发者可以进行文件操作、数据读取、字符处理等。大体上来说,Java IO流可以分为以下几种类型:
1. 字节流和字符流
-
字节流(InputStream 和 OutputStream)
字节流用于处理所有类型的 I/O,包括音频、视频和其他二进制数据。主要的类包括:InputStream
:字节输入流的抽象类。OutputStream
:字节输出流的抽象类。- 常用的子类:
FileInputStream
:用于从文件中读取字节。FileOutputStream
:用于向文件中写入字节。BufferedInputStream
:为其他输入流提供缓冲功能,以提高效率。BufferedOutputStream
:为其他输出流提供缓冲功能。
-
字符流(Reader 和 Writer)
字符流专门用于处理字符数据。它们可以方便地处理文本文件和字符编码。主要的类包括:Reader
:字符输入流的抽象类。Writer
:字符输出流的抽象类。- 常用的子类:
FileReader
:用于从文本文件中读取字符。FileWriter
:用于向文本文件中写入字符。BufferedReader
:为字符输入流提供缓冲功能,常用于按行读取文本。BufferedWriter
:为字符输出流提供缓冲功能。
2. 标准输入和输出
Java 提供了一种便捷的方式来处理标准输入和输出:
System.in
:标准输入流,通常与键盘输入相关联,可以被视为一个InputStream
。System.out
:标准输出流,通常与控制台输出相关联,可以被视为一个OutputStream
。
3. 数据流
Java 提供了数据流(Data Input and Output)类,用于高效地读写基本数据类型(如 int、float、char等):
DataInputStream
:用于从输入流中读取基本数据类型。DataOutputStream
:用于向输出流中写入基本数据类型。
4. 对象流
Java 的对象流(Object Input/Output)允许你序列化和反序列化 Java 对象:
ObjectInputStream
:用于从输入流中读取对象。ObjectOutputStream
:用于向输出流中写入对象。- 序列化和反序列化允许将对象的状态写入流中以在后续恢复。
5. 内存流
内存流使用内存作为输入和输出的源,与磁盘操作相对:
ByteArrayInputStream
:用于在内存中读取字节。ByteArrayOutputStream
:用于在内存中写入字节。CharArrayReader
和CharArrayWriter
:用于在内存中读取和写入字符。
6. NIO(New IO)
Java 1.4 引入了 NIO,为高效的 I/O 操作提供了更强大的功能,并支持非阻塞 I/O:
- Channel:通道代替了传统的流,提供了双向传输的能力。
- Buffer:用于在通道和数据源之间存储数据的容器。
- Selectors:可以注册多个通道以处理多个输入/输出事件,从而实现非阻塞 I/O。
7. 过滤流
过滤流用于对输入和输出流进行包装,提供额外的功能,例如:
BufferedInputStream
:在字节输入流中添加缓冲。从而提高读操作的效率。BufferedOutputStream
:在字节输出流中添加缓冲。PrintWriter
:用于字符输出,可以直接写入格式化的文本。
图标更换
https://pan.quark.cn/s/d366949260e9
IDEA ji huo
https://pan.quark.cn/s/4216736c0427
🎬大全
https://kdocs.cn/l/cqhxNU9I2lLD