2013-09-03 3 views
1

되어 주 (기본값)에서 다른를 자바 프로그램의 진입 점을 변경할 수 있습니까? 내가 코드를자바 진입 점

public class TestWithoutMain { 
    static { 
     System.out.println("hello bristy!!!"); 
    } 
} 

를 작성하는 경우

나는 이클립스에서 코드를 실행할 수 없습니다입니다. 내가 위의 코드에 main 메소드를 추가하는 경우

public class TestWithoutMain { 
    static { 
     System.out.println("hello bristy!!!"); 
    } 
    public static void main(String[] args) { 

    } 
} 

헬로 bristy를 인쇄!.

+4

왜이 작업을 수행 하시겠습니까? –

+0

주 기능의 핵심은 'static {...}'블록이 아니라 코드를 넣는 것입니다. –

+0

[java 프로그램의 진입 점으로 다른 정적 메소드가 있습니까?] (http : /stackoverflow.com/questions/2472506/having-another-static-method-as-the-entry-point-of-the-java-program) –

답변

2

기본 개념은 메인을 통해 실행되는 것보다 먼저 검색되는 것입니다. 그래서 첫 번째 대답은 아니오입니다. 진입 점은 변경할 수 없습니다.

이제 코드에 정적 System.out.prinln 블록이 있습니다. 자바에서는 클래스가 처음로드 될 때 정적 컨텐츠가로드되고 메모리에 단일 사본 만 있습니다. 그래서 정적 블록은 메인 블록이 발견 된 후에 실행될 것입니다. 이 메인 블럭을 제거해보십시오. 차이점을 직접 확인해보십시오.

2

정적 초기화 도구에 비즈니스 코드를 넣는 것과 같은 트릭이 가능합니다 (main은 비어 있습니다). 그러나 정적 이니셜 라이저의 기본 목적은 초기화를으로 수행하고 비즈니스 코드를 실행하지 않는 것입니다.

로깅 목적으로 System.out.println("TestWithoutMain class loaded");과 같은 것을 넣을 수 있지만, 이것이 프로그램의 주된 목표는 아닙니다.

Java는 사용자가 악성 코드, 읽을 수없는 코드 및 유지 보수 할 수없는 코드를 작성하는 것을 방지하지 않습니다. 그리고 말도 안되는 프로그램을 만드는 것에서. 다른 프로그래밍 언어도 사용하지 마십시오.

일반적인 프로그래밍 방법을 사용하면 main을 우회하는 정적 초기화 프로그램에 비즈니스 코드를 넣지 않아도됩니다.

+0

엔트리 포인트로 main 메소드가 필요합니다. – eis

+0

예.하지만 애플리케이션을 실행하기 위해서만 사용되는 일부 'MainDummy' 클래스에 정의 된 빈 메소드 일 수 있습니다. –

+0

예. 그러나 질문이 "진입 점을 메인에서 다른 것으로 변경할 수 있습니까?"라고 대답하면 내 대답은 '아니오'가됩니다. 항상 메인 메소드가 진입 점으로 필요합니다. – eis