我试图理解其他人编写的一些代码,但不明白其中如何使用“抛出”。代码如下:
package test;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
public class WhoisQuery {
public static void main(String[] args) throws Exception {
String domainNameToCheck = "abcnews.com";
performWhoisQuery("whois.enom.com", 43, domainNameToCheck);
performWhoisQuery("whois.internic.net", 43, domainNameToCheck);
}
public static void performWhoisQuery(String host, int port, String query) throws Exception {
System.out.println("**** Performing whois query for '" + query + "' at " + host + ":" + port);
Socket socket = new Socket(host, port);
InputStreamReader isr = new InputStreamReader(socket.getInputStream());
BufferedReader in = new BufferedReader(isr);
PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
out.println(query);
String line = "";
while ((line = in.readLine()) != null) {
System.out.println(line);
}
}
据我了解,带有抛出的代码应该以某种方式处理。但是,没有像 try catch 这样的处理机制。那么这里抛出的确切目的是什么?我测试了它,没有抛出它就返回了 IOException。
我的问题是:
- 抛出部分写得正确吗?我认为这里应该有一些处理机制,但我没有信心。
- 为什么代码现在可以工作,并且在这种状态下没有“抛出”就不能工作?如果没有 catch/try 语句,它不应该返回错误吗?我没有看到没有“抛出”和没有捕获/尝试的抛出之间的区别。
最佳答案
正如您所指出的,“带有抛出的代码应该以某种方式处理”。但是,try-catch 子句并不是处理 throws
声明的唯一方法。另一种选择可能是决定不处理该异常,只需向调用方法添加一个 throws 子句即可。您可以继续添加这些 throws
声明,直到到达 main
,在这种情况下,您实际上是在声明您的程序不处理错误,并且在出现此类错误时会毫不客气地崩溃发生错误。
这并不优雅或“适当”,但是嘿,它有效。
关于java - 无法理解带有 throws 的外部代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32770207/