클래스/정적 변수는 인스턴스 변수와 마찬가지로 클래스 내에서, 메소드 외부에서 선언되지만 static 키워드를 사용하여 선언되는 것처럼 클래스에 속합니다.
컴파일 시간에 액세스할 수 있으며 클래스를 인스턴스화하기 전/없이 액세스할 수 있습니다. 클래스 전체에 사용할 수 있는 정적 필드의 복사본은 하나만 있습니다. 즉, 정적 필드의 값은 모든 개체에서 동일합니다. static 키워드를 사용하여 정적 필드를 정의할 수 있습니다.
클래스에서 정적 변수를 선언하고 초기화하지 않은 경우 인스턴스 변수와 마찬가지로 컴파일러는 기본 생성자의 기본값으로 이를 초기화합니다.
예, 생성자를 사용하여 이러한 값을 초기화할 수도 있습니다.
예시
public class DefaultExample { static String name; static int age; DefaultExample() { name = "Krishna"; age = 25; } public static void main(String args[]) { new DefaultExample(); System.out.println(DefaultExample.name); System.out.println(DefaultExample.age); } }
출력
Krishna 25
최종 및 정적 선언
그러나 인스턴스 변수를 정적으로 선언하고 최종 Java 컴파일러는 기본 생성자에서 이를 초기화하지 않으므로 정적 및 최종 변수를 초기화해야 합니다. 컴파일 타임 에러가 발생하지 않습니다.
예시
public class DefaultExample { static final String name; static final int age; public static void main(String args[]) { new DefaultExample(); System.out.println(DefaultExample.name); System.out.println(DefaultExample.age); } }
컴파일 시간 오류
DefaultExample.java:2: error: variable name not initialized in the default constructor static final String name; ^ DefaultExample.java:3: error: variable age not initialized in the default constructor static final int age; ^ 2 errors
그러나 최종으로 선언된 변수를 초기화하려고 하면 및 정적 , 컴파일러는 이를 변수 초기화 시도로 간주하고 컴파일 시간 오류가 생성됩니다.
예시
public class DefaultExample { static final String name; static final int age; DefaultExample() { name = "Krishna"; age = 25; } public static void main(String args[]) { new DefaultExample(); System.out.println(DefaultExample.name); System.out.println(DefaultExample.age); } }
컴파일 시간 오류
OutputDeviceAssignedDefaultExample.java:5: error: cannot assign a value to final variable name name = "Krishna"; ^ DefaultExample.java:6: error: cannot assign a value to final variable age age = 25; ^ 2 errors