实例化类的静态对象

时间:2014-10-18 18:04:46

标签: java

我已经用Java编写了大约一个星期的代码,但我仍然有学习它的问题。

我知道我们可以创建一个类,然后使用类的名称创建它的实例。

但我有这段代码让我无法理解这里发生的事情,

这是名为XMLGettersSetters.java的文件,

public class XMLGettersSetters {

    private ArrayList<String> title = new ArrayList<String>();
    private ArrayList<String> artist = new ArrayList<String>();
    private ArrayList<String> country = new ArrayList<String>();
    private ArrayList<String> company = new ArrayList<String>();
    private ArrayList<String> price = new ArrayList<String>();
    private ArrayList<String> year = new ArrayList<String>();

    public ArrayList<String> getCompany() {
        return company;
    }

    public void setCompany(String company) {
        this.company.add(company);
        Log.i("This is the company:", company);
    }

    public ArrayList<String> getPrice() {
        return price;
    }

    public void setPrice(String price) {
        this.price.add(price);
        Log.i("This is the price:", price);
    }

    public ArrayList<String> getYear() {
        return year;
    }

    public void setYear(String year) {
        this.year.add(year);
        Log.i("This is the year:", year);
    }

    public ArrayList<String> getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title.add(title);
        Log.i("This is the title:", title);
    }

    public ArrayList<String> getArtist() {
        return artist;
    }

    public void setArtist(String artist) {
        this.artist.add(artist);
        Log.i("This is the artist:", artist);
    }

    public ArrayList<String> getCountry() {
        return country;
    }

    public void setCountry(String country) {
        this.country.add(country);
        Log.i("This is the country:", country);
    }

}

现在我可以像这样创建这个类的对象,

XMLGettersSetters myObject = new XMLGettersSetters();

但是从我正在学习这段代码的网站上,他们创建了像这样的对象,

public static XMLGettersSetters data = null;

为什么对象被声明为静态?上面的代码甚至意味着什么。 不应该只是,

 XMLGettersSetters data = null;

据我所知,当我们将变量声明为static时,我们不需要实例化一个类来使用该类中的静态变量。

还有一个问题,

public static XMLGettersSetters getXMLData() {
    return data;
}

我不知道上面的代码发生了什么, 首先将对象实例化为静态,然后给出一个函数getXMLData(),而不是给对象一个名称。 返回类型为data

现在关于下面的代码,

public static void setXMLData(XMLGettersSetters data) {
    XMLHandler.data = data;
}

使用XMLGettersSetters对象作为参数创建方法,但是XMLHandler.data呢? 它是什么 ?不应该是this.data

3 个答案:

答案 0 :(得分:2)

他们可能创建了对象static,因为他们希望它是global。例如,代码中的任何位置都可以调用XMLHandler.data。 (我在这里假设创建数据变量的类是XMLHandler,因为它在setter方法中使用。

如果它只是XMLGettersSetters data = null;而不是static...,则无法从代码中的任何位置访问它。

对于XMLHandler.data而不是this.data,您必须知道按照惯例,大多数人在访问静态变量时在访问对象之前指定类名。

答案 1 :(得分:1)

静态是一个字段,而不是一个对象。静态字段是每个类,由有权访问此字段的所有代码共享。首次加载类时,它们仅初始化一次。通常的字段(没有静态)是每个对象实例。它们在创建对象实例时初始化。

在Java中,您可以在声明变量的同一句子中指定值:

 int x = 2; 
 Object y = new Object().

答案 2 :(得分:0)

对象被实例化,但随后被置于静态变量中。这意味着您始终可以访问XMLGettersAndSetters的相同实例。

由于方法是静态的,你必须引用一个静态变量而不是this.data引用当前实例中的变量。