一、创建对象内存分析
代码
public class Pet {//宠物类//类的属性public String name;//宠物名public int age ; //宠物年龄public String cry;//宠物叫声//类的方法//默认有个构造器(构造方法):无参构造/*public Pet(){}*/public void shout(){System.out.println(this.name+"叫了一声"+this.cry);}}/*//一个项目应该只存在一个main方法public class Application {//Application应用的意思,总测试类public static void main(String[] args) {//创建一个宠物类对象dogPet dog = new Pet();dog.name="旺财";dog.age=2;dog.cry="汪汪汪";System.out.print("名字:"+dog.name+"\t");System.out.print("年龄:"+dog.age+"\t");dog.shout();//创建一个宠物类对象catPet cat = new Pet();cat.name="小咪";cat.age=3;cat.cry="喵喵喵";System.out.print("名字:"+cat.name+"\t");System.out.print("年龄:"+cat.age+"\t");cat.shout();//对象内存地址System.out.println(dog);System.out.println(cat);}}*/
内存分析
步骤:
1.先在堆中加载Application类,里边有main()方法 和 常量池(字符串)——main()方法在 栈 的最底层
2.在 new Pet() 时在方法区先加载 Pet 类,初始化属性和方法,并在堆中开辟一个新的地址空间
3.把堆中 new Pet() 的 地址空间 指向 栈中 引用变量 (使用引用变量时,其实使用的是堆中的对象地址)
4.给属性相应赋值 (Application的常量池(字符串))
new一个对象相当于在堆中开辟一个内存地址空间,再把对象指向引用变量堆存储对象和数组元素,栈存储系统调用变量(例如引用变量)main()方法在栈的最底层静态方法区,和类一起加载,类加载后,所有的对象都能使用
二、成员变量和局部变量的内存分析
代码public class Calculator {//成员变量private String brand;//品牌private double size;//尺寸//成员方法public int add(int num1,int num2){int result;result = num1+num2;return result;}public int sub(int num1,int num2){return num1-num2;}public void show(){System.out.println("我购买了一个计算器"+brand+","+size);}public static void main(String[] args) {//购买运算器Calculator calc = new Calculator();calc.brand = "联想";calc.size = 6.5;calc.show();//使用运算器进行运算int num1 = 10;int num2 = 20;int result = calc.add(num1,num2);System.out.println(result);result = calc.sub(num1,num2);System.out.println(result);}}
内存分析
类中定义的变量是成员变量,方法(包括main方法)中定义的变量叫做局部变量(包括方法的参数,代码块中定义的变量)