java相关异常大全,持续更新~~~

72 篇文章 1 订阅
4 篇文章 0 订阅

[Java] 异常

1. NullPointerException

NullPointerException是Java中最常见的异常之一,通常在试图访问或操作一个null对象时引发。

示例代码

String str = null;
int length = str.length();

解决方法

在访问或操作对象之前,检查对象是否为null。

String str = null;
int length = 0;
if (str != null) {
    length = str.length();
}

2. ArrayIndexOutOfBoundsException

ArrayIndexOutOfBoundsException异常通常在试图访问数组的非法索引时引发。

示例代码

int[] array = new int[10];
int number = array[10];

解决方法

在访问数组元素之前,检查索引是否在有效范围内。

int[] array = new int[10];
int index = 10;
if (index >= 0 && index < array.length) {
    int number = array[index];
}

3. ClassCastException

ClassCastException异常通常在试图将一个对象强制转换为不兼容类型时引发。

示例代码

Object obj = new Integer(1);
String str = (String) obj;

解决方法

在执行类型转换之前,使用instanceof运算符检查对象是否是目标类型。

Object obj = new Integer(1);
if (obj instanceof String) {
    String str = (String) obj;
}

4. IOException

IOException是Java处理I/O操作时常见的异常,例如读取文件、网络通信等。

示例代码

InputStream is = new FileInputStream("non-exist-file.txt");

解决方法

  1. 检查文件路径、网络连接等是否正确。
  2. 使用try-catch语句处理可能的IOException
try {
    InputStream is = new FileInputStream("non-exist-file.txt");
} catch (IOException e) {
    e.printStackTrace();
}

5. FileNotFoundException

FileNotFoundExceptionIOException的一个子类,通常在试图打开不存在的文件时引发。

示例代码

InputStream is = new FileInputStream("non-exist-file.txt");

解决方法

  1. 检查文件路径是否正确。
  2. 使用try-catch语句处理可能的FileNotFoundException
try {
    InputStream is = new FileInputStream("non-exist-file.txt");
} catch (FileNotFoundException e) {
    e.printStackTrace();
}

6. NumberFormatException

NumberFormatException通常在试图将一个不合法的字符串转换为数字时引发。

示例代码

int number = Integer.parseInt("not a number");

解决方法

在执行类型转换之前,检查字符串是否可以转换为数字。

String str = "not a number";
try {
    int number = Integer.parseInt(str);
} catch (NumberFormatException e) {
    e.printStackTrace();
}

[Spring Cloud] 异常

1. FeignClient 异常

Feign 是 Spring Cloud 中用于声明式 HTTP 客户端的工具,它简化了 HTTP 请求的发送和接收过程。然而,在使用 Feign 时,你可能会遇到一些问题。

1.1 RetryableException

Feign 在请求失败时会抛出 RetryableException 异常。这通常是由网络问题或远程服务无法正确响应请求所导致的。例如,以下代码可能会抛出 RetryableException

@FeignClient("remote-service")
public interface RemoteServiceClient {
    @RequestMapping(method = RequestMethod.GET, value = "/data")
    String getData();
}

@Autowired
private RemoteServiceClient remoteServiceClient;

public void requestData() {
    String data = remoteServiceClient.getData();  // 这里可能会抛出 RetryableException
}

解决方法:

  1. 检查网络连接和远程服务的状态。
  2. 调整 Feign 的超时设置,例如 feign.client.config.default.readTimeout 和 feign.client.config.default.connectTimeout
  3. 配置 Feign 的重试机制。

具体例子:

17|pic-policyservice  | Exception in thread "pool-5-thread-46" feign.RetryableException: Read timed out executing POST http://xxx/importnewcont/customListState
17|pic-policyservice  | 	at feign.FeignException.errorExecuting(FeignException.java:132)
17|pic-policyservice  | 	at feign.SynchronousMethodHandler.executeAndDecode(SynchronousMethodHandler.java:113)
17|pic-policyservice  | 	at feign.SynchronousMethodHandler.invoke(SynchronousMethodHandler.java:78)
17|pic-policyservice  | 	at feign.ReflectiveFeign$FeignInvocationHandler.invoke(ReflectiveFeign.java:103)
17|pic-policyservice  | 	at com.sun.proxy.$Proxy132.customListState(Unknown Source)
17|pic-policyservice  | 	at com.riskeys.pic.policyservice.service.biz.impl.OfflinePolicyServiceImpl.lambda$policyImportNew$0(OfflinePolicyServiceImpl.java:334)
17|pic-policyservice  | 	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
17|pic-policyservice  | 	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
17|pic-policyservice  | 	at java.lang.Thread.run(Thread.java:748)
17|pic-policyservice  | Caused by: java.net.SocketTimeoutException: Read timed out
17|pic-policyservice  | 	at java.net.SocketInputStream.socketRead0(Native Method)
17|pic-policyservice  | 	at java.net.SocketInputStream.socketRead(SocketInputStream.java:116)
17|pic-policyservice  | 	at java.net.SocketInputStream.read(SocketInputStream.java:171)
17|pic-policyservice  | 	at java.net.SocketInputStream.read(SocketInputStream.java:141)
17|pic-policyservice  | 	at org.apache.http.impl.io.SessionInputBufferImpl.streamRead(SessionInputBufferImpl.java:137)
17|pic-policyservice  | 	at org.apache.http.impl.io.SessionInputBufferImpl.fillBuffer(SessionInputBufferImpl.java:153)
17|pic-policyservice  | 	at org.apache.http.impl.io.SessionInputBufferImpl.readLine(SessionInputBufferImpl.java:280)
17|pic-policyservice  | 	at org.apache.http.impl.conn.DefaultHttpResponseParser.parseHead(DefaultHttpResponseParser.java:138)
17|pic-policyservice  | 	at org.apache.http.impl.conn.DefaultHttpResponseParser.parseHead(DefaultHttpResponseParser.java:56)
17|pic-policyservice  | 	at org.apache.http.impl.io.AbstractMessageParser.parse(AbstractMessageParser.java:259)
17|pic-policyservice  | 	at org.apache.http.impl.DefaultBHttpClientConnection.receiveResponseHeader(DefaultBHttpClientConnection.java:163)
17|pic-policyservice  | 	at org.apache.http.impl.conn.CPoolProxy.receiveResponseHeader(CPoolProxy.java:157)
17|pic-policyservice  | 	at org.apache.http.protocol.HttpRequestExecutor.doReceiveResponse(HttpRequestExecutor.java:273)
17|pic-policyservice  | 	at org.apache.http.protocol.HttpRequestExecutor.execute(HttpRequestExecutor.java:125)
17|pic-policyservice  | 	at org.apache.http.impl.execchain.MainClientExec.execute(MainClientExec.java:272)

1.2 DecodeException

Feign 在无法解析 HTTP 响应时会抛出 DecodeException 异常。这通常是因为远程服务返回的数据格式和你的 Feign 客户端期望的格式不匹配。例如,以下代码可能会抛出 DecodeException

@FeignClient("remote-service")
public interface RemoteServiceClient {
    @RequestMapping(method = RequestMethod.GET, value = "/data")
    Data getData();
}

public class Data {
    private String value;

    // getters and setters...
}

@Autowired
private RemoteServiceClient remoteServiceClient;

public void requestData() {
    Data data = remoteServiceClient.getData();  // 这里可能会抛出 DecodeException
}

解决方法:

  1. 检查远程服务返回的数据格式,确保它和你的 Feign 客户端期望的格式匹配。
  2. 如果需要,你可以自定义 Feign 的解码器来处理特殊的数据格式。

2. Hystrix 异常

Hystrix 是 Spring Cloud 中用于断路器和服务降级的工具。在使用 Hystrix 时,你可能会遇到一些问题。

2.1 HystrixRuntimeException

Hystrix 在断路器打开或命令执行失败时会抛出 HystrixRuntimeException 异常。这通常是由于远程服务的问题或命令的错误所导致的。例如,以下代码可能会抛出 HystrixRuntimeException

@HystrixCommand(fallbackMethod = "fallback")
public String requestData() {
    return remoteServiceClient.getData();  // 这里可能会抛出 HystrixRuntimeException
}

public String fallback() {
    return "Fallback data";
}

解决方法:

  1. 检查远程服务的状态和你的 Hystrix 命令。
  2. 调整 Hystrix 的配置,例如超时设置和断路器阈值。
  3. 确保你的 Hystrix 命令有一个合适的 fallback 方法。

3. Eureka 异常

Eureka 是 Spring Cloud 中用于服务发现和注册的工具。在使用 Eureka 时,你可能会遇到一些问题。

3.1 UnknownHostException

Eureka 在无法连接到注册中心时会抛出 UnknownHostException 异常。这通常是由于网络问题或注册中心的地址错误所导致的。例如,以下代码可能会抛出 UnknownHostException

@SpringBootApplication
@EnableEurekaClient
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);  // 这里可能会抛出 UnknownHostException
    }
}

解决方法:

  1. 检查网络连接和注册中心的地址。
  2. 确保你的应用有正确的 Eureka 配置。

4. Config Server 异常

Config Server 是 Spring Cloud 中用于集中式配置管理的工具。在使用 Config Server 时,你可能会遇到一些问题。

4.1 NoSuchLabelException

Config Server 在无法找到指定的配置标签时会抛出 NoSuchLabelException 异常。这通常是由于配置仓库中没有对应的标签所导致的。例如,以下代码可能会抛出 NoSuchLabelException

@Value("${custom.property}")
private String customProperty;

解决方法:

  1. 检查你的配置仓库,确保它包含了你请求的标签。
  2. 确保你的应用有正确的 Config Server 配置。

5. Zuul 异常

Zuul 是 Spring Cloud 中用于路由和过滤的工具。在使用 Zuul 时,你可能会遇到一些问题。

5.1 ZuulException

Zuul 在路由失败或过滤器执行失败时会抛出 ZuulException 异常。这通常是由于网络问题、远程服务的问题或过滤器的错误所导致的。例如,以下代码可能会抛出 ZuulException

@SpringBootApplication
@EnableZuulProxy
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);  // 这里可能会抛出 ZuulException
    }
}

解决方法:

  1. 检查网络连接、远程服务的状态和你的 Zuul 过滤器。
  2. 调整 Zuul 的配置,例如超时设置和路由规则。

这可能是由以下原因导致的:

  1. 服务端响应过慢:远程服务器在处理你的请求时花费了过多的时间,超过了 Feign 客户端的读取超时时间(默认是1秒)。

  2. 网络问题:你的服务和远程服务器之间的网络连接可能存在问题,导致数据传输速度过慢。

  3. Feign 客户端的配置问题:你的 Feign 客户端的读取超时时间可能被设置得过短,不足以等待远程服务器的响应。

可以尝试以下方法来解决这个问题:

  1. 调整 Feign 客户端的读取超时时间:你可以增大 Feign 客户端的读取超时时间,给远程服务器更多的响应时间。你可以在 Feign 客户端的配置中设置 readTimeout 属性来实现这一点。

  2. 优化服务端处理速度:如果可能,你可以尝试优化远程服务器的处理速度,使其能在更短的时间内响应请求。

  3. 检查并优化网络连接:你可以检查你的服务和远程服务器之间的网络连接,看是否存在可以优化的地方。

  4. 使用重试机制:Feign 客户端提供了重试机制,你可以配置它在读取超时时自动重试请求。但请注意,这可能会增加服务的负载,只有在你确信远程服务器可以处理更多请求时,才应使用这种方法。

[MySQL]异常

1. JDBC连接异常

JDBC(Java Database Connectivity)是Java中用于连接数据库的一种技术。在使用JDBC连接MySQL时,你可能会遇到一些问题。

1.1 SQLException: No suitable driver found

当JDBC无法找到合适的驱动程序来连接MySQL时,会抛出这个异常。例如,以下代码可能会抛出这个异常:

Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb", "user", "password");

解决方法

  1. 确保你已经在项目中正确地引入了MySQL的JDBC驱动库。
  2. 在调用DriverManager.getConnection()之前,确保已经加载了驱动类,例如:
Class.forName("com.mysql.cj.jdbc.Driver");
Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb", "user", "password");

1.2 SQLException: Access denied for user

当使用的用户名和密码无法连接到MySQL时,会抛出这个异常。例如,以下代码可能会抛出这个异常:

Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb", "wrong-user", "wrong-password");

解决方法

  1. 检查你的用户名和密码,确保它们是正确的。
  2. 如果你无法记住正确的用户名和密码,你可能需要联系数据库管理员。

2. SQL语法异常

在使用SQL语句操作MySQL时,如果SQL语句的语法有误,就可能会抛出异常。

2.1 SQLException: You have an error in your SQL syntax

当你的SQL语句语法有误时,会抛出这个异常。例如,以下代码可能会抛出这个异常:

Statement statement = connection.createStatement();
statement.execute("SELECT * FROM");

解决方法

  1. 检查你的SQL语句,确保它的语法是正确的。
  2. 使用SQL工具(如MySQL Workbench)测试你的SQL语句。

3. 数据完整性异常

在操作MySQL数据时,如果违反了数据完整性约束,就可能会抛出异常。

3.1 SQLException: Duplicate entry

当插入的数据违反了唯一性约束时,会抛出这个异常。例如,以下代码可能会抛出这个异常:

Statement statement = connection.createStatement();
statement.execute("INSERT INTO users (id, name) VALUES (1, 'Alice')");
statement.execute("INSERT INTO users (id, name) VALUES (1, 'Bob')");

解决方法

  1. 检查你的数据,确保它不违反任何唯一性约束。
  2. 如果需要插入重复的数据,你可能需要修改表的结构或使用其他的数据处理策略。

4. 并发控制异常

在多线程环境中操作MySQL时,如果没有正确地控制并发,就可能会抛出异常。

4.1 SQLException: Lock wait timeout exceeded

当一个线程等待锁超时时,会抛出这个异常。例如,以下代码可能会抛出这个异常:

// Thread 1
connection.setAutoCommit(false);
Statement statement1 = connection.createStatement();
statement1.execute("UPDATE users SET name = 'Alice' WHERE id = 1");

// Thread 2
Statement statement2 = connection.createStatement();
statement2.execute("UPDATE users SET name = 'Bob' WHERE id = 1");

解决方法

  1. 检查你的并发控制策略,确保所有的线程都可以在合理的时间内获取到锁。
  2. 如果可能,尝试减少锁的使用,例如,通过使用乐观锁或者避免长时间持有锁

[调用外部接口]异常

1. IOException

IOException是Java处理I/O操作时常见的异常,例如读取文件、网络通信等。在调用公众号接口时,如果网络连接出现问题,就可能会抛出这个异常。

示例代码

URL url = new URL("https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET");
HttpURLConnection connection = (HttpURLConnection) url.openConnection();

解决方法

  1. 检查网络连接是否正常。
  2. 检查URL是否正确。
  3. 使用try-catch语句处理可能的IOException
try {
    URL url = new URL("https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET");
    HttpURLConnection connection = (HttpURLConnection) url.openConnection();
} catch (IOException e) {
    e.printStackTrace();
}

2. JSONException

JSONException通常在处理JSON数据时出现问题时抛出,例如JSON格式错误,或者试图访问不存在的JSON字段。

示例代码

String jsonStr = "{\"access_token\":\"ACCESS_TOKEN\",\"expires_in\":7200}";
JSONObject jsonObject = new JSONObject(jsonStr);
String token = jsonObject.getString("token");

解决方法

  1. 检查JSON数据的格式是否正确。
  2. 检查是否正确地访问了JSON字段。
  3. 使用try-catch语句处理可能的JSONException
try {
    String jsonStr = "{\"access_token\":\"ACCESS_TOKEN\",\"expires_in\":7200}";
    JSONObject jsonObject = new JSONObject(jsonStr);
    String token = jsonObject.getString("access_token");
} catch (JSONException e) {
    e.printStackTrace();
}

3. IllegalArgumentException

IllegalArgumentException通常在方法接收到非法参数时抛出。

示例代码

String appid = null;
String secret = "APPSECRET";
URL url = new URL("https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=" + appid + "&secret=" + secret);

解决方法

  1. 检查参数是否正确。
  2. 使用try-catch语句处理可能的IllegalArgumentException
try {
    String appid = "APPID";
    String secret = "APPSECRET";
    URL url = new URL("https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=" + appid + "&secret=" + secret);
} catch (IllegalArgumentException e) {
    e.printStackTrace();
}

4. NoSuchAlgorithmException

NoSuchAlgorithmException通常在试图获取不存在的加密算法时抛出。

示例代码

MessageDigest md = MessageDigest.getInstance("NoSuchAlgorithm");

解决方法

  1. 检查加密算法的名称是否正确。
  2. 使用try-catch语句处理可能的NoSuchAlgorithmException
try {
    MessageDigest md = MessageDigest.getInstance("MD5");
} catch (NoSuchAlgorithmException e) {
    e.printStackTrace();
}

5. KeyManagementException

KeyManagementException通常在处理Java密钥管理时出现问题时抛出。

示例代码

SSLContext context = SSLContext.getInstance("TLS");
context.init(null, null, null);

解决方法

  1. 检查SSLContext的初始化是否正确。
  2. 使用try-catch语句处理可能的KeyManagementException
try {
    SSLContext context = SSLContext.getInstance("TLS");
    context.init(null, new TrustManager[]{new X509TrustManager() {
        public void checkClientTrusted(X509Certificate[] chain, String authType) {}
        public void checkServerTrusted(X509Certificate[] chain, String authType) {}
        public X509Certificate[] getAcceptedIssuers() { return new X509Certificate[]{}; }
    }}, new SecureRandom());
} catch (KeyManagementException e) {
    e.printStackTrace();
}

[文件操作]异常

1. FileNotFoundException

FileNotFoundException通常在试图打开不存在的文件或目录,或者因为某种原因无法创建文件或目录时抛出。

示例代码

FileInputStream fis = new FileInputStream("non-exist-file.txt");

解决方法

  1. 检查文件路径是否正确。
  2. 使用try-catch语句处理可能的FileNotFoundException
try {
    FileInputStream fis = new FileInputStream("non-exist-file.txt");
} catch (FileNotFoundException e) {
    e.printStackTrace();
}

2. IOException

IOException是Java处理I/O操作时常见的异常,例如读取文件、网络通信等。

示例代码

FileReader reader = new FileReader("file.txt");
int data = reader.read();

解决方法

  1. 检查文件路径、网络连接等是否正确。
  2. 使用try-catch语句处理可能的IOException
try {
    FileReader reader = new FileReader("file.txt");
    int data = reader.read();
} catch (IOException e) {
    e.printStackTrace();
}

3. SecurityException

SecurityException通常在试图访问没有权限的文件或目录时抛出。

示例代码

File file = new File("restricted-file.txt");
file.delete();

解决方法

  1. 检查应用程序是否有足够的权限访问文件或目录。
  2. 使用try-catch语句处理可能的SecurityException
try {
    File file = new File("restricted-file.txt");
    file.delete();
} catch (SecurityException e) {
    e.printStackTrace();
}

4. EOFException

EOFException通常在试图读取超出文件末尾的数据时抛出。

示例代码

RandomAccessFile raf = new RandomAccessFile("file.txt", "r");
byte[] b = new byte[1000];
raf.readFully(b);

解决方法

  1. 检查文件的大小,确保读取的数据不超过文件的大小。
  2. 使用try-catch语句处理可能的EOFException
try {
    RandomAccessFile raf = new RandomAccessFile("file.txt", "r");
    byte[] b = new byte[(int)raf.length()];
    raf.readFully(b);
} catch (EOFException e) {
    e.printStackTrace();
}

[浏览器]浏览器报错:

Failed to load response data: Request content was evicted from inspector cac:
这个错误常见于开发者使用浏览器的开发者工具(如 Chrome 的 DevTools)进行调试时。这个错误表明请求的内容已经从浏览器的检查器缓存(inspector cache)中移除了。
浏览器的检查器缓存有一个大小限制,当缓存的数据超过这个限制时,旧的数据会被移除。因此,如果你在 DevTools 中看到这个错误,那可能是因为你的请求响应数据太大,或者你在一个会话中发送了太多的请求,导致旧的请求数据被移除。
解决这个问题的一种方法是尝试减少你的请求数据的大小,或者减少在一个会话中发送的请求数量。你也可以考虑使用其他的工具或方法来查看你的请求响应数据,比如使用 Postman 这样的 API 测试工具,或者在你的代码中添加日志来记录请求响应数据。
另外,如果你只是想查看某个特定请求的响应数据,你可以尝试在发送请求后立即查看响应数据,而不是等到后面再去查看,这样可以避免数据被从检查器缓存中移除。

👉 💐🌸 公众号请关注 "果酱桑", 一起学习,一起进步! 🌸💐
 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值