[英]Java Class Object Dynamic Memory Allocation
大家好,我是java编程的新手。我尝试了java类,我所做的是我创建了一个实例变量x,然后创建了y,它复制了x的值。 然后,我定义一个构造函数,该构造函数将值或x作为参数。 现在,当我尝试打印y的值时,它给出的值为0而while或x时给出的值为5。为什么会出现问题? 当我们使用new关键字和Constructor时,只会创建所有实例字段,因此我觉得使用后
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package test;
/**
*
* @author Mridul
*/
public class Test {
int x;
int y=x;
Test(int a)
{
x=a;
}
void print()
{
System.out.println(x);
}
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
Test ob=new Test(5);
ob.print();
System.out.println(ob.y);
// TODO code application logic here
}
}
Output
5
0
当我们使用new关键字和Constructor时,只会创建所有实例字段,因此我觉得使用后
Test ob=new Test(5);
然后,只有类(x,y = x)中的所有代码都应运行,并且不应该造成问题。 请帮忙
当创建一个新的Test
实例时,这是有序地发生的:
int x; // x = 0
int y=x; // y = 0
Test(int a)
{
x=a; // x = your a value
}
=>社区Wiki,随时...。
这里:
int y=x;
在构造函数执行之前发生一次 。
因此,ctor更改了x的值; 但是y保持先前的值。 (x最初获得默认值0;进入y;然后执行ctor并将x更改为a的值)。
并且请注意:这与“动态分配”无关。 new
原因三件事:
(有关更多详细信息,请参见此处 )。 如果要让y与x具有相同的值; 做就是了
公共类测试final int x,y;
Test(int incoming) {
x = incoming;
y = incoming;
}
当您使用new
调用构造函数时,Java将开始构造新分配的对象。 实例字段的值(在您的字段x
和y
情况下)由一组规则确定。
x
具有默认值( 0
); y
获得x
的值,即0
。 x
设置为值a
。 y
仍为0
,因为它在 x
设置为a
值之前就获得了其值。
new operator
用于自动分配内存,要为对象分配所需的内存,必须使用new operator
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.