Java类对象动态内存分配

时间:2017-02-21 11:48:37

标签: java oop object constructor

Hey Guys我是java编程的新手。我试图尝试java类,我所做的是我创建了一个实例变量x然后是y复制x的值。 然后我定义一个构造函数,它将值或x作为参数。 现在,当我尝试打印y的值时,它将值赋予0,而或者x给出5。 问题为什么会发生? 当我们使用new关键字和构造函数时,只创建了所有实例字段,所以我觉得在使用

之后
<style name="customSpinnerTheme" parent="ThemeOverlay.AppCompat">
    <item name="colorControlActivated">#FFFFFF</item>
    <item name="colorControlHighlight">#FFFFFF</item>
</style>

当我们使用new关键字和构造函数时,只创建了所有实例字段,所以我觉得在使用之后

/*
 * 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

然后,只有类(x,y = x)中的所有代码都应该运行,并且不应该创建问题。 请帮忙

4 个答案:

答案 0 :(得分:0)

当您创建Test的新实例时,会发生这种情况(按顺序):

int x; // x = 0
int y=x; // y = 0
Test(int a)
{
    x=a; // x = your a value
}

=&GT;社区维基,随意....

答案 1 :(得分:0)

这里:

int y=x;

发生一次 执行构造函数之前。

因此ctor改变了x的值;但y保持其先前的值。 (x最初的默认值为0;进入y;然后执行ctor并将x更改为a的值。

请注意:这与“动态分配”无关。 new导致三件事:

  • 分配内存
  • 新对象的字段是init'ed
  • 调用指定的构造函数

(有关详细信息,请参阅here)。如果你想让y与x具有相同的值;只是做

公共课测试     final int x,y;

Test(int incoming) {
  x = incoming;
  y = incoming;
}

答案 2 :(得分:0)

使用MyDict调用构造函数时,Java开始构造新分配的对象。实例字段的值(在您的字段View和字段new的情况下)由一组规则确定。

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

x仍为a,因为在 y设置为0的值之前,它的值

答案 3 :(得分:0)

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