2013-01-17 1 views
3

나는 MyProgram.java이라는 프로그램이 있습니다. 다른 컴퓨터에서 실행될 다른 디렉터리에서 실행하고 싶습니다. 그래서 디렉토리를 만들고 MyProgram.class 파일을 복사하고 명령을 포함하는 파일 (Run.bat)을 실행하는 파일을 만들었습니다.

이 작업을 수행하지 못했습니다. Eclipse에서 생성 된 SPVerification$1.class을 복사해야만 작동합니다.

XXX$1.class 파일은 무엇이며 응용 프로그램을 실행하려면 파일이 XXX.class 옆에 왜 필요합니까?

답변

3

를 생성하는 비대칭 내부 클래스. 당신이 상기 Runnable 인터페이스를 구현하는이 경우, 익명의 내부 클래스를 생성

class OuterClass { 
    // ... 
    void method() { 
     Thread t = new Thread(new Runnable() { 
      // ... code implementing Runnable interface ... 
     }); 
     // ... code to use t or whatever 
    } 
} 

같은 조각, 그 클래스의 컴파일 된 코드가있을 때 즉, OuterClass$<number>.class 파일로 이동합니다. .class 파일 이름의 수가 증가하면 이러한 클래스를 둘 이상 가질 수 있습니다.

인터페이스를 구현하는 대신 익명의 내부 클래스를 사용하여 클래스를 확장하더라도 구문이 완전히 동일하다는 점에 유의하십시오. 이는 명명 된 클래스를 만드는 것과 약간 다르며 여기서는 implementsextends을 적절하게 사용해야합니다.

+0

downvoters : downvoting 할 때 신중해야합니다. 기존 downvotes 또는 코멘트가없는 경우 ... 답변에 문제가있는 경우 수정해야합니다. 설명했다. – hyde

11

.java 파일에 내부/중첩 클래스가있는 경우 컴파일러는 Java 컴파일러에서 Yourclass $ xxx.class 파일로 생성됩니다.

내부 클래스 정의는 추가 클래스 파일을 생성합니다. 이 클래스 파일에는 MyClass $ MyInnerClass.class와 같은 내부 클래스 이름과 외부 클래스 이름이 결합 된 이름이 있습니다. - Source

(편집)

고려하여 다음과 같은 Class 정의

// MyClass class 
public class MyClass{ 

    // Inner class Test1 
    class Inner1 { 
    } 

    // Inner class Test2 
    class Inner2{ 
    } 


    public static void main(String [] args) { 

     // Anonymous inner class 1 
     new Object() { 
     }; 

     // Anonymous inner class 2 
     new Object() { 
     }; 

     System.out.println("Bunch of $ files :)"); 
    } 
} 

는 그들이이 다음과 같은 파일

MyClass.class 
MyClass$Inner1.class 
MyClass$Inner2.class 
MyClass$1.class 
MyClass$2.class 
+7

XXX $ 1은 * 익명의 내부 클래스 * – amit