类变量的初始化时机(摘录自java突破程序员基本功德16课)
来源:互联网 发布:mac充电器怎么拆 编辑:程序博客网 时间:2024/04/30 17:39
先看书本的一个例子,代码如下:
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 变量初始化时机
- 《疯狂java-突破程序员基本功的16课》读书笔记之实例变量与类变量
- java中实例变量的初始化时机
- 类变量初始化时机
- java类的初始化时机
- java 类初始化的时机
- 关于Java变量、数组、对象的声明、初始化与访问方式-----《疯狂Java突破程序员基本功的16课》读书笔记----第一章
- Java静态变量初始化时机
- 实例变量的初始化时机
- 实例变量的初始化时机
- 实例变量的初始化时机
- 静态变量初始化的时机
- Java 静态变量、静态代码块初始化的时机
- 五、JAVA中类的探究-类变量的初始化时机
- 在SQL脚本中的注释引起的奇怪问题
- 周末干点什么呢?
- java发送带附件的邮件的代码
- Android学习篇章18-动画:Tween动画Animation
- iOS 获取手机的型号,系统版本,软件名称,软件版本
- 类变量的初始化时机(摘录自java突破程序员基本功德16课)
- struts2 18拦截器详解(十) --- ModelDrivenInterceptor
- java基础——重写和重载
- liun系统命令大全学习笔记(附加命令使用方法)
- char、varchar、nchar、nvarchar的区别
- 按月查询客户余额报表的步骤和SQL脚本
- 探讨android 导航栏中的recent_app界面
- (使用STL自带的排序功能进行排序7.3.2)POJ 2092 Grandpa is Famous(结构体排序)
- java.lang.OutOfMemoryError: PermGen space及其解决方法