吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 2972|回复: 1
收起左侧

[Java 转载] Java虚拟机创建对象的过程Demo(二)

  [复制链接]
NullPointer 发表于 2016-12-21 10:16
声明:此篇文章只讲述Demo,用案例来证明,若不清楚创建对象的过程请看我之前的文章:
Java虚拟机(一)Java虚拟机(二)Java虚拟机(三)
[Java] 纯文本查看 复制代码
package object;

/**
 * 验证创建对象的过程
 * 
 * @author TongWei.Chen
 * @date 2016年12月21日09:26:31
 */
public class CreateObjDemo02 {
	public static void main(String[] args) {
		Person person = new Person("TongWei.Chen", 22);
		person.setName("TongWei");
		person.show();
	}
}

class Person {
	private String name;
	private int age;
	private static String Country = "CN";
	
	DemoTest demo = new DemoTest();
	
	public Person(String name, int age) {
		System.out.println("这是Person的构造器");
		this.name = name;
		this.age = age;
	}
	
	{
		System.out.println("这是Person的构造代码块");
	}
	
	static {
		System.out.println("这是Person的静态代码块");
	}

	public void setName(String name) {
		this.name = name;
	}
	
	public void show() {
		 System.out.println("name = " + name + "::"+"age = " + age); 
	}
	
	public static void showCountry() {
		System.out.println("Country = " + Country);
	}
}

class DemoTest {

	public DemoTest() {
		System.out.println("这是一个测试的类");
	}
	
}

上述程序结果为:
这是Person的静态代码块
这是一个测试的类
这是Person的构造代码块
这是Person的构造器
name = TongWei::age = 22


分析:
1、首先区方法区中找有没有类的信息,没有的话首先进行加载、解析、初始化操作。(这时候System.out.println("这是Person的静态代码块");这句话就被执行了)
2、为对象分配内存空间,并按顺序执行。(这时候System.out.println("这是一个测试的类");被执行)
3、进行构造代码块的初始化,构造代码块优先级高于构造器。(这时候System.out.println("这是Person的构造代码块");被执行)
4、进行构造器的执行。(这时候System.out.println("这是Person的构造器");被执行)
5、将堆内存中的对象赋给栈中的person。
6、首先在栈中为对象的引用person开辟一块空间,然后定位到person对应的堆中的Person对象,在根据持有的引用person定位到方法区中的setName方法。输出name = TongWei::age = 22

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

随心随遇 发表于 2016-12-21 12:50
好资源啊,谢谢分享
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-30 14:49

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表