1

这是我写的一段代码。

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);
    }
}

为什么会这样?

4

7 回答 7

4

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

于 2012-10-16T22:58:24.867 回答
3

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

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

这样体积将被正确计算。旁注,您应该使用 Cube 作为类名,请参阅Java 的代码约定

于 2012-10-16T22:58:59.050 回答
2

sinceprivate int volume=length*breadth*height;在类初始化时执行,所有涉及的字段为 0。

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

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

这样体积将被正确计算。旁注,您应该使用 Cube 作为类名,请参阅Java 的代码约定

于 2012-10-16T22:58:44.597 回答
2

当一个类被初始化时,所有成员字段都被初始化为默认值(对于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;

然后您不再更新音量值。

你实际上会更好...

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

...实际上,您可以完全取消length,breadth和values (从您的示例中) heightdensity因为它们不会为您的课程添加任何内容...

于 2012-10-16T23:02:00.460 回答
1

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

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);
于 2012-10-16T22:58:59.797 回答
0

你不能像这样定义 var 。

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

于 2012-10-16T22:58:38.660 回答
0

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

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

你必须写:

public cube(int l,int b,int h, int d)  {
    length  = l;
    breadth = b;
    height  = h;
    density = d;
    volume  = length*breadth*height;
}
于 2012-10-16T23:01:41.560 回答