温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

java网络异常如何捕获

发布时间:2026-10-03 17:20:00 来源:亿速云 阅读:87 作者:小樊 栏目:编程语言

在 Java 中,网络异常通常属于 java.io.IOException 或其子类(最常见的是 java.net.SocketException、java.net.UnknownHostException、java.net.ConnectException 等)。下面从基本捕获方式、常见网络异常类型、最佳实践三个层面说明。


一、最基础的捕获方式

网络操作(如 Socket、URLConnection、HttpClient)必须处理异常:

import java.io.IOException;
import java.net.Socket;

public class NetDemo {
    public static void main(String[] args) {
        try {
            Socket socket = new Socket("localhost", 8080);
        } catch (IOException e) {
            System.out.println("网络异常:" + e.getMessage());
            e.printStackTrace();
        }
    }
}

二、常见网络异常及分类捕获

1️⃣ 常见网络异常类型

异常类 说明
IOException 所有 I/O 异常的父类
SocketException Socket 通信异常(断网、重置)
UnknownHostException 域名无法解析
ConnectException 连接被拒绝(端口未开)
SocketTimeoutException 连接或读取超时
NoRouteToHostException 无法路由到主机

2️⃣ 分类捕获示例(推荐)

import java.net.*;
import java.io.*;

public class NetCatchDemo {
    public static void main(String[] args) {
        try {
            Socket socket = new Socket("www.example.com", 80);
        } catch (UnknownHostException e) {
            System.out.println("域名解析失败");
        } catch (ConnectException e) {
            System.out.println("连接被拒绝");
        } catch (SocketTimeoutException e) {
            System.out.println("连接超时");
        } catch (IOException e) {
            System.out.println("其他网络异常");
        }
    }
}

⚠️ 捕获顺序必须从“子类 → 父类”


三、使用 try-with-resources(推荐)

避免资源泄漏:

try (Socket socket = new Socket("localhost", 8080);
     BufferedReader reader = new BufferedReader(
         new InputStreamReader(socket.getInputStream()))) {

    System.out.println(reader.readLine());

} catch (IOException e) {
    e.printStackTrace();
}

四、HTTP 请求中的异常捕获(HttpURLConnection)

try {
    URL url = new URL("https://example.com");
    HttpURLConnection conn = (HttpURLConnection) url.openConnection();
    conn.setConnectTimeout(5000);
    conn.setReadTimeout(5000);

    int code = conn.getResponseCode();
    System.out.println(code);

} catch (SocketTimeoutException e) {
    System.out.println("请求超时");
} catch (IOException e) {
    System.out.println("网络错误");
}

五、Java 11+ HttpClient 异常

HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
        .uri(URI.create("https://example.com"))
        .build();

try {
    HttpResponse<String> response =
            client.send(request, HttpResponse.BodyHandlers.ofString());
} catch (IOException e) {
    System.out.println("网络异常");
} catch (InterruptedException e) {
    Thread.currentThread().interrupt();
}

六、最佳实践总结 ✅

✅ 明确捕获具体异常
✅ 设置超时时间(防止线程卡死)
✅ 使用 try-with-resources
✅ 记录日志而不是只 printStackTrace()
✅ 对网络异常进行重试或降级处理


如果你有具体场景(如 Socket、HTTP、RPC、Spring、OkHttp),我可以给你更针对性的异常捕获方案。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI
助
手