2011-12-03 41 views
0

所以这是我的代码:如何在不调用包的情况下调用我在Java中创建的变量? (其在同级别)

ServerSocket server = new ServerSocket(port); 
Socket sock = new server.accept(); 

它说:“服务器无法解析为一个类型”。
就像你所看到的,我做了一个名为“服务器”的变量。我怎样才能使用server.accept()?
哦,我试过Socket sock = new this.server.accept();Socket sock = new accept();Socket sock = new this.accept();但他们都没有工作。

回答

4

你想创建一个新的对象或调用一个现有的方法吗?如果你只是想用server.accept(),你需要在方法调用之前除去new

ServerSocket server = new ServerSocket(port); 
Socket sock = server.accept(); 

当你想要实例化一个类型的new keyword时才使用。一旦你有了这种类型的实例,你再也不需要再使用new,只需使用包含该实例的变量就可以调用它。

当前编译器试图使用server作为一种类型,这就是为什么你会收到一个错误,抱怨它没有被解析为一个。 :D

-1

这听起来像问题是编译器无法解析“ServerSocket”。

问:这个类在哪里定义?

一个你分配“服务器”(即一旦你有一个“ServerSocket”的实例),那么你不需要调用“新”。

建议的修改:

import java.net.*; 

public class MyClass { 

    public void SomeMethod() { 
    int port = SomeNumber; 
    ... 
    try { 
     java.net.ServerSocket socket = new ServerSocket (port); 
     Socket clientSocket = socket.accept(); 
     ... 
+0

提示:编译器不寻找ServerSocket,但“服务器” –

+0

@Yanick Rochon:提示 - 我只是想帮助。你的“暗示”(和你无保证的降价)不受欢迎:) – paulsm4

+2

你的答案的第一部分根本不正确,而且我非常友善地告诉你为什么我低估了。这远远超过我个人通常拥有的。 –

1

Java语言预计new应遵循的一个类名或数组类型的名字,并说要创建一个新的对象。

但是你并没有试图在这里创建一个新的对象。您正尝试在现有对象上调用accept()方法。

摆脱第二行的new


的原因有些混乱的消息是,编译器认为您试图创建一个对象,并试图匹配“server.accept”一个合格的类名称;即“服务器”包中称为“接受”的类。这些都不存在,所以它说它不能这样做。它没有意识到“服务器”名称是变量名称的原因是变量的标识符和类和包的标识符位于不同的名称空间中。为了说明这一点,如果你定义一个类,如下所示:

package server; 
public class accept { 
} 

那么你的两个行的代码段会给出不同的编译错误,大致为“你不能指定类型的对象‘server.accept行’到一个类型Socket的变量“。

相关问题