对象创建过程中内存变化
答案:2 悬赏:80 手机版
解决时间 2021-03-17 18:15
- 提问者网友:孤山下
- 2021-03-17 05:27
如在Dog dog=new Dog()中Dog dog;这一部分有何作用,具体在内存或者调用方法有和作用?
最佳答案
- 五星知识达人网友:洎扰庸人
- 2021-03-17 06:40
你这个是java语言吧。
这一条语句在两个地方分配存储(假如是局部对象的话):1.在栈为名字dog(dog似于C语言的指针)分配存储;2.在堆中为时间的Dog对象分配存储。
Dog dog = new Dog(); 中的Dog dog部分是定义引用(也就是名字),引用可以用于指代不同的对象(通过赋值运算符)。后面的 new Dog()则是实际地在堆中创建一个Dog对象,中间的=则让名字dog指代这个刚创建的对象。
这一条语句在两个地方分配存储(假如是局部对象的话):1.在栈为名字dog(dog似于C语言的指针)分配存储;2.在堆中为时间的Dog对象分配存储。
Dog dog = new Dog(); 中的Dog dog部分是定义引用(也就是名字),引用可以用于指代不同的对象(通过赋值运算符)。后面的 new Dog()则是实际地在堆中创建一个Dog对象,中间的=则让名字dog指代这个刚创建的对象。
全部回答
- 1楼网友:一把行者刀
- 2021-03-17 06:55
子类创建对象的时候,会首先创建父类对象, 父类对象构造完成,才会创建本身。
所以,针对父类属性 和子类属性 是两个不同的属性的
例如 子类和父类对象都有 id属性, 那么他们两个不是同一个id属性,存在不同的空间中
如果子类中没有id属性,而父类中有的话,子类会继承父类的非私有属性
例如下面的代码
public class super {
string id ="aaaaaa";
}
class sub extends super{
string id ="bbbb";
}
class sub2 extends super{
}
public class t {
public static void main(string[] args) {
sub sub = new sub() ;
system.out.println(sub.id);
super s = new super() ;
system.out.println(s.id);
sub2 sub2 = new sub2() ;
system.out.println(sub2.id);
}
}
执行t 你会发现 sub打印的是他自己的id值 , sub2打印的是父类的id值
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯