열거 형으로 응석을 발견했습니다. 다음은 Kathy Siera의 책입니다.Enums 생성자 정적 초기화 자
public class WeatherTest {
static Weather w;
public static void main(String[] args) {
System.out.print(w.RAINY.count + " " + w.Sunny.count + " ");
}
}
enum Weather {
RAINY, Sunny;
int count = 0;
Weather() {
System.out.print("c ");
count++;
}
}
출력은 c1입니다. 1. 이해합니다. 이제 카운트 필드가 정적이라면 어떻게 될까? 출력은 c 2 2가 될까요? 그것에 기초하여 count 변수를 static으로 수정했습니다. 하지만 내가 본 것은 다음과 같습니다. 컴파일 시간 오류 : 이니셜 라이저에서 정적 필드에 대한 참조가 잘못되었습니다.
그물에서 검색 나는 이것이 일종의 루프 홀이라는 것을 알았고 정적 필드를 변경할 수있는 정적 메서드를 허용했습니다. 좋아 .. 그래서 지금은 내 일을 할 수있는 정적 메소드 증분을 사용 놀랍게도
class WeatherTest {
static Weather w;
public static void main(String[] args) {
System.out.print(w.RAINY.count + " " + w.Sunny.count + " ");
}
}
enum Weather {
RAINY, Sunny;
Weather() {
System.out.print("c ");
incr();
}
static int count = 0;
static void incr() {
count++;
}
}
, 나는 출력을 얻을 : 0 0 C c를! 누군가 나 자신을 쏘기 전에이 행동을 설명해 주실 수 있습니까?
당신의 들여 쓰기 및 중괄호를 해결하시기 바랍니다으로 그 값을 참조하십시오. – ardent
매우 응회하는 질문! 모든 자바 프로그래머, 자신을 방어하십시오 :) – Kameron
ardentsonata : 확실한 – user1500024