2011-02-11 6 views
0

다음 기본 클래스를 고려하십시오.Java : JVM이 main() 메소드를 실행할 때 생성자가 암시 적으로 호출됩니까?

public class ConstructorExample { 

    public ConstructorExample(){ 
     System.out.println("Constructor called."); 
    } 

    public static void main(String[] args) { 
     ConstructorExample ce = new ConstructorExample(); 
    } 

} 

위 코드를 실행할 때 "생성자가 호출되었습니다." 한 번만 인쇄됩니다. 분명히 main 메소드가 호출 될 때 생성자가 명시 적으로 호출됩니다.

그러나 JVM이 클래스를로드하고 처음에 응용 프로그램을 시작할 때 생성자가 호출되지 않는 이유는 무엇입니까?

답변

6

없음은 그게 전부 static

이 라인

아래 주석 확인

ConstructorExample ce = new ConstructorExample(); 

으로 실행되고

\\ConstructorExample ce = new ConstructorExample();

+0

그래서 생성자는 클래스의 비 정적 인스턴스에만 호출됩니다. – Mikaveli

+3

생성자는 * Object가 생성 될 때만 호출됩니다. –

+0

[이 기사는 jls] (http://java.sun.com/docs/books/jls/third_edition/html/classes.html#41652) –

1

JVM이 시작시 생성자를 호출하는 이유는 무엇입니까? "main"은 정적 메서드이며 생성 할 ConstructorExample의 인스턴스가 필요하지 않습니다.

1

개체를 통해 main() 메서드를 호출해야하는 이유는 무엇입니까? Afterall, 그것의 static 방법.
메소드가 static 인 목적은 JVM이 main() 메소드를 호출하기위한 오브젝트를 작성할 필요가 없기 때문입니다.

따라서 .class 파일이 JVM에 의해로드 될 때 JVM은 main() 메소드가 실행되도록 찾습니다. 프로그램이 보이면 프로그램 실행을 시작합니다. 그 후에 객체가 생성 될 때 생성자가 호출되고 (여기서는이 경우) "Constructor called"이 한 번만 인쇄됩니다.

관련 문제