繁体   English   中英

Java类对象动态内存分配

[英]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将开始构造新分配的对象。 实例字段的值(在您的字段xy情况下)由一组规则确定。

  • 首先,实例字段被初始化。 x具有默认值( 0 ); y获得x的值,即0
  • 然后,在构造函数中, x设置为值a

y仍为0 ,因为它 x设置为a之前就获得了其值。

new operator用于自动分配内存,要为对象分配所需的内存,必须使用new operator

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM