programing

Java: 와의 차이점은 무엇입니까?

goodcopy 2022. 10. 8. 22:50
반응형

Java: 와의 차이점은 무엇입니까?

~하다 ,, ,, ,, ,?<clinit>★★★★★★★★★★★★★★★★★★★★★?두 가지 버전이 중요한 이유는 무엇입니까?

https://docs.oracle.com/javase/specs/jvms/se7/html/jvms-2.html

2.9. Special Methods

머신의 에서는, 「12는, 「Java」, 「Java」(22.12), 「Java」라고 특별한 이름을 인스턴스 방식으로서 됩니다.<init>이 이름은 컴파일러에 의해 제공됩니다. 이름 '''이름은 '''이거든요'''<init>는 유효한 식별자가 아니므로 Java 프로그래밍 언어로 작성된 프로그램에서 직접 사용할 수 없습니다.인스턴스 초기화 메서드는 특별한 명령 호출에 의해 Java 가상 머신 내에서만 호출할 수 있으며 초기화되지 않은 클래스 인스턴스에 대해서만 호출할 수 있습니다.인스턴스 초기화 방식은 인스턴스 초기화 방식이 파생된 컨스트럭터의 접근 권한(22.7.4)을 담당한다.

클래스 또는 인터페이스는 최대 1개의 클래스 또는 인터페이스 초기화 방식을 가지며, 이 방식을 호출함으로써 초기화됩니다('2.17.4).클래스 또는 인터페이스의 초기화 메서드는 스태틱이며 인수를 사용하지 않습니다. 있다.<clinit>이 이름은 컴파일러에 의해 제공됩니다. 이름 '''이름은 '''이거든요'''<clinit>는 유효한 식별자가 아니므로 Java 프로그래밍 언어로 작성된 프로그램에서 직접 사용할 수 없습니다.클래스 및 인터페이스 초기화 메서드는 Java 가상 머신에 의해 암묵적으로 호출됩니다.이러한 메서드는 Java 가상 머신에서 직접 호출되는 것이 아니라 클래스 초기화 프로세스의 일부로서 간접적으로만 호출됩니다.

<init>는 인스턴스의 컨스트럭터(또는1개)이며, 비스타틱필드 초기화입니다.

<clinit>는 클래스의 스태틱 초기화 블록 및 스태틱필드 초기화입니다.

class X {

   static Log log = LogFactory.getLog(); // <clinit>

   private int x = 1;   // <init>

   X(){
      // <init>
   }

   static {
      // <clinit>
   }

}

<init>컨스트럭터를 나타냅니다.<clinit>스태틱 이니셜라이저를 나타냅니다.Java Tutorialization の " Static Initialization Blocks " 、 Java Static Initializer

「 」의 <init> ★★★★★★★★★★★★★★★★★」<clinit>라는 것이다.<init>인스턴스를 됩니다.<clinit>클래스 오브젝트 자체를 초기화하기 위해 사용됩니다.를 들면, 「」, 「」의 입니다.static클래스 레벨 필드는<clinit>로딩 및 초기화가 완료됩니다.

Class.forName 메서드를 사용하면 클래스만 초기화됩니다.따라서 이 메서드 내에서는 clinit에만 콜을 발신하고 forName에서 반환된 객체에 newInstance를 사용하면 init을 호출하여 인스턴스를 초기화합니다.다음 코드를 사용하여 디버깅에서 확인할 수 있습니다.

public class ByteCodeParent
{
 public static String name="ByteCode";
 public ByteCodeParent()
{
    System.out.println("In Constructor");
}

 static
 {
     System.out.println("In Static");
 }

 {
     System.out.println("In Instance");
 }

테스트, 사용

   Class<ByteCodeParent> bcp2 =(Class<ByteCodeParent>) Class.forName("ByteCodeParent");
ByteCodeParent bcp4= bcp2.newInstance();

언급URL : https://stackoverflow.com/questions/8517121/java-what-is-the-difference-between-init-and-clinit

반응형