[英]use of static keyword
我在Java中編寫了一個非常簡單的程序以使用static關鍵字。但是我將輸出設為0。我找不到原因。我是Java的初學者。任何人都可以提出一個建議解決方案,也請解釋為什么會遇到這樣的問題...我的代碼如下:
public class Cube{
static int length;
static int breadth;
static int height;
public static int volume(final int i, final int j, final int k){
return length * breadth * height;
}
public static void main(final String args[]){
System.out
.println("volume of the cube is : " + Cube.volume(10, 20, 30));
}
}
int
字段(無論是否static
都初始化為0
。
您應該將操作數相乘( i * j * k
)或分配給靜態int
字段。
將您的方法更改為此:
public static int volume(final int i, final int j, final int k){
return i*j*k;
}
將為您提供您想要的價值。
另外,請閱讀@eljenso的答案以獲取更多詳細信息。
您可能想要的是:
public static int volume(final int i, final int j, final int k){
this.length = i;
this.breadth = j;
this.height = k;
return length * breadth * height;
}
由於將值10, 20, 30
傳遞給i, j, k
,您遇到了一個問題,但沒有將它們分配給length, breadth, height
。
順便說一句,在這種情況下,您實際上並不需要static
。 對於您的班級,這將是一個更好的設計:
class Cube{
int length;
int breadth;
int height;
public Cube(int length, int breadth, int height) {
this.length = length;
this.breadth = breadth;
this.height = height;
}
public int volume(){
return length * breadth * height;
}
}
它可以如下使用:
public static void main(String[] args) {
Cube c = new Cube(10, 20, 30);
System.out.println(c.volume());
}
因為長度和寬度以及高度最初是0,所以它將始終return 0
否則,它將始終return 0
0。
public static int volume(final int i, final int j, final int k){
return length * breadth * height;
}
像這樣更改它,它將起作用
public static int volume(final int i, final int j, final int k){
return i*j*k;
}
原因是當您致電:
return length * breadth * height;
這些變量包含在一個尚未初始化的對象中,如果您想使用面向對象的路由,則必須使用new關鍵字實例化它。 如果不需要封裝長度,寬度和高度的數據,則可能需要使用static。
public class cube{
static int length=20;
static int breath=30;
static int height=10;
public static int volume( final int i, final int j, final int k){
System.out.println("i=" + i + "j= " + j + "k= " + k);
return length*breath*height;
}
public static void main(final String args[]){
int a;
a=volume(10, 20, 30);
System.out.println(" area of cube " + a);
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.