2.25.静态变量

静态变量
尽量不要使用 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修饰符,只能当前包的代码能使用它

使用自己的使用静态变量的时候,直接写静态变量名字。

你可能感兴趣的:(#,Java基础,java,java)