Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 给静态变量赋值的正确方法是什么?_Java - Fatal编程技术网

Java 给静态变量赋值的正确方法是什么?

Java 给静态变量赋值的正确方法是什么?,java,Java,我试图初始化类构造函数中的变量,但IDE显示以下警告: 静态字段SoapClient.url应以静态方式访问。 你能查一下我下面的代码吗?初始化静态变量的正确方法应该是什么?我应该忽略这个警告,还是应该让变量成为非静态变量 谢谢 public class SoapClient { private static String url; public SoapClient(String url) { this.url = url; } } 正确的方法是静态

我试图初始化类构造函数中的变量,但IDE显示以下警告:

静态字段SoapClient.url应以静态方式访问。

你能查一下我下面的代码吗?初始化静态变量的正确方法应该是什么?我应该忽略这个警告,还是应该让变量成为非静态变量

谢谢

public class SoapClient {
    private static String url;

    public SoapClient(String url) {
        this.url = url;
    }
}

正确的方法是静态方法:

SoapClient.url = ""
但这里可能需要一个常规字段:

public class SoapClient {
    private final String url;

    public SoapClient(final String url) {
        this.url = url;
    }
}

正确的方法是静态方法:

SoapClient.url = ""
但这里可能需要一个常规字段:

public class SoapClient {
    private final String url;

    public SoapClient(final String url) {
        this.url = url;
    }
}

当一个变量是
静态
时,这意味着所有实例都有一个
url
,而不是每个对象。您不希望对象的每个构造都更改
url
。但是,如果您仍然想这样做,您可以像
SoapClient.url
那样访问它


(在您的代码中,
url
将始终保存最后构造的对象的值)。

当变量为
static
时,这意味着您将为所有实例(而不是每个对象)提供一个
url
。您不希望对象的每个构造都更改
url
。但是,如果您仍然想这样做,您可以像
SoapClient.url
那样访问它


(在代码中,
url
将始终保存最后构造的对象的值)。

通过this访问变量url时会发出警告。变量,它引用对象的当前实例


然而,主要的问题来自于在构造函数内部分配一个静态变量。你想要什么样的行为?您真的需要每次构建一个新的SoapClient对象时,为SoapClient的每个实例重写静态url吗?或者,您是否需要每个客户端存储不同的url(对我来说,哪种方式更好)?在这种情况下,我会像其他人建议的那样将url字段实现为常规字段(只需从字段声明中去掉
static
修饰符)

通过this访问变量url时会发出警告。变量,它引用对象的当前实例

然而,主要的问题来自于在构造函数内部分配一个静态变量。你想要什么样的行为?您真的需要每次构建一个新的SoapClient对象时,为SoapClient的每个实例重写静态url吗?或者,您是否需要每个客户端存储不同的url(对我来说,哪种方式更好)?在这种情况下,我会像其他人建议的那样将url字段实现为常规字段(只需从字段声明中去掉
static
修饰符)

有两种方法

public Login(String url) {
    Login.url = url;
}
但是静态变量在类中只创建一次,所以为什么要在构造函数中初始化它呢。您可以创建另一个静态方法并在其中初始化url

public static void setUrl(String url) {
    Login.url = url;
}
有两种方法

public Login(String url) {
    Login.url = url;
}
但是静态变量在类中只创建一次,所以为什么要在构造函数中初始化它呢。您可以创建另一个静态方法并在其中初始化url

public static void setUrl(String url) {
    Login.url = url;
}

静态变量特定于类,而成员变量特定于类的实例。当我们考虑SoapClient时,您可能会认为它的URL特定于类的每个不同实例,因为每个SoapClient可能有不同的URL地址

这意味着最好从URL中删除静态关键字。 如果使用url作为成员变量,则已正确安装它

如果要将其用作静态变量,请使用:

SoapClient.url = url;

静态变量特定于类,而成员变量特定于类的实例。当我们考虑SoapClient时,您可能会认为它的URL特定于类的每个不同实例,因为每个SoapClient可能有不同的URL地址

这意味着最好从URL中删除静态关键字。 如果使用url作为成员变量,则已正确安装它

如果要将其用作静态变量,请使用:

SoapClient.url = url;
采取:

有时,您希望拥有对所有对象通用的变量。 这是通过“静态”修改器完成的。具有 声明中的静态修饰符称为静态字段或类 变量。它们与类相关联,而不是与任何类相关联 对象该类的每个实例都共享一个类变量,即 在内存中的一个固定位置。任何对象都可以更改 类变量,但类变量也可以在没有 创建类的实例

所以你有两个选择:

public class SoapClient {
    private String url;

    public SoapClient(String url) {
        this.url = url;
    }
}
或:

采取:

有时,您希望拥有对所有对象通用的变量。 这是通过“静态”修改器完成的。具有 声明中的静态修饰符称为静态字段或类 变量。它们与类相关联,而不是与任何类相关联 对象该类的每个实例都共享一个类变量,即 在内存中的一个固定位置。任何对象都可以更改 类变量,但类变量也可以在没有 创建类的实例

所以你有两个选择:

public class SoapClient {
    private String url;

    public SoapClient(String url) {
        this.url = url;
    }
}
或:


您希望它是
静态的
。?您确定
SoapClient
的每个新实例都可以更改静态
url
字段吗?+1以爱您的猫。不要使用静态字段,除非它们是常量(即
final
)。几乎所有其他用途都可以。您是否希望它是
静态的
。?您确定
SoapClient
的每个新实例都可以更改静态的
url
字段?+1来爱您的猫。不要使用静态字段,除非它们是常量(即
final
)。几乎所有其他用途都可以。