2010-04-20 3 views
2

난 그냥 썬의 자바 튜토리얼을 살펴 있었고, 완전히 나를 혼란 뭔가를 발견 다음 예 감안할 때 :생성자 내에서 변수/필드 유형 정의, 어떻게 처리됩니까?

public Bicycle(int startCadence, int startSpeed, int startGear) { 
gear = startGear; 
cadence = startCadence; 
speed = startSpeed; 

}

왜 그것을이다 그 변수의 종류 (필드 ?) 기어, 케이던스 및 속도를 정의 할 필요가 없습니까? 다음과 같이 내가 쓴 것 :

public Bicycle(int startCadence, int startSpeed, int startGear) { 
int gear = startGear; 
int cadence = startCadence; 
int speed = startSpeed; 

}

무엇 실제 differnce 것입니까?

+1

마지막 대안은 메소드 변수를 인스턴스화합니다. 그 변수들은 생성자가 호출 된 후에 죽는다. 반면에 첫 번째 대안에서 사용되는 클래스 변수는 주어진 생성자에 의해 초기화되는 객체의 일부이다. – Espen

답변

2

코드에서 로컬 변수을 선언합니다. 생성자가 완료되면 효과적으로 사라질 것입니다. 좀 더 문맥에 the code를 살펴 보자 :

// the Bicycle class has three fields 
public int cadence; 
public int gear; 
public int speed; 

// the Bicycle class has one constructor 
public Bicycle(int startCadence, int startSpeed, int startGear) { 
    gear = startGear; 
    cadence = startCadence; 
    speed = startSpeed; 
} 

지금 당신이 선언을 볼 수 있습니다 - 그들은 인스턴스 필드 대신 지역 변수의 때문에 그들이 생성자 외부에서 선언하고 있습니다. 그들은 Bicycle 클래스의 각 인스턴스에 대한 데이터를 구성합니다.

2

해당 필드는 생성자보다 먼저 클래스에서 이미 정의되었을 가능성이 큽니다. 전체 수업을 볼 수 있을까요?

생성자는 클래스의 한 부분이며 일반적으로 인스턴스 변수의 초기화를 포함하지 않습니다. 일반적으로 클래스 상단에 정의 된 것을 볼 수 있습니다.

+0

전체 예제는 여기에서 찾을 수 있습니다. http://java.sun.com/docs/books/tutorial/java/javaOO/constructors.html – jottr

+0

이 자습서는 생성자 자습서입니다. 인스턴스 변수가 이미 있다고 가정합니다. 행운을 빕니다! –

0

이들은 클래스 변수로 정의되었으며 암시 적으로 첨부되었습니다. 더 명확하게하기 위해 읽을 수 있습니다.

공개 Bicycle (int startCadence, int startSpeed, int startGear) { this.gear = startGear; this.cadence = startCadence; this.speed = startSpeed; }

관련 문제