• 类变量的初始化时机(摘录自java突破程序员基本功德16课)


    先看书本的一个例子,代码如下:

    public class Price {
    	final static Price INSTANCE=new Price(2.8);
    	static double initPrice=20;
    	double currentPrice;
    	public Price(double discount)
    	{
    		currentPrice=initPrice-discount;
    	}
    }
    
    
    public class test {
    	public static void main(String[] args)
    	{
    		System.out.println(Price.INSTANCE.currentPrice);
    		Price p=new Price(2.8);
    		System.out.println(p.currentPrice);
    	}
    }
    


    那程序输出的结果是什么?两处输出都是17.2吗?程序输出结果为-2.8,17.2;

    如下是书本解释这段代码的全过程:

    初始化第一阶段,系统先为INSTANCE,initPrice两个类变量分配内存空间,此时INSTANCE,initPrice的值为默认值null和0.0接着初始化进入第二个阶段,程序按顺序依次为INSTANCE,initPrice进行赋值。对INSTANCE赋值时调用Price(2.8),创建Price实例,此时立即执行程序中为currentPrice进行赋值,此时initPrice的值为0,因此赋值的结果是currentPrice等于-2.8.接着,程序再次将initPrice赋值为20,得出p的currentPrice的值为17.2.

    更具此原理,我们不难的出,想要达到我们理想的效果,只需要将

    final static Price INSTANCE=new Price(2.8);
    
    static double initPrice=20;
    
    


     

    两行代码呼唤顺序即可。

    本人测试无误。

  • 相关阅读:
    js中的数据类型和判断数据类型
    MVC,MVVM,MVP等设计模式的分析
    mvc框架详解
    插件推荐系列
    响应式区间
    js短路原理:&&, ||
    不错的表单样式
    测试ip
    Python模拟登陆万能法
    iphone 端 ipunt输入框光标偏移
  • 原文地址:https://www.cnblogs.com/riskyer/p/3402524.html
Copyright © 2020-2023  润新知