java简单代码运行内存图

java中主要的三块内存空间:

1.栈内存(stack):在方法别调用时,栈内存会给方法分配内存(压栈),主

要存储的是局部变量。方法调用结束后,该方法所占用的内存释放(弹栈)。

栈内存具有先进后出,后进先出的特点。

2.堆内存:存储对象。

3.方法区:类加载器classload,将硬盘上的.class字节码文件加载到JVM方法

区当中,存储的主要是代码片段。

下面是代码运行的内存图:

Student类:

public class Student{

	// 属性(描述状态),在java程序中以“成员变量”的形式存在。

	// 学号
	// 一个对象一份。
	int no; // 这种成员变量又被称为“实例变量”。

	// 姓名
	String name;

	// 年龄
	int age;

	// 性别
	boolean sex;

	// 住址
	String addr;

}

StudentTest类:

public class StudentTest{

	public static void main(String[] args){

		// s1属于局部变量吗?当然是。
		// s1这个局部变量叫做引用
		Student s1 = new Student();
		// s2也是局部变量。
		// s2也叫做引用。
		Student s2 = new Student();
		s1.no = 110;
		s1.name = "张三";
		s1.age = 20;
		s1.sex = true;
		s1.addr = "深圳宝安区";

		System.out.println("学号=" + s1.no);
		System.out.println("姓名=" + s1.name);
		System.out.println("年龄=" + s1.age);
		System.out.println("性别=" + s1.sex);
		System.out.println("住址=" + s1.addr);

		// 再次赋值
		s1.addr = "北京大兴区";
		System.out.println("住址:" + s1.addr);

	}

}

在这里插入图片描述
User类:

public class User{

	// 类=属性+方法

	// 用户id
	// int是一种基本数据类型
	int id; // 实例变量

	// 用户名
	// String是一种引用数据类型
	String username; // 实例变量
	String password; 
}

UserTest类:

public class UserTest{

	// 方法体外声明的变量叫做成员变量。
	//User u1; //成员变量。(实例变量)

	public static void main(String[] args){
		//int i = 100;

		// 方法体当中声明的变量叫做局部变量
		User u1 = new User();
		// 实例变量怎么访问(属性怎么访问)?
		// 语法是:“引用.属性名”
		System.out.println(u1.id); //0
		System.out.println(u1.username); //null
		System.out.println(u1.password); //null

		u1.id = 11111;
		u1.username = "zhangsan";
		u1.password = "123";

		System.out.println(u1.id);
		System.out.println(u1.username);
		System.out.println(u1.password);
		
		User u2 = new User();
		u2.id = 22222;
		u2.username = "lisi";
		u2.password = "456";

		System.out.println(u2.id);
		System.out.println(u2.username);
		System.out.println(u2.password);
	}
}

在这里插入图片描述
Address类:

public class Address{

	// 一个家庭住址有3个属性。

	// 城市
	String city; // 实例变量

	// 街道
	String street;

	// 邮编
	String zipcode;
}

User类:

public class User{

	// 类=属性+方法
	// 以下3个都是属性,都是实例变量。(对象变量。)

	// 用户id
	// int是一种基本数据类型
	int id; // 实例变量

	// 用户名
	// String是一种引用数据类型
	String username; // 实例变量

	// 家庭住址
	// Address是一种引用数据类型
	// addr是成员变量并且还是一个实例变量
	// addr是一个引用。
	Address addr; 
}

Test类:

public class Test{
	public static void main(String[] args){
		
		// 家庭住址对象
		Address a = new Address();
		a.city = "北京";
		a.street = "大兴区";
		a.zipcode = "121221";
		
		// 用户对象
		User u = new User();
		System.out.println(u.id); // 0
		System.out.println(u.username); // null
		System.out.println(u.addr); // null

		u.id = 11111;
		u.username = "zhangsan";
		u.addr = a;

		System.out.println(u.username + "是"+u.addr.city+"城市的!");

		// u.addr.city 这行代码可拆分,u.addr.city 节省变量。
		// 拆分成以下代码和以上效果完全相同,原理完全相同,不同的是以下代码多了两个变量。
		Address ad = u.addr;
		String zhuZhi = ad.city;

		System.out.println(zhuZhi);

	}
}

在这里插入图片描述

  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值