类的初始化
a:先将class文件加载到方法区中
b:在栈中为变量开辟空间
c:在堆内存中创建对象
d:系统给成员变量进行默认赋值
e:给成员变量进行显示赋值
f:构造方法给成员变量进行赋值
g:将堆内存中的地址赋值给栈内存中的变量
增:
给成员变量赋值的方法
- 无参构造+setXxx()/getXxx()方法
- 有参构造赋值
举个栗子:
public class Cat {
private String name = "大黄";
private int age = 4;
private String kind = "英国短猫";
public Cat() {
}
public Cat(String name, int age, String kind) {
this.name = name;
this.age = age;
this.kind = kind;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getKind() {
return kind;
}
public void setKind(String kind) {
this.kind = kind;
}
public void show(){
System.out.println("猫的品种是:"+this.kind+",年龄:"+this.age+",名字:"+this.name);
}
}
class CatDemo01{
public static void main(String[] args) {
Cat cat = new Cat("咪咪",2,"中华田园猫");
cat.show();
}
}
内存分析:
叙述:
首先将Cat.class和CatDemo.class文件加载到方法区中
再在对内存中开辟空间,系统自动给name,age,kind赋默认值null,0,null 将方法区中的地址赋值给堆内存中的方法标记区
再在给成员变量赋初值,小黄,4,英国短猫
再在通过有参构造函数为成员变量进行赋值 咪咪,2,中华田园猫
再将堆内存中的地址0x0001赋值给栈内存中变量