class Doctor2{
private String name;
private int age;
private String gender;
public void setName(String name){
this.name = name;
}
public String getName() {
return name; //其实这里隐藏了一个this,但是我们也可以不写,因为就近原则取的就是对象的成员变量
}
public void setAge(int age) {
this.age = age;
}
public int getAge() {
return age;
}
public void setGender(String gender) {
this.gender = gender;
}
public String getGender() {
return gender;
}
//提供一个公共的方法
public void show() {
System.out.println("姓名:" + name + ",年龄:" + age + ",性别:" + gender);
}
}
public class DoctorDemo2 {
public static void main(String[] args) {
//创建一个医生对象
Doctor2 d = new Doctor2();
//给成员变量进行赋值
d.setName("小明");
d.setAge(18);
d.setGender("男");
d.show();
}
}
内存中的解释:
Step1:程序先将class文件(Doctor2.class,DoctorDemo2.class)加载到方法区
Step2:把每个class文件的方法加载到class文件区
Doctor2.class的方法:getXxx(),setXxx(),show()(假设这一部分地址值为0x001)
DoctorDemo2.class的方法:main()(假设这个方法区的地址值为0x002)
Step3:程序一开始运行,先将main方法加载到栈中来执行
Step4:读到Doctor2 d在栈中开辟空间,读到new Doctor2在堆里面开辟空间(一个创建对象里面包括name,age,gender,方法区的标记0x001)
Step5:一开始创建出来的对象,系统给默认值:name=null,age=0,gender=null(假设在堆中创建对象的地址值为0x0001),初始化值全部都有结束以后,将地址值0x0001赋给变量d(变量d就能通过地址值找到对象在堆内存中的区域)
Step6:创建对象结束之后,有个隐含的this指向0x0001这个区域
......
以下步骤参考创建两个对象的内存图解