首先,栈和堆是数据结构里面的叫法,栈:先进后出,堆:优先队列可采用二叉树实现;
调用方法 print()方法!叫入栈! 产生栈帧
print()方法执行完毕,就弹出!也叫出栈(弹出去以后就被销毁了)
当我们new对象的时候,
被native修饰的,都是本地方法栈!!!
Object底层 native修饰
cmd查看
javac xxx.java --------javap -c xxx命令
下面就是:
程序计数器
创建对象然后我们就要给属性赋初始值,因为构造方法是默认的!执行完构造方法以后!他就会在堆区产生一个地址! 堆区里面赋值 0x111,栈区就开始调用!!!当执行完以后 Student构造方法就弹出去了!
加载类的结构!方法区 通过地址 在传送到堆区!!!堆区获得地址!
常量池 张三0x333 堆区name=0x333 栈区,调用set! 执行完成就弹出去
调用方法的时候,就会入栈!!每一条数据跟 setName入栈一样!赋完值以后!执行完了,
他就一次弹出去了
String的常量池,有且只有一个值!但是会被多个变量或者对象引用!
堆区:当多个线程进来,会被多个对象引用.
private int id;
private String name;
private String addr;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAddr() {
return addr;
}
public void setAddr(String addr) {
this.addr = addr;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
private int age;
public void print(){
System.out.println(this.getId()+"\t"+this.getName()+"\t"+this.getAge()+"\t"+this.getAddr());
}
创建另一个类
package com.pb.demo;
public class Test {
public static void main(String[] args) {
int a = 10;
Student stu = new Student();
stu.setName("张三");
stu.setId(10);
stu.setAge(20);
stu.setAddr("北京");
stu.print();
}
}