2012-10-16 6 views
1

여기에 제가 작성한 코드가 있습니다. 나는이 같은 위의 큐브를 구현한다면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

입니다하지만 볼륨이라는 출력을 얻을 수 반면에, 내가 이런 볼륨 변수를 정의한다면 :

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

length, breadthheight에는 해당 문이 실행될 때 값이 할당되지 않았습니다. 생성자에서 계산을 수행하는 것이 좋습니다.

+0

응답 주셔서 감사합니다.하지만 생성자가있는 클래스를 구현할 때 왜 이러한 변수 값이 변경되지 않는지 궁금합니다. 일단 내가 제공 한 값으로 새 '큐브'클래스를 생성하는 생성자를 구현하면, 왜이 새 클래스는 내가 제공 한 값에서 기본 변수 값으로 생성되지 않았는가, 왜 여전히 클래스의 초기화에서 값을 얻었는가? ? –

+0

볼륨을 제외하고는 변수를 올바르게 초기화하고 있습니다. 따라서 '길이', '너비', '높이'및 '밀도'는 모두 올바르게 계산됩니다. 그러나'volume = length * breadth * height; '라는 계산은 변수가 초기화되기 전에 실행되므로'volume'이 0 인 이유 때문에'volume'이되지 않습니다. – jonny2k9

+0

그것을 얻었습니다! 감사! –

0

var를 그렇게 정의 할 수 없습니다.

메소드 외부에서 정의 할 때 - 클래스가 생성되면 계산됩니다. private int volume=length*breadth*height; 이후

2

은 클래스가 초기화 될 때 실행, 모든 관련 분야 당신은 당신의 생성자를 수정할 수 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

유일한 문제는 객체의 생성이 일어나기 전에 volume 변수가 정의된다는 것입니다.

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

볼륨이 제대로 계산됩니다이 방법을 : 나머지 속성은 결과 볼륨 당신은 당신의 생성자를 수정할 수 0 했다, 따라서 왜, 기본적으로 0으로 설정됩니다. 그러나, 볼륨이 보이는

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

가에서 중복 - 사이드 노트, 당신은 값이 다른 변수에 설정 한 후 계산하고 볼륨을 할당해야 Code Conventions for the Java

+0

+1 죄송합니다. 귀하의 메시지를 실수로 수정했으며 승인되었습니다. – dan

+0

@dan 괴롭히지 마라, 그것은 나 자신이었다. 실제 해결책을 제시하는 것은 항상 좋은 대답입니다. ;) –

1

참조 클래스 이름으로 큐브를 사용한다 너의 수업. 당신은 그것을 제거 할 수 있습니다, 당신의 방법은 항상 즉시 그것을 계산할 수 있습니다 -이 선언되고 위하여

public void volmeShow(){  
    int volume=length*breadth*height; //local, not needed at class level 
    System.out.println("The Volume of the cube is " + volume); 
0

속성은 슈퍼를 호출 생성자의 몸체 전에하지만 후, 생성자에 의해 초기화됩니다().

볼륨 초기화시 사용자의 경우 모든 구성원이 정수 (int)의 기본값 인 0으로 설정됩니다.

public cube(int l,int b,int h, int d) { 
    length = l; 
    breadth = b; 
    height = h; 
    density = d; 
    volume = length*breadth*height; 
} 
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 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; 

로 평가합니다. 당신은 실제로 일을 더 나은 것

...

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

이 ... 사실, 당신이 '그들이 돈으로 (당신이 예에서) 멀리 전부 length, breadth, heightdensity 값으로 할 수 t 클래스에 아무것도 추가하지 마십시오 ...