静态变量
尽量不要使用 Magic Number
VIP 的折扣作为一个成员变量, hin浪费啊
看例程:学习静态变量(也叫做类变量)
public class MerchandiseV2DescAppMain {
public static void main(String[] args) {
MerchandiseV2WithStaticVariable merchandise = new MerchandiseV2WithStaticVariable
("书桌", "DESK9527", 40, 999.9, 500);
merchandise.describe();
// >> TODO 使用import static来引入一个静态变量,就可以直接用静态变量名访问了
// TODO import static也可以使用通配符*来引入一个类里所有静态变量
System.out.println(DISCOUNT_FOR_VIP);
}
}
public class RunLittleSupperMarketAppMain {
public static void main(String[] args) {
// 创建一个小超市类
LittleSuperMarket littleSuperMarket = new LittleSuperMarket(
"有家小超市", "浦东新区世纪大道666号",
100, 200, 200);
System.out.println("下面请利润最高的商品自我介绍:");
MerchandiseV2WithStaticVariable bigProfit = littleSuperMarket.getBiggestProfitMerchandise();
bigProfit.describe();
double cost1 = bigProfit.buy(10, true);
System.out.println("VIP 购买10个" + bigProfit.getName() + "的花费为" + cost1);
// >> TODO 使用别的类的静态变量的时候,需要使用完整形态:类名.静态变量名字
MerchandiseV2WithStaticVariable.DISCOUNT_FOR_VIP = 0.5;
bigProfit.describe();
double cost2 = bigProfit.buy(10, true);
System.out.println("VIP 购买10个" + bigProfit.getName() + "的花费为" + cost2);
// >> TODO 静态变量在整个Java程序中只有一个(对比实例变量,是每个实例有一份
// TODO 所以静态变量一旦变化,所有使用这个静态变量的地方的值都会变
MerchandiseV2WithStaticVariable m0 = littleSuperMarket.getMerchandiseOf(0);
m0.describe();
double cost3 = m0.buy(10, true);
System.out.println("VIP 购买10个" + m0.getName() + "的花费为" + cost3);
}
}
public class MerchandiseV2WithStaticVariable {
public String name;
public String id;
public int count;
public double soldPrice;
public double purchasePrice;
// >> TODO 静态变量使用 static 修饰符
// >> TODO 静态变量如果不赋值,Java也会给它赋以其类型的初始值
// >> TODO 静态变量一般使用全大写字母加下划线分割。这是一个习惯用法
// >> TODO 所有的代码都可以使用静态变量,只要根据防范控制符的规范,这个静态变量对其可见即可
// TODO 比如 public 的静态变量,所有的代码都可以使用它
public static double DISCOUNT_FOR_VIP = 0.95;
// TODO 但是如果没有public修饰符,只能当前包的代码能使用它
static int STATIC_VARIABLE_CURR_PACKAGE_ONLY = 100;
public MerchandiseV2WithStaticVariable(String name, String id, int count, double soldPrice, double purchasePrice) {
this.name = name;
this.id = id;
this.count = count;
this.soldPrice = soldPrice;
this.purchasePrice = purchasePrice;
}
public String getName() {
return name;
}
public MerchandiseV2WithStaticVariable(String name, String id, int count, double soldPrice) {
this(name, id, count, soldPrice, soldPrice * 0.8);
}
public MerchandiseV2WithStaticVariable() {
this("无名", "000", 0, 1, 1.1);
}
public void describe() {
System.out.println("商品名字叫做" + name + ",id是" + id + "。 商品售价是" + soldPrice
+ "。商品进价是" + purchasePrice + "。商品库存量是" + count +
"。销售一个的毛利润是" + (soldPrice - purchasePrice) + "。折扣为" + DISCOUNT_FOR_VIP);
}
public double calculateProfit() {
double profit = soldPrice - purchasePrice;
// if(profit <= 0){
// return 0;
// }
return profit;
}
public double buy() {
return buy(1);
}
public double buy(int count) {
return buy(count, false);
}
public double buy(int count, boolean isVIP) {
if (this.count < count) {
return -1;
}
this.count -= count;
double totalCost = count * soldPrice;
if (isVIP) {
// >> TODO 使用自己的使用静态变量的时候,直接写静态变量名字。
return totalCost * DISCOUNT_FOR_VIP;
} else {
return totalCost;
}
}
}
使用import static来引入一个静态变量,就可以直接用静态变量名访问了
import static也可以使用通配符*来引入一个类里所有静态变量
使用别的类的静态变量的时候,需要使用完整形态:类名.静态变量名字
静态变量在整个Java程序中只有一个(对比实例变量,是每个实例有一份
所以静态变量一旦变化,所有使用这个静态变量的地方的值都会变
静态变量使用 static 修饰符
静态变量如果不赋值,Java也会给它赋以其类型的初始值
静态变量一般使用全大写字母加下划线分割。这是一个习惯用法
所有的代码都可以使用静态变量,只要根据防范控制符的规范,这个静态变量对其可见即可
比如 public 的静态变量,所有的代码都可以使用它
但是如果没有public修饰符,只能当前包的代码能使用它
使用自己的使用静态变量的时候,直接写静态变量名字。