我是Java新手(在python之后)。还有一个关于使用一个类而不创建新实例的问题。这段代码有效,但是这样做的好习惯是坏习惯吗?
class TestStatic {
private static String url;
private static String user;
TestStatic(String _url, String _user) {
url = _url;
user = _user;
}
static void print() {
System.out.println(url);
System.out.println(user);
}
}
public class Main {
public static void main(String[] args) {
new TestStatic("HTTP", "USER");
TestStatic.print();
// TestStatic test = new TestStatic("HTTP", "USER");
// test.print();
}
}
还是我需要在main方法中注释前两个字符串,然后取消注释后两个字符串,并在这样的代码中使用它们?
答案 0 :(得分:0)
new TestStatic("HTTP", "USER");
您打算怎么做?
您已经在静态类中创建了一个静态方法,无需创建TestStatic实例即可对其进行访问。
TestStatic.print();
上面的那行很好,但是您的变量必须是静态的,请不要在构造函数内设置它们。无需创建测试静态对象的新对象,因为您无需对其进行任何操作,并且它可能在创建后很快进入垃圾回收。
大多数人将静态类用于实用程序功能。您可以阅读何时使用静态类以及何时不使用它们。
在澄清问题之后,为整个项目创建一个单独的类以将其连接到SoniqMQ,最好使用 Singleton 模式。
Singleton模式强制您仅创建类的单个对象,并且可以在整个项目中使用它。
public class MySingleTon {
private static MySingleTon myObj;
private MySingleTon(){
//Empty private constructor
}
public static MySingleTon getInstance(){
if(myObj == null){
myObj = new MySingleTon();
}
return myObj;
}
public void getSomeThing(){
// do something here
System.out.println("I am here....");
}
public static void main(String a[]){
MySingleTon st = MySingleTon.getInstance();
st.getSomeThing();
}
}
答案 1 :(得分:0)
这绝对不是您要使用类和静态变量的方式。这完全取决于您要如何使用特定的类。如果要在所有实例中使用相同的变量,或者根本不使用任何实例,则应按以下方式使用它:
class TestStatic {
private static String url;
private static String user;
static void print() {
System.out.println(url);
System.out.println(user);
}
public static setUrl(String url){
TestStatic.url = url;
}
public static setUser(String user){
TestStatic.user = user;
}
}
public class Main {
public static void main(String[] args) {
TestStatic.setUrl("HTTP");
TestStatic.setUser("USER");
TestStatic.print();
}
}
因此您根本不必创建实例。请记住,所有实例的静态变量都已更改,并且不需要实例来访问/更改它们。
如果您希望每个实例的变量都不同,则应这样处理:
class TestStatic {
private String url;
private String user;
public TestStatic(String url, String user) {
this.url = url;
this.user = user;
}
public void print() {
System.out.println(url);
System.out.println(user);
}
}
public class Main {
public static void main(String[] args) {
TestStatic test = new TestStatic("HTTP", "USER");
test.print();
}
}
请注意,您没有将静态变量用于特定于实例的值。
有关this的更多信息,请参见静态变量和方法。
正如我在您对Farhan Qasim的回答的评论中所读到的那样,您的用例(正如他所提到的)将需要一个单例模式。只需在Google上搜索它的含义和作用,或单击this。
答案 2 :(得分:0)
在每个答案中都说过,并且喜欢所有评论。不要混合使用静态初始化和实例初始化。如果您仍然想分配w1 = list_of_numbers[0]
w2 = list_of_numbers[1]
w3 = list_of_numbers[2]
和url
,则可以为此创建一个user
方法:
static
我也将类定为final,并将其构造函数设为私有。这样可以防止类final class TestStatic {
private static String url;
private static String user;
private TestStatic(){}
static void initialize(String _url, String _user) {
url = _url;
user = _user;
}
static void print() {
System.out.println(url);
System.out.println(user);
}
}
public class Main {
public static void main(String[] args) {
TestStatic.initialize("HTTP", "USER");
TestStatic.print();
}
}
的任何实例化。因为它根本就不使用,而只保存静态值。