class Cube{
int side;
int area = side * side;
}
public class Chronos{
public static void main(String[]args) {
Cube a = new Cube();
a.side = 2;
System.out.println(a.area);
}
}
我的问题是为什么输出" 0"而不是乘以给定的变量
a.side=2
本身a.area=4
。a.area
。
我的思维过程是,它会看到打印Cube
的命令,请与a.side
一起检查,看看它应该是先前已经确定的 this.label6.AutoSize = true;
this.label6.Location = new System.Drawing.Point(59, 174);
this.label6.Name = "label6";
this.label6.Size = new System.Drawing.Size(72, 13);
this.label6.TabIndex = 16;
this.label6.Text = "Output String:";
乘以它自己
答案 0 :(得分:5)
因为
int area=side*side
初始化多维数据集对象时会发生,因此将其设置为0 * 0 = 0;
要更改此设置,您必须创建一个方法,即setSide或getArea,并在那里进行计算。即(根本不需要使用区域变量)
public int getArea(){
return side*side;
}
答案 1 :(得分:1)
Cube a=new Cube();
执行此操作时,变量将使用默认值进行初始化。稍后您只需设置变量size
。这并不意味着整个班级都会疯狂地刷新。
初始化两个使用默认值(0)初始化的变量。因此你看到了0。
您也需要设置区域。或者理想情况下,写一个给出区域的方法。你可以return size*size
class Cube{
int side;
public int getArea(){
return side * side;
}
}
然后在主
public class Chronos{
public static void main(String[]args) {
Cube a = new Cube();
a.side = 2;
System.out.println(a.getArea());
}
}
这是您获得最新价值的方式。
答案 2 :(得分:0)
创建Cube
实例时,首先初始化实例变量,然后执行构造函数体。
int side;
的默认值为0
int area=side*side;
被赋值为0,因为0 * 0是0
稍后,在Cube
实例初始化后,您的a.side=2
语句会将a.side
设置为2,但这不会影响已计算的a.area
,这不是重新计算的。
如果在创建实例后允许修改side
属性,则必须在area
更新时修改side
。或者您可以消除area
属性并按需计算它。
那是什么安慰者和吸气者:
修改area
时修改side
:
public void setSide (int side) {
this.side = side;
this.area = side * side;
}
或删除area
属性,改为使用:
public int computeArea () {
return side * side;
}
您的相应main
将是:
public static void main(String[]args) {
Cube a = new Cube();
a.setSide(2);
System.out.println(a.getArea()); // if setSide also modifies the area property
}
或
public static void main(String[]args) {
Cube a = new Cube();
a.setSide(2);
System.out.println(a.computeArea()); // if you remove the area property
}
答案 3 :(得分:0)
创建对象时,它将采用默认值。您正在为不会刷新的变量赋值。因此,最好维护setter和getter,然后相应地执行操作
答案 4 :(得分:0)
对于如何初始化类的基本理解,这是一个更大的问题。
area = side * side
语句在实例化类时执行,或者换句话说执行Cube a = new Cube();
时执行。
之后,area
永远不会再被修改。这就是为什么你应该永远将类成员变量初始化为非常量值,因为你很容易忘记它是什么。
您应该创建一个计算区域的新方法,例如:
class Cube{
int side;
public int getArea(){
return side * side;
}
}