java - 无法理解带有 throws 的外部代码

标签 java exception io throws

我试图理解其他人编写的一些代码,但不明白其中如何使用“抛出”。代码如下:

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。

我的问题是:

  1. 抛出部分写得正确吗?我认为这里应该有一些处理机制,但我没有信心。
  2. 为什么代码现在可以工作,并且在这种状态下没有“抛出”就不能工作?如果没有 catch/try 语句,它不应该返回错误吗?我没有看到没有“抛出”和没有捕获/尝试的抛出之间的区别。

最佳答案

正如您所指出的,“带有抛出的代码应该以某种方式处理”。但是,try-catch 子句并不是处理 throws 声明的唯一方法。另一种选择可能是决定不处理该异常,只需向调用方法添加一个 throws 子句即可。您可以继续添加这些 throws 声明,直到到达 main,在这种情况下,您实际上是在声明您的程序不处理错误,并且在出现此类错误时会毫不客气地崩溃发生错误。

这并不优雅或“适当”,但是嘿,它有效。

关于java - 无法理解带有 throws 的外部代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32770207/

相关文章:

c# - 构造函数和抛出异常

c - 抛出错误 'std::bad_alloc' ,OpenCL 对于 CPU 而不是 GPU

java jvisualvm/jconsole 具有线性内存消耗

java - 关于Java的复制构造函数问题

java - JVM如何检查程序中发生了哪种类型的异常?

c - 解析具有特定关键字匹配的文本文件

c# - 快速轻松地从一个文件加载所需内容?

c - 最后一个 scanf() 被跳过或忽略

java - 更改行中 ListView 中行的颜色

java - 删除二维ArrayList中的重复条目