ConnectionException无消息文本是否正常?OpenJDK11/17技术问询
Java.net.ConnectException.getMessage()返回null的问题解答
在OpenJDK 11与OpenJDK 17环境下执行以下Java代码:
try { HttpRequest httpreq = HttpRequest.newBuilder().uri(URI.create("http://blabla.blabla.blabla")).build(); HttpClient httpclnt = HttpClient.newBuilder().build(); HttpResponse<String> httpresp = httpclnt.send(httpreq, HttpResponse.BodyHandlers.ofString()); } catch (Exception e) { System.out.println("EXCEPTION: " + e + " - " + e.getMessage()); }
捕获到的java.net.ConnectException的getMessage()返回null,输出结果如下:
EXCEPTION: java.net.ConnectException - null
问题解答
- 该异常无消息文本是正常情况。
- Java规范明确允许异常的消息文本为null。
ConnectException作为IOException的子类,其提供的构造方法支持传入null作为消息参数。当底层网络连接失败的原因没有明确的可读文本描述时,JDK的网络实现就会抛出不带消息的ConnectException,这完全符合Java的异常设计逻辑。
另外,直接打印异常对象时输出类名,是因为Throwable的toString()方法在消息为null且没有关联cause的情况下,只会返回异常类的全限定名,这也和你看到的输出结果一致。
内容的提问来源于stack exchange,提问作者chris01
相关产品推荐
相关产品推荐

