未报告的异常java.io.IOException

时间:2010-10-07 19:12:32

标签: java exception-handling

此代码有什么问题

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

/**
 *
 * @author Master
 */
public class Server {
    try
    {
    ServerSocket S = new ServerSocket(3333);
    Socket So = S.accept();
    }
    catch(IOException e)
    {
        System.out.println("IOError");
    }

}

首先我编写了代码而没有尝试catch,我得到了一个unreported exception java.io.IOException; must be caught or declared to be thrown错误,但Netbeans没有建议我添加一个try-catch块。现在我手动添加了try-catch块,但它仍然显示错误,并建议我必须添加另一个try-catch块!

alt text

3 个答案:

答案 0 :(得分:9)

您正尝试在课程的顶层添加try块 - 您不能这样做。尝试块必须在方法或初始化块中。

如果确实想在构造时创建服务器套接字,请将代码放在构造函数中:

public class Server {

    private ServerSocket serverSocket;
    private Socket firstConnection;

    public Server {
        try
        {
            serverSocket = new ServerSocket(3333);
            firstConnection = serverSocket.accept();
        }
        catch(IOException e)
        {
            System.out.println("IOError");
        }
    }
}

我假设您将拥有真正的异常处理(或重新抛出),而不仅仅是捕获IOException并继续,当然?

答案 1 :(得分:0)

这不是有效的Java。此代码需要位于块,方法或构造函数中。

答案 2 :(得分:0)

从IDE的屏幕截图中,错误“必须被捕获或声明被抛出”并不是您唯一的错误。

如果你的语法很远,编译器可能会报告几个错误,其中一些错误是其他错误的副作用 - 比如不将这个代码包含在方法中(我确定旁边的红色X) catch块报告了类似的错误。)