[英]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.