当用一个类来创建对象的时候,JVM会帮我们执行下面的6个步骤。

1、在磁盘上找到对应内的class文件;

2、加载class文件到内存,初始化所有静态域(成员变量和方法);

3、如果使用new class()时,在堆上开辟一片空间;

4、将这片空间清零(对于基本类型来说,设置为0;对于引用类型来说,设置为null);

5、执行非静态域的成员变量的初始化(包括普通类型和应用类型);

6、执行构造函数。

这就是为什么类里面的静态成员和静态函数可以不用创建对象,直接用类来访问的原因,因为这些静态域已经在第2步,完成了加载和初始化,已经在内存中生效了,

并且只在内存中只有一份,也就是说无论这个类被用来创建了多少对象,这些静态域只被加载和初始化一次。

  如果没有创建对象,那么只会执行上面的1和2两个步骤,3,4,5,6,要在创建对象的时候才会被执行。

最新文章

  1. Git Shell 基本命令(官网脱水版)
  2. scale配合过渡的时候bug
  3. 如何自定义wordpress登录界面的Logo
  4. lnmp 下安装yaf
  5. MySQL提供的错误日志中的错误级别一共有3个分别为:
  6. linux下用Apache一个IP多个网站多域名配置方法
  7. 如何解决在GDI画图中,多次修改画笔的颜色
  8. weekly review
  9. 开发者应该避免使用的6个Java功能(转)
  10. Android - 隐藏最顶端的通知条(Top Notification Bar)
  11. Nyoj 布线问题(并查集&&图论)
  12. crawler_基础之_httpclient 访问网络资源
  13. VS2010 使用 EF5 框架步骤
  14. Android Weekly Notes Issue #287
  15. VINS 估计器之检查视差
  16. 【一天一道LeetCode】#115. Distinct Subsequences
  17. ActiveX、OLE和COM的关系(转自百度文档)
  18. 移除文件(git rm)
  19. [.NET] 使用ValidationContext快速进行模型资料的验证
  20. Django 中文和时区设置

热门文章

  1. Studio右键选项中没有Git?
  2. Ulipad和有道词典冲突的问题
  3. 认识与学习BASH
  4. datetime时区转换
  5. Django 的 CSRF 保护机制
  6. Tornado源码分析系列之一: 化异步为'同步'的Future和gen.coroutine
  7. dubbo服务框架学习
  8. C# 学习的随笔【随时更新】
  9. junit组合模式应用
  10. 通过 adb命令发送广播