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