类变量的初始化时机(摘录自java突破程序员基本功德16课)
2013-11-01 17:36
363 查看
先看书本的一个例子,代码如下:
那程序输出的结果是什么?两处输出都是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.
更具此原理,我们不难的出,想要达到我们理想的效果,只需要将
两行代码呼唤顺序即可。
本人测试无误。
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;
两行代码呼唤顺序即可。
本人测试无误。
相关文章推荐
- 类变量的初始化时机(摘录自java突破程序员基本功德16课)
- 五、JAVA中类的探究-类变量的初始化时机
- Java程序员从笨鸟到菜鸟之(十八)JSP基本语法与动作指令
- Java程序员从笨鸟到菜鸟之(一)开发环境搭建,基本语法,字符串,数组
- Java程序员从笨鸟到菜鸟之(五十)细谈Hibernate(一)hibernate基本概念和体系结构
- 一个java程序员应该掌握的基本
- 读书笔记一 Java程序员的基本修养(数组及其内存管理)
- 【Java】【TIJ】验证Java对类的基本数据类型的成员的默认初始化结果
- Java程序员从笨鸟到菜鸟之(一)开发环境搭建,基本语法,字符串,数组
- “大话架构”阿里架构师分享的Java程序员需要突破的技术要点
- Java 对象中变量属性的初始化时机与内存控制
- java基本类型初始化
- 如何突破JAVA程序员三年的门槛
- selenium+webdriver+java(基本小例子及初始化三种浏览器)---------------
- Java程序员从笨鸟到菜鸟之(五十)细谈Hibernate(一)hibernate基本概念和体系结构
- Java程序员的黄金5年你如何突破?
- java中构造函数中变量初始化时机
- Java程序员学习C++之构造函数和析构函数调用的时机
- Java程序员从笨鸟到菜鸟之(五十)细谈Hibernate(一)hibernate基本概念和体系结构
- java_基本知识总结一_变量引起的初始化