如何在不调用包的情况下调用Java中生成的变量?(它在同一类中)

如何在不调用包的情况下调用Java中生成的变量?(它在同一类中),java,variables,package,Java,Variables,Package,这是我的代码: ServerSocket server = new ServerSocket(port); Socket sock = new server.accept(); 它表示“服务器无法解析为类型”。 正如您所看到的,我创建了一个名为“server”的变量。如何使用server.accept()? 哦,我尝试了socketsock=newthis.server.accept()和套接字sock=new accept()和套接字sock=newthis.accept()但它们都不起作用

这是我的代码:

ServerSocket server = new ServerSocket(port);
Socket sock = new server.accept();
它表示“服务器无法解析为类型”。
正如您所看到的,我创建了一个名为“server”的变量。如何使用server.accept()?

哦,我尝试了
socketsock=newthis.server.accept()
套接字sock=new accept()
套接字sock=newthis.accept()但它们都不起作用。

您是在尝试创建新对象还是在现有对象上调用方法?如果只想使用
server.accept()
,则需要在方法调用之前删除
new

ServerSocket server = new ServerSocket(port);
Socket sock = server.accept();
仅当您要实例化类型时才使用。一旦有了该类型的实例,就不再需要再次使用
new
,只需使用包含该实例的变量对其调用方法即可


当前编译器正在尝试使用
服务器
作为类型,这就是为什么您会收到一个错误,抱怨没有将其解析为一个类型:D

您是在尝试创建新对象还是在现有对象上调用方法?如果只想使用
server.accept()
,则需要在方法调用之前删除
new

ServerSocket server = new ServerSocket(port);
Socket sock = server.accept();
仅当您要实例化类型时才使用。一旦有了该类型的实例,就不再需要再次使用
new
,只需使用包含该实例的变量对其调用方法即可


当前编译器正在尝试使用
服务器
作为类型,这就是为什么您会收到一个错误,抱怨没有将其解析为一个类型:听起来问题是编译器无法解析“ServerSocket”

问:这个类是在哪里定义的

如果您分配了一个“服务器”(即,一旦您有了一个“ServerSocket”实例),那么您就不需要调用“new”

建议更改:

import java.net.*;

public class MyClass {

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

听起来问题在于编译器无法解析“ServerSocket”

问:这个类是在哪里定义的

如果您分配了一个“服务器”(即,一旦您有了一个“ServerSocket”实例),那么您就不需要调用“new”

建议更改:

import java.net.*;

public class MyClass {

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

Java语言希望
new
后面跟一个类名或数组类型名,并表示您正在创建一个新对象

但您并不是在这里尝试创建新对象。您正试图对现有对象调用
accept()
方法

去掉第二行的


产生这种令人困惑的消息的原因是,编译器认为您正在尝试创建一个对象,并且正在尝试将“server.accept”与限定的类名匹配;i、 e.“服务器”包中名为“接受”的类。这两个都不存在,所以它说它做不到。它没有意识到“服务器”名称是变量的名称的原因是变量的标识符以及类和包的标识符在不同的名称空间中。举例来说,如果您定义了一个类,如下所示:

package server;
public class accept {
}

然后,您的两行代码片段将给出一个不同的编译错误,类似于“您不能分配类型为”的server.accept“给类型为Socket的变量”。

Java语言希望
new
后面跟一个类名或数组类型名,并表示您正在创建一个新对象

但您并不是在这里尝试创建新对象。您正试图对现有对象调用
accept()
方法

去掉第二行的


产生这种令人困惑的消息的原因是,编译器认为您正在尝试创建一个对象,并且正在尝试将“server.accept”与限定的类名匹配;i、 e.“服务器”包中名为“接受”的类。这两个都不存在,所以它说它做不到。它没有意识到“服务器”名称是变量的名称的原因是变量的标识符以及类和包的标识符在不同的名称空间中。举例来说,如果您定义了一个类,如下所示:

package server;
public class accept {
}

然后,您的两行代码片段将给出一个不同的编译错误,即“您无法将类型的对象分配给”server.accept“给类型为Socket的变量”。

提示:编译器不是在寻找ServerSocket,而是在寻找“server”@Yanick Rochon:hint-我只是想帮你。你的“暗示”(以及你毫无根据的否决票)是不受欢迎的:)你回答的第一部分根本不正确,我很好心地告诉你为什么我否决了。提示:编译器不是在寻找ServerSocket,而是在寻找“服务器”@Yanick Rochon:hint-我只是想帮你。你的“暗示”(以及你毫无根据的否决票)是不受欢迎的:)你回答的第一部分根本不正确,我很好心地告诉你为什么我否决了。这比我个人通常拥有的要多得多。