Computer >> 컴퓨터 >  >> 프로그램 작성 >> Java

Java의 기본 생성자에서 정적 변수를 초기화할 수 있습니까?

<시간/>

클래스/정적 변수는 인스턴스 변수와 마찬가지로 클래스 내에서, 메소드 외부에서 선언되지만 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