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
'programing' 카테고리의 다른 글
PHP - SSL 인증서 오류: 로컬 발급자 인증서를 가져올 수 없습니다. (0) | 2022.10.08 |
---|---|
콤마가 있는 문자열을 배열로 변환 (0) | 2022.10.08 |
유닛 테스트를 위해 개인 방법을 공개하는 것... 좋은 생각? (0) | 2022.10.08 |
LINQ에서 엔티티로 'System' 메서드를 인식하지 않습니다.String ToString() 메서드입니다.이 메서드는 스토어 식으로 변환할 수 없습니다. (0) | 2022.10.07 |
PHPStorm의 PHP 파일에 대한 잘못된 구문 강조 표시 (0) | 2022.10.07 |