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