在类方法中生成本类的对象,请问它的内存模型是怎么样的?

leetow2006 2019-07-27 08:38:53
请看:
public class Dwno1 {

public static void main(String[] args) {
// TODO 自动生成的方法存根
A a=new A();
a.fun();
}

}

class A
{
private int m;
public A()
{
this.m=10;
}
public void fun()
{

A obj=new A();
this.m=20;
System.out.println("fun "+this.m);
obj.print();
}

public void print()
{
System.out.println("print "+this.m);
}
}
运行后输出是
fun 20
print 10
在调用fun函数时,第一次输出m为20,可以理解,然后再调用print,输出为10,怎么理解?
能否给出这种在类方法中生成本类的对象的内存模型?
...全文
206 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_39936465 2019-07-30
  • 打赏
  • 举报
回复
引用 6 楼 leetow2006 的回复:
在类的方法中创建的对象,与在主程序中的创建的对象,是否有不同?
当然不同首先创建对象的作用域就不同,具体还有哪里不同需要看实际的程序。
qq_39936465 2019-07-29
  • 打赏
  • 举报
回复
A a=new A();--->a.m=10 A obj=new A();--->obj.m=10 this.m=20;---->a.m=20
leetow2006 2019-07-29
  • 打赏
  • 举报
回复
在类的方法中创建的对象,与在主程序中的创建的对象,是否有不同?
leetow2006 2019-07-27
  • 打赏
  • 举报
回复
能否给出本例的内存模型?
qybao 2019-07-27
  • 打赏
  • 举报
回复
你把this理解为一个代词,代表我自己 a.fun里的this就代表a自己,所以此时fun里this.m就是a.m,是20 同样的obj.print里的this是obj自己,所以此时print方法里的this.m就是obj.m,就是10
qybao 2019-07-27
  • 打赏
  • 举报
回复
说反了 20是this的,也就是a对象的 10是obj对象的,也就是10是obj.print打印的
qybao 2019-07-27
  • 打赏
  • 举报
回复
20是obj对象的 10是this对象,也就是a对象的

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧