java基础之 ----对象初始化过程
2016-07-05 19:04
597 查看
Person p = new Person("zhangsan",20) 该句话都做了什么事情? 1、因为new用到了Person.class.所以会先找到Person.class文件并加载到内存中 2、执行该类中的static代码块,如果有的话,给Person.class类进行初始化。 3、在堆内存中开辟空间,分配内存地址。 4、在堆内存中建立对象的特有属性,并进行默认初始化。 5、对属性进行显式初始化。 6、对对象进行构造代码块初始化 7、对对象进行对应的构造函数初始化。 8、对内存地址付给栈内存中的p变量。
https://img-blog.csdn.net/20160705165946350
https://img-blog.csdn.net/20160705190221531
https://img-blog.csdn.net/20160705190325887
1、栈中:有了main主函数的对象p
栈中:new Person();
2、执行静态代码块,如果有的话,给Person.class类进行初始化。
3、空间开辟,有了属性name和age,空间开辟好后,就有了内存地址比如说是0x0023。
4、默认初始化:
name = null;
age = 0;
5、显示初始化:
(如果在定义成员变量时就赋值,比如说
private static name = “lisi”;
那么
name = “lisi”;
age = 0;
)
6、构造代码块初始化
7、构造函数初始化:
name = “zhangsan”;
age = 20;
8、把内存地址值0x0023赋给了p,p就指向了Person(“zhangsan”,20)这个对象
class StaticCode { int num = 9; StaticCode(){ System.out.println("b"); } //静态代码块 static{ System.out.println("a"); } { System.out.println("c"+this.num); } StaticCode(int x){ System.out.println("d"); } public static void show(){ System.out.println("show run"); } } class StaticCodeDemo { static{ System.out.println("b"); } public static void main(String[] args){ new StaticCode(4); new StaticCode(); new StaticCode(); System.out.println("over"); } static { System.out.println("c"); } } /* 执行结果: b c a c9 d c9 b c9 b over */
相关文章推荐
- 怎么清空form中除readonly以外的数据
- java继承中的构造方法及this,super的使用
- java学习小记
- 网上找的Rxjava的好文章
- Java三大特征之继承(二)
- eclipse 的opencv第一次学习
- Spring缓存注解@Cacheable,@CachePut , @CacheEvict使用
- java.util.zip.ZipException: duplicate entry during packageAllDebugClassesForMultiDex
- java框架之spring(国际化处理)
- RxJava 事件流之聚合
- Java C
- Java B
- Java A
- JAVA安全性
- echarts力导向图的前后台交互(ajax+json+struts)
- 基本的正则表达式
- 通过spring工厂读取property配置文件
- Spring 介绍
- java_oop_类与对象
- Java提高篇(三二)-----List总结