Java变量初始化

Java变量初始化,java,Java,这是我写的一段代码 public class cube { private int length; private int breadth; private int height; private int volume; private int density; private int weight; public cube(int l,int b,int h, int d) { length=l; breadth=b;

这是我写的一段代码

public class cube { 
   private int length;
   private int breadth;
   private int height;
   private int volume;
   private int density;
   private int weight;
   public cube(int l,int b,int h, int d)  {
      length=l;
      breadth=b;
      height=h;
      density=d;
   }

   public void volmeShow(){
      volume = length * breadth * height;
      System.out.println("The Volume of the cube is "+this.volume);
   }
}
如果我像这样实现上面的多维数据集类

public class cubeApp {
    public static void main(String[] args){
       cube mycube = new cube(5,6,9,2);
       mycube.volumeShow();
    }
}
我得到一个输出,告诉我音量是270

但是我得到一个输出,它说体积是0。另一方面,如果我这样定义体积变量:

public class cube { 
    private int length;
    private int breadth;
    private int height;
    private int volume=length*breadth*height;
    private int density;
    private int weight;
    public cube(int l,int b,int h, int d)  {
        length=l;
        breadth=b;
        height=h;
        density=d;
    }

    public void volmeShow(){
        System.out.println("The Volume of the cube is " + this.volume);
    }
}

为什么会发生这种情况?

因为在执行该语句时,
长度
宽度
高度
没有分配任何值。您最好在构造函数中执行该计算。

因为在执行该语句时,
长度
宽度
高度
没有分配任何值。您最好在构造函数中执行该计算。

您不能这样定义var


当您在方法之外定义它时-这将在创建类时计算。

您不能这样定义var


当您在方法之外定义它时-这将在创建类时计算。

因为
private int volume=length*width*height在类初始化时执行,所有涉及的字段都为0

您可以将构造函数修改为:

public cube(int l,int b,int h, int d)  {
    length=l;
    breadth=b;
    height=h;
    density=d;
    volume=length*breadth*height;
}
public cube(int l,int b,int h, int d)  {
    length=l;
    breadth=b;
    height=h;
    density=d;
    volume=length*breadth*height;
}
这样可以正确计算体积。
旁注,您应该使用Cube作为类名,请参见,因为
private int volume=length*width*height在类初始化时执行,所有涉及的字段都为0

您可以将构造函数修改为:

public cube(int l,int b,int h, int d)  {
    length=l;
    breadth=b;
    height=h;
    density=d;
    volume=length*breadth*height;
}
public cube(int l,int b,int h, int d)  {
    length=l;
    breadth=b;
    height=h;
    density=d;
    volume=length*breadth*height;
}
这样可以正确计算体积。
旁注,您应该使用Cube作为类名,请参见

唯一的问题是,
变量仅在对象构造之前定义。默认情况下,其余属性设置为0,因此生成的卷为0。 您可以将构造函数修改为:

public cube(int l,int b,int h, int d)  {
    length=l;
    breadth=b;
    height=h;
    density=d;
    volume=length*breadth*height;
}
public cube(int l,int b,int h, int d)  {
    length=l;
    breadth=b;
    height=h;
    density=d;
    volume=length*breadth*height;
}
这样可以正确计算体积。
旁注,您应该使用Cube作为类名,请参见

唯一的问题是,
变量仅在对象构造之前定义。默认情况下,其余属性设置为0,因此生成的卷为0。 您可以将构造函数修改为:

public cube(int l,int b,int h, int d)  {
    length=l;
    breadth=b;
    height=h;
    density=d;
    volume=length*breadth*height;
}
public cube(int l,int b,int h, int d)  {
    length=l;
    breadth=b;
    height=h;
    density=d;
    volume=length*breadth*height;
}
这样可以正确计算体积。
旁注,您应该使用Cube作为类名,请参见

在其他变量中设置值后,您需要计算和分配体积-

public cube(int l,int b,int h, int d)  { 
    length=l; 
    breadth=b; 
    height=h; 
    density=d; 
    volume=length*breadth*height;
}
但是,在您的类中,卷看起来是多余的。你可以删除它,你的方法可以随时计算它-

public void volmeShow(){     
     int volume=length*breadth*height; //local, not needed at class level
     System.out.println("The Volume of the cube is " + volume);

在其他变量中设置值后,需要计算和分配体积-

public cube(int l,int b,int h, int d)  { 
    length=l; 
    breadth=b; 
    height=h; 
    density=d; 
    volume=length*breadth*height;
}
但是,在您的类中,卷看起来是多余的。你可以删除它,你的方法可以随时计算它-

public void volmeShow(){     
     int volume=length*breadth*height; //local, not needed at class level
     System.out.println("The Volume of the cube is " + volume);

构造函数按照声明属性的顺序初始化属性,在构造函数体之前,但在调用super()之后

在卷初始化时,在您的情况下,所有成员都设置为零,这是int的默认值

你必须写:

public cube(int l,int b,int h, int d)  {
    length  = l;
    breadth = b;
    height  = h;
    density = d;
    volume  = length*breadth*height;
}

构造函数按照声明属性的顺序初始化属性,在构造函数体之前,但在调用super()之后

在卷初始化时,在您的情况下,所有成员都设置为零,这是int的默认值

你必须写:

public cube(int l,int b,int h, int d)  {
    length  = l;
    breadth = b;
    height  = h;
    density = d;
    volume  = length*breadth*height;
}

初始化类时,所有成员字段都会初始化为默认值(对于
int
(以及通常的数字),即0)

基本上

private int length;
private int breadth;
private int height;
private int density;
private int weight;
private int volume=length*breadth*height;
评估为

private int length = 0;
private int breadth = 0;
private int height = 0;
private int density = 0;
private int weight = 0;
private int volume=length*breadth*height;
private int volume=0*0*0;
评估结果是

private int length = 0;
private int breadth = 0;
private int height = 0;
private int density = 0;
private int weight = 0;
private int volume=length*breadth*height;
private int volume=0*0*0;
然后不再更新卷值

事实上,你最好做

public cube(int l,int b,int h, int d)  {
    length=l;
    breadth=b;
    height=h;
    density=d;
    volume=length*breadth*height;
}

…事实上,您可以完全取消
长度
宽度
高度
密度
值(来自您的示例),因为它们不会向类添加任何内容…

初始化类时,所有成员字段都会初始化为默认值(对于
int
(以及一般的数字)这是0)

基本上

private int length;
private int breadth;
private int height;
private int density;
private int weight;
private int volume=length*breadth*height;
评估为

private int length = 0;
private int breadth = 0;
private int height = 0;
private int density = 0;
private int weight = 0;
private int volume=length*breadth*height;
private int volume=0*0*0;
评估结果是

private int length = 0;
private int breadth = 0;
private int height = 0;
private int density = 0;
private int weight = 0;
private int volume=length*breadth*height;
private int volume=0*0*0;
然后不再更新卷值

事实上,你最好做

public cube(int l,int b,int h, int d)  {
    length=l;
    breadth=b;
    height=h;
    density=d;
    volume=length*breadth*height;
}

…事实上,您可以完全取消
长度
宽度
高度
密度
值(来自您的示例),因为它们不会给您的类添加任何内容…

+1抱歉,我错误地编辑了您的消息,并且也被批准了。@dan不要打扰,那是我自己。在回答中陈述实际的解决方案总是一个好主意+1对不起,我错误地编辑了你的邮件,也被批准了。@dan不要麻烦了,那是我自己。在回答中陈述实际的解决方案总是一个好主意谢谢你的回答,但我只是想知道,当我用构造函数实现这个类时,为什么这些变量的值不改变呢?我的意思是,一旦我实现了构造函数,用我提供的值创建了一个新的“多维数据集”类,为什么这个新类不是用我提供的值中的默认变量值创建的,为什么这些值仍然来自该类的初始化?您正确地初始化了变量,除了卷。因此,
长度
宽度
高度
密度
都将正确计算。但是
volume
不会,因为计算
volume=长度*宽度*高度
是在这些变量初始化之前执行的,因此为什么
volume
为零。谢谢你的回答,但我只是想知道,当我用构造函数实现类时,为什么这些变量的值不改变?我的意思是,一旦我实现了构造函数,用我提供的值创建了一个新的“多维数据集”类,为什么这个新类不是用我提供的值中的默认变量值创建的,为什么这些值仍然来自该类的初始化?您正确地初始化了变量,除了卷。So