logo

Java 정적 생성자

Java에서는 생성자가 abstract, final, static, Native 또는 strictfp일 수 없습니다. 그래서 정적이 없습니다. 자바의 생성자 .

정적 데이터를 초기화하는 데 사용되는 정적 생성자는 지정된 작업이 프로그램 전체에서 한 번만 실행된다는 것을 의미합니다. 일반적으로 정적 생성자는 첫 번째 인스턴스가 생성되거나 정적 멤버가 참조될 때 자동으로 호출됩니다. 정적 생성자는 static 키워드를 사용하여 명시적으로 선언됩니다. 그러나 Java에서는 정적 생성자가 허용되지 않습니다.

맵 자바가 뭐야?

정적 생성자의 몇 가지 주요 기능은 다음과 같습니다.

  • 매개변수나 액세스 수정자를 사용하지 않습니다.
  • 특정 클래스에는 정적 생성자가 하나만 있을 수 있습니다.
  • 상속이나 오버로드를 허용하지 않습니다.
  • 자동으로 호출되며 직접 또는 명시적으로 호출할 수 없습니다.
  • 정적 필드의 값이 초기화되지 않으면 기본값으로 초기화됩니다.

Java에서 정적 생성자가 허용되지 않는 이유를 이해해 보겠습니다.

정적 생성자를 선언하면 어떻게 되나요?

정적 생성자는 허용되지 않습니다. 자바 프로그래밍 . 정적 생성자를 사용하는 것은 불법이며 Java 표준에 위배됩니다. 따라서 Java 프로그램은 컴파일되지 않고 컴파일 시간 오류가 발생합니다.

예를 들어 이해해 봅시다. 아래 예를 고려하십시오.

int를 문자로

StaticConstructorDemo.java:

 public class StaticConstructorDemo { //Declaring a static constructor public static StaticConstructorDemo() { System.out.println('Static Constructor of the class'); } public static void main(String args[]) { // Creating a constructor object to invoke it StaticConstructorDemo obj = new StaticConstructorDemo(); } } 

산출:

 Exception in thread 'main' java.lang.Error: Unresolved compilation problem: Illegal modifier for the constructor in type StaticConstructorDemo; only public, protected & private are permitted. at StaticConstructorDemo.(StaticConstructorDemo.java:4) at StaticConstructorDemo.main(StaticConstructorDemo.java:13) 

위의 예에서 볼 수 있듯이 '예외가 발생하고 있습니다. 생성자 유형에 대한 잘못된 수정자 '. 그리고 분명히 이렇게 적혀있어요 공개, 보호 , & 사적인 허용됩니다.

Java가 정적 생성자를 지원하지 않는 이유는 무엇입니까?

static 키워드로 표시하면 이는 클래스에만 속합니다(예: 정적 메서드, 정적 변수 등). 정적 메서드는 선언된 클래스에 속하기 때문에 하위 클래스에서 상속될 수 없습니다. 마찬가지로 하위 클래스에서는 정적 변수를 사용할 수 없습니다.

생성자의 경우 생성자는 재사용 가능한 코드 블록입니다. 즉, 객체를 생성하는 동안 하위 클래스에서 호출할 수 있습니다. 그러나 정적으로 선언하면 선언 클래스 이외의 하위 클래스에서 사용할 수 없습니다. 따라서 생성자를 정적으로 선언하는 것은 불법입니다. 따라서 이는 상속 개념의 전체 동기를 위반하는 것입니다.

생성자를 정적으로 선언하면 하위 클래스에서 액세스할 수 없으며 클래스 수준에만 속하게 됩니다. 프로그램이 컴파일되지 않고 컴파일 시간 오류가 발생합니다.

중앙 CSS의 버튼

예를 들어 이해해 보겠습니다.

웹 브라우저 설정

StaticConstructorExample.java:

 public class StaticConstructorExample { public StaticConstructorExample() { /*Constructor of this class*/ System.out.println('In StaticConstructorExample Class'); } } 

StaticConstructorChild.java:

 public class StaticConstructorChild extends StaticConstructorExample { public StaticConstructorChild() { System.out.println('In StaticConstructorChild class'); } public void display() { System.out.println('Method of StaticConstructorChild class'); } public static void main(String args[]) { StaticConstructorChild obj = new StaticConstructorChild(); obj.display(); } } 

산출:

 In StaticConstructorExample Class In StaticConstructorChild class Method of StaticConstructorChild class 

위의 예에서 자식 클래스 객체가 생성될 때 먼저 부모 클래스 생성자를 호출한 다음 자체 클래스 생성자를 호출한다는 것을 알 수 있습니다. 이는 new 키워드가 객체를 생성한 다음 값을 초기화하기 위해 생성자를 호출하기 때문에 발생합니다. 모든 하위 클래스에는 상위 클래스의 속성을 상속하는 첫 번째 문으로 super() 생성자가 있습니다.

이것이 Java에서 정적 생성자를 만들 수 없는 이유입니다.

결론:

Java의 생성자는 정적일 수 없습니다. 생성자가 정적으로 표시되면 하위 클래스에서 호출할 수 없기 때문입니다. 따라서 하위 클래스의 객체는 생성되지 않습니다. 프로그램이 컴파일되지 않고 컴파일 시간 오류가 발생합니다.