创建用于Java的单个类?

时间:2018-06-28 14:06:22

标签: java

我是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方法中注释前两个字符串,然后取消注释后两个字符串,并在这样的代码中使用它们?

3 个答案:

答案 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(); } } 的任何实例化。因为它根本就不使用,而只保存静态值。