先看代码:
package test;
public class Goods {
private String gname;
private Double price;
private String address;
public static int totalNum = 10;
public String getGname() {
return gname;
}
public void setGname(String gname) {
this.gname = gname;
}
public Double getPrice() {
return price;
}
public void setPrice(Double price) {
this.price = price;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
// 出售商品
public static int saleGoods(String gname, int num) {
Goods.totalNum -= num;
System.out.println("商品名称:" + gname + ",出售数量:" + num + "件,剩余商品总数量:" + Goods.totalNum + "件。");
return num;
}
}
package test;
public class TestStaticVariable {
public static void main(String[] args) {
System.out.println(Goods.totalNum);
Goods xiaoDangJia = new Goods();
xiaoDangJia.setGname("小当家");
// 出售了2包小当家
Goods.saleGoods(xiaoDangJia.getGname(), 2);
Goods xiaoHuanXiong = new Goods();
xiaoHuanXiong.setGname("小浣熊");
// 出售了3包小当家
Goods.saleGoods(xiaoHuanXiong.getGname(), 3);
System.out.println(Goods.totalNum);
}
}
结果:
10
商品名称:小当家,出售数量:2件,剩余商品总数量:8件。
商品名称:小浣熊,出售数量:3件,剩余商品总数量:5件。
5
思考:为什么每次运行控制台totalNum这个静态变量都从10开始?
结论:
- static viriable随着类的加载而加载。
- 访问类的静态变量时,如果类未初始化会对类进行初始化。