Java变量初始化

时间:2012-10-16 22:56:25

标签: 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;
      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);
    }
}

为什么会这样?

7 个答案:

答案 0 :(得分:4)

因为lengthbreadthheight在执行该语句时尚未分配任何值。你最好在构造函数中执行该计算。

答案 1 :(得分: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作为班级名称,请参阅Code Conventions for the Java

答案 2 :(得分:2)

由于在初始化类时执行private 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作为班级名称,请参阅Code Conventions for the Java

答案 3 :(得分: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;
}

...实际上,您可以完全取消lengthbreadthheightdensity值(来自您的示例),因为它们不会在课堂上添加任何东西......

答案 4 :(得分: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);

答案 5 :(得分:0)

你不能像这样定义var。

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

答案 6 :(得分: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;
}