我已经用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
?
答案 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引用当前实例中的变量。