final
필드 반드시이 생성자가 종료되기 전에 설정되어야합니다. 일단 설정되면 참조를 수정할 수 없습니다 (값을 재 할당 할 수 없음). 강조는으로 재 할당 할 수 없습니다. 즉, 참조가 변경 될 수는 없지만 값 자체는을 변경할 수 있습니다.
이 법적 :
final List<Integer> list = new List<Integer>();
list.add(5); // the value of list changes, but the reference doesn't
이되지 않습니다 :
final List<Integer> list = new List<Integer>();
list = new List<Integer>(); // may seem sort of redundant but the compiler won't allow it nonetheless
에만 게터있는 private
변수를 보유하고있는 클래스에 의해 내부적으로 재 할당 할 수 있습니다 (하지만 그렇지 않은 외부에서 볼 수 있으므로 클래스를 보유하고있는 클래스 외부에서 다시 할당 할 수는 없습니다.) 또한 클래스 외부에서는 참조를 액세스 할 수 없으므로 클래스를 보유하고있는 클래스를 제외하고는 변수를 수정할 수 없습니다.
final
변수는 어디서나 재 할당 할 수 없지만 공개 인 경우 다른 클래스가 참조에 액세스하여 해당 변수가 가리키는 객체의 값을 변경할 수 있습니다.
설명한대로 초기화 후에 변수를 다시 할당하지 않으려면 final
과 private
을 모두 사용하십시오. 이런 일에 대한
사용 final
:
public class User {
private final long registrationTimeMillis;
public User(/* various parameters probably would be here */) {
registrationTimeMillis = System.currentTimeMillis();
}
public long getRegistrationTimeMillis() {
return registrationTimeMillis;
}
}
우리는 사용자의 등록 시간이 변경됩니다 기대하지 않기 때문에 그것이 건설 후 변경을 허용하지 않는 의미가 있습니다. 이 같은 없음 세터와
사용 private
:
public class VendingController() {
private int drinksStocked = 0;
private int drinksDispensed = 0;
public void dispenseDrink() {
drinksDispensed++;
}
public void stockDrinks(int numberOfDrinks) {
drinksStocked = getDrinksRemaining() + numberOfDrinks;
drinksDispensed = 0;
}
public int getDrinksRemaining() {
return drinksStocked - drinksDispensed;
}
}
우리는 drinksDispensed
의 값이 dispenseDrink()
또는 stockDrinks(int numberOfDrinks)
가 호출되는 경우를 제외하고는 변경하지 않습니다. 일반적으로 자바 그것은 여전히 자동 판매기 그래도 리필 될 때 자신의 클래스에 의해 재 할당 할 수 있어야합니다, 그래서 우리가 final
과 관련하여
public final
를 사용하여해서는 안 만 상수 이루어집니다 그 상수는 인스턴스에 종속되어서는 안되기 때문에 static
키워드도 포함됩니다.
그런 다음 방법에 사용될 수 public static final
public class UnitConversions {
public static final double CENTIMETERS_PER_INCH = 2.54;
}
행운의 영업 이익과 행복 코딩 최고의
public double convertFromCentimetersToInches(double centimeters) {
return centimeters/UnitConversions.CENTIMETERS_PER_INCH;
}
을 다음과 같이 감각을 사용하기는 보낼 때의 예. 그렇지 final
하지만 private
이되면
More reading on final fields
질문은 필드가 아니라 메서드에 대한 것입니다. – SirRichie
이것은 OP의 질문 – AlexR
에 대한 대답이 아닙니다. 질문은 get 메소드를 사용하여 final 또는 private로 설정하는 것보다 더 차이가 있습니다. – Don