programing

Java 컴파일 클래스에는 달러 기호가 포함되어 있습니다.

goodjava 2022. 10. 21. 21:22

Java 컴파일 클래스에는 달러 기호가 포함되어 있습니다.

이클립스를 아이디로 사용하고 있어요응용 프로그램을 JAR 파일로 내보낼 때도 사용합니다.JAR 파일에서 클래스를 보면 클래스 이름, 달러 기호, 숫자가 포함된 클래스가 몇 개 있습니다.예를 들어 다음과 같습니다.

Find$1.class 
Find$2.class
Find$3.class
Find.class

더 큰 학급에서 이런 일을 하는 걸 알아챘어요.수업의 규모가 너무 커져서 여러 클래스로 편성되기 때문일까요?여러 포럼을 검색하여 찾아보고 Java 문서를 검색해 봤지만 관련된 내용은 찾을 수 없었습니다.누가 설명 좀 해줄래?

클래스에 존재하는 경우 내부 클래스가 컴파일되고 클래스 파일은ClassName$InnerClassName. Anonymous inner class의 경우 숫자로 표시됩니다.클래스의 크기(Java Code)는 여러 클래스를 생성하지 않습니다.

예: 이 코드 조각이 주어진 경우:

public class TestInnerOuterClass {
    class TestInnerChild{

    }

    Serializable annoymousTest = new Serializable() {
    };
}

생성되는 클래스는 다음과 같습니다.

  1. TestInnerOuterClass.class
  2. TestInnerOuterClass$TestInnerChild.class
  3. TestInnerOuterCasss$1.class

업데이트:

익명의 클래스를 사용하는 것은 나쁜 관행으로 간주되지 않으며, 단지 사용법에 따라 달라집니다.

SO에 대한 이 토론을 확인하십시오.

이 큰 클래스에는 익명의 클래스가 있기 때문입니다.이 명명 규칙을 사용하여 컴파일됩니다.

"Anonymous Class Conundrum" 참조

@mprabhat에 의해 제시된 위의 사례 외에 다음과 같은 경우가 있습니다.

  1. 클래스에 열거 변수가 포함되어 있는 경우 그에 대한 별도의 클래스도 생성됩니다.생성된 .class의 이름은 ClassName$Name_of_enum 입니다.
  2. 클래스 X가 다른 클래스 Y를 확장하는 경우 ClassName$1.class 또는 ClassName$1.class라는 이름의 .class가 생성됩니다.
  3. 클래스 X가 인터페이스 Y를 구현하고 있는 경우 ClassName$1.class 또는 ClassName$1.class라는 이름으로 생성된 .class가 있습니다.

이 케이스들은 항아리 안에 있는 .class 파일에 대한 제 검사에서 파생된 것입니다.

당신의 코멘트에 답하는 것은 익명 수업입니다.그들은 절대 아니다.액션 리스너를 JButton에 할당하려면 다음 사항을 고려하십시오.

JButton button = new JButton(...);
button.addActionListener(new ActionListener() { ... });

또는 "name" 속성을 기준으로 대소문자를 구분하지 않는 정렬을 수행합니다.

Collections.sort( array, new Comparator<Foo>() {
    public int compare(Foo f1, Foo f2) {
        return f1.getName().toLowerCase().compareTo(f2.getName().toLowerCase());
    }
});

또한 Runnable과 Callable이 익명의 클래스로 진행되는 것도 많이 볼 수 있습니다.

언급URL : https://stackoverflow.com/questions/11388840/java-compiled-classes-contain-dollar-signs