/*
该类演示了一个对象的初始化过程
*/
class Person
{
private String name; //堆内存默认初始化为null
private int age; //堆内存默认初始化为0
private static String country="中国"; //静态属性,存在于方法区,随着类的加载而加载
static //静态代码块
{
System.out.println("静态代码块执行");
}
//构造代码块
{
System.out.println("构造代码块执行");
}
Person(String name,int age) //构造函数
{
this.name=name;
this.age=age;
}
public void setName(String name)
{
this.name=name;
}
public String getName()
{
return name;
}
public void setAge(int age)
{
this.age=age;
}
public int getAge()
{
return age;
}
public void speak()
{
System.out.println(name+"...."+age);
}
public static void showCountry()
{
System.out.println(country);
}
}
class PersonDemo
{
public static void main(String[] args)
{
Person p=new Person("张三",20);
/*
Person p=new Person("张三",20);
这句话的执行,内存中到底做了什么事情呢?
1.首先JVM以main函数为入口,把PersonDemo类加载进内存
2.在栈内存中建立引用变量变量p
3.因为new用到了Person.class,所以会先找到Person.class文件并加载到内存中
4.执行该类中的static代码块,给Person.class类进行初始化
5.在堆内存中开辟空间,分配内存地址
6.对堆内存中建立对象的特有属性,并进行默认初始化
7.对属性进行显示初始化
8.对对象进行构造代码块初始化
9.对对象进行与之对应的构造函数初始化
10.将内存地址赋给栈内存中的p变量
关于Person类中的静态属性和静态方法
静态属性和静态方法随着类的加载而加载,并存在于方法区中,方法区中存储的是静态变量和静态方法,
还有类的其他非静态函数,所以可以说方法区分为静态区和非静态区.当调用方法时,他们会被加载进
栈内存进行执行
*/
}
}
作者:u011171998 发表于2014-3-4 14:35:56 原文链接
阅读:67 评论:0 查看评论