为什么我的方法未定义类型对象?

时间:2014-01-20 23:48:59

标签: java sockets

我不确定为什么Eclipse会给我这个错误:

  

类型listen()

的方法Object未定义

我犯了什么简单的错误?另外,我的代码是编写main方法的正确方法,该方法实例化EchoServer0对象并调用其listen方法吗?

public class EchoServer0 {    
    public void listen() {
        ServerSocket socket = null;
        try{
            socket = new ServerSocket(2013);
            System.out.println("Opened server socket");
            socket.setSoTimeout(2000);
            socket.accept();
            socket.close();
        }
        catch (SocketTimeoutException ste){
            System.out.println("Timed out after " + 2000 + " ms");
        }
        catch (Exception e){
            System.out.println(e.getClass().getName()+" at server: " + e.getMessage());
        }       
    }

    public static void main(String[] args) {
        Object EchoServer0;
        EchoServer0.listen();
    } 
}

4 个答案:

答案 0 :(得分:9)

将您的主要内容更改为:

public static void main(String[] args) {
    EchoServer echoServer = new EchoServer();
    echoServer.listen();
}

当你宣布Object EchoServer0;时,你会犯一些错误。

  1. EchoServer0的类型为Object,因此它没有listen()方法。
  2. 您还需要使用new创建一个实例。
  3. 另一个问题,这只是关于命名约定,你应该用小写字母,echoServer0而不是EchoServer0来调用你的变量。大写名称通常用于类名。
  4. 您不应该创建与其类同名的变量。令人困惑。

答案 1 :(得分:1)

试试这个。

public static void main(String[] args) {
    EchoServer0 myServer;
    myServer = new EchoServer0();
    myServer.listen();
}

您尝试做的是声明Object类型的变量,而不是为该引用的变量创建任何内容,然后尝试调用不存在的方法(在类Object中)在一个尚未创建的对象上。它永远不会起作用。

答案 2 :(得分:1)

该行

Object EchoServer0;

表示您正在分配名为Object的{​​{1}}。这与班级EchoServer0无关。此外,该对象未初始化,因此EchoServer0EchoServer0。类和标识符具有单独的命名空间。这实际上会编译:

null

请遵循Java命名标准:类以大写字母开头,标识符以小写字母开头,常量和String String = "abc"; // My use of String String was deliberate. 是全大写字母。

enum

答案 3 :(得分:0)

应该是那样的

public static void main(String[] args) {
        EchoServer0 e = new EchoServer0();
        // TODO Auto-generated method stub
        e.listen();
}

您的Object类型的变量确实没有这样的方法,但您在上面定义的类型EchoServer0肯定有。