簡體   English   中英

實例化一個類的靜態對象

[英]Instantiating static object of a Class

我已經用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;

據我所知,當我們將變量聲明為靜態變量時,我們無需實例化一個類即可使用該類中的靜態變量。

還有一個問題,

public static XMLGettersSetters getXMLData() {
    return data;
}

我不知道上面的代碼中發生了什么,首先將對象實例化為靜態,然后給對象命名,而不是給函數getXMLData() 返回類型是data

現在關於下面的代碼,

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

使用XMLGettersSetters對象作為參數創建一個方法,但是XMLHandler.data呢? 它是什么 ? 難道不是this.data嗎?

他們可能創建了static對象,因為他們希望它是global 例如,在代碼中的任何位置,您都可以調用XMLHandler.data (我在這里假設在其中創建數據變量的類是XMLHandler因為它在setter方法中使用。

如果僅僅是XMLGettersSetters data = null; 而不是static...則無法從代碼中的任何位置訪問它。

至於使用XMLHandler.data代替this.data您必須知道,按照慣例,大多數人在訪問靜態變量時都會在要訪問的對象之前指定類名。

靜態是字段,而不是對象。 靜態字段是按類的,由有權訪問該字段的所有代碼共享。 首次加載類時,它們僅初始化一次。 常規字段(無靜態)是每個對象實例的。 它們在創建對象實例時初始化。

在Java中,可以在聲明變量的同一句子中分配值:

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

該對象被實例化,但是隨后被放入一個靜態變量中。 這意味着您始終訪問XMLGettersAndSetters的相同實例。

由於方法是靜態的,因此您必須引用靜態變量,而不是this.data引用當前實例中的變量。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM