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

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

对于Object类型,方法listen()未定义

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

 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(); } } 

将您的主要更改为:

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

声明Object EchoServer0; 你有一些错误。

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

尝试这个。

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

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

这条线

 Object EchoServer0; 

说你正在分配一个名为EchoServer0Object 。 这与EchoServer0类无关。 此外,该对象未初始化,因此EchoServer0null 。 类和标识符具有单独的命名空间。 这实际上会编译:

 String String = "abc"; // My use of String String was deliberate. 

请遵循Java命名标准:类以大写字母开头,标识符以小写字母开头,常量和enum以全大写字母开头。

 public final String ME = "Eric Jablow"; public final double GAMMA = 0.5772; public enum Color { RED, ORANGE, YELLOW, GREEN, BLUE, INDIGO, VIOLET} public COLOR background = Color.RED; 

它应该是那样的

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

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