内存分析(对象创建、static、this关键字)

内存分析

对象创建内存分析

在这里插入图片描述
程序运行把class文件加载到内存Test.class,Cake.class,CakeMaker.class
虚拟机调用Test类的main方法进栈执行
逐行执行主方法里的代码
Cake cake = new Cake();先执行代码右边的,然后赋值给代码左边
看到new就是创建对象
1、在堆里为这个对象开辟内存空间,这个类的成员属性会跟随这个类进入内存空间,并附默认值。
2、把对象在堆内存的地址返回给引用
cake.color = “红色的”;
cake.shape=“圆形的”;
cake.taste=“甜甜的”;
跟随cake中存放的地址找到堆内存这个空间的color,shape,taste属性然后进行赋值。
cakeMaker.makeCake(cake);调用方法入栈,然后把cake实参传入方法中
根据cake的地址找到color、shape、taste的值
方法执行完毕弹栈释放内存

静态和成员变量区别

在这里插入图片描述 static 关键字
静态的,是一个成员修饰符,只能修饰成员,不能修饰局部
修饰变量: 静态变量|类变量
修饰方法: 静态方法|类方法
静态内容的使用方式:
1.对象使用
引用名.静态变量名
引用名.静态方法名()
2.通过类名使用
类名.静态变量名
类名.静态方法名()
成员都是属于对象的,静态的内容是属于类的
静态的变量在静态区中存在,是独一份的,所有对象共享的资源,在类第一次加载之后就初始化了
成员的变量在对象的内存空间中,跟随对象存在的,有一个对象就有一份成员
this不能在static修饰的方法中使用
静态的内容中只能直接使用静态的内容,不能直接使用成员的内容,但是可以通过对象使用
成员内容中可以直接使用静态的可以直接使用非静态的内容

this关键字

public class Cake {
	public String shape; //形状
	public String color;
	public String taste;
	public Cake(){
	}
	public Cake(String shape,String color){
		this.shape = shape;//this指当前对象
		this.color = color;
	}
	public Cake(String shape,String color,String taste){
		this(shape,color);//调用本类中的其他构造器,使用参数列表进行区分
		this.taste = taste;
	}
	@Override
	public String toString(){
		return this.shape+"--"+this.color+"--"+taste;this默认指代当前调用成员方法的对象
	}
	
}
  1. 构造器的首行调用本类中的其他构造器。
    :this(参数列表);注意:必须用在构造器首行才可以,构造器之间不能相互调用。
  2. 区分同名变量问题。
    this存储这个对象的地址,在成员方法中,this指代当前调用这个成员方法的对象,如果出现同名变量的问题,想要指代成员变量必须使用this
    如果不存在同名问题,this可以省略,在构造器中,this指代当前new的对象 注意: this和static不能同时使用。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值