JAVA对象的初始化过程
2016-01-11 10:29
441 查看
package xiya; class Person{ private String name; private int age; private static String country = "CN"; //静态代码块初始化类 static { System.out.println("首先被执行"); } //构造代码块初始化对象 { System.out.println("其次被执行"); } public int getAge() { return age; } public String getName() { return name; } public void setAge(int age) { this.age = age; } public void setName(String name) { this.name = name; } public Person(String name, int age) { System.out.println("最后被执行"); this.name = name; this.age = age; } public static String getCountry() { return country; } } public class Demo { public static void main(String[] args) { Person p = new Person("xiya", 20); System.out.println(p.getName() + " " + p.getAge() + " " + p.getCountry()); } }
Person p = new Person("xiya", 20);过程:
因为new用到了Person.class,所以先找到Person.class文件并加载到内存。
执行该类的static代码块(如果有的话),给Person类进行初始化。
在堆内存中开辟空间,分配内存地址。
在堆内存中建立对象的特有属性(成员变量),并进行默认初始化(0,false,null)。
对属性进行显示初始化。
对对象进行构造代码块初始化。
对对象进行对应的构造函数初始化。
将内存地址传给栈内存中的p变量。
构造代码块初始化对象 和 对属性进行显示初始化是同类别的,其调用顺序和语句的出现顺序保持一致。
而静态代码块初始化类一定是先于它们执行,构造函数晚于它们执行。
相关文章推荐
- JAVA对象的初始化过程
- springmvc下Jersey 搭建RESTful服务
- spring注解学习手册
- java泛型小结
- Spring MVC之@RequestBody, @ResponseBody @PathVariable @SessionAttributes @ModelAttribute详解
- java 基本数据类型
- 简单spring mvc项目搭建
- java i++ ++i 小例子
- Java 设计模式---策略模式
- Struts2返回JSON对象的方法总结
- java线程的创建
- spring 各个历史版本的源码及jar包下载地址
- java开发时,eclipse设置编码
- eclipse创建Maven父子结构Maven项目
- Spring Data JPA 全局DAO的扩展
- JAVA IO 详解
- 韩顺平java sql server语句的使用
- java注解(annotation)的执行顺序
- SpringMVC+Spring4+Mybatis3集成,开发简单Web项目
- java 反射调用