为什么我的方法未定义类型对象?
我不确定为什么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;
你有一些错误。
- EchoServer0的类型为Object,因此它没有方法listen()
- 您还需要使用
new
创建它的实例 - 另一个问题,这只是关于命名约定,你应该用小写字母调用你的变量,echoServer0而不是EchoServer0。 大写名称通常用于类名。
- 您不应该创建与其类名相同的变量。 这令人困惑。
尝试这个。
public static void main(String[] args) { EchoServer0 myServer; myServer = new EchoServer0(); myServer.listen(); }
您要做的是声明一个Object
类型的变量,而不是为该引用的变量创建任何内容,然后尝试在尚未创建的Object
上调用一个不存在的方法(在Object
类中)。 它永远不会起作用。
这条线
Object EchoServer0;
说你正在分配一个名为EchoServer0
的Object
。 这与EchoServer0
类无关。 此外,该对象未初始化,因此EchoServer0
为null
。 类和标识符具有单独的命名空间。 这实际上会编译:
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
肯定有。