클래스 파일에서 슈퍼 생성자 호출을 제거하면 어떻게됩니까?

지미 T.

생성자에 슈퍼 클래스 생성자 (또는 this())에 대한 명시 적 호출이 없으면 컴파일러는 super().

이 호출이 컴파일 후 클래스 파일에서 제거되면 어떻게됩니까?

지미 T.

나는 그것을 직접 시도했다.

class Test
{
    public Test()
    {
        System.out.println("Hello World");
    }

    public static void main(String[] args)
    {
        new Test()
    }
}

나는 그것을 컴파일 invokespecial java/lang/Object/<init>()V하고 클래스 파일 편집기로 생성자에서 제거했습니다 .

JVM이 클래스로드를 거부하는 것 같습니다.

Exception in thread "main" java.lang.VerifyError: Operand stack overflow
Exception Details:
  Location:
    Test.<init>()V @4: ldc
  Reason:
    Exceeded max stack size.
  Current Frame:
    bci: @4
    flags: { flagThisUninit }
    locals: { uninitializedThis }
    stack: { uninitializedThis, 'java/io/PrintStream' }
  Bytecode:
    0000000: 2ab2 0002 1203 b600 04b1

        at java.lang.Class.getDeclaredMethods0(Native Method)
        at java.lang.Class.privateGetDeclaredMethods(Unknown Source)
        at java.lang.Class.getMethod0(Unknown Source)
        at java.lang.Class.getMethod(Unknown Source)
        at sun.launcher.LauncherHelper.validateMainClass(Unknown Source)
        at sun.launcher.LauncherHelper.checkAndLoadMain(Unknown Source)

나는 그것이 정의 된 행동인지 아직도 모른다.

편집하다

Raedwald에 따르면 스택 조작도 변경해야합니다.

그래서 aload_0슈퍼 생성자 호출 이전에 있던 것도 제거했습니다 .

이제 다음 예외가 발생합니다.

Exception in thread "main" java.lang.VerifyError: Constructor must call super()
or this() before return
    Exception Details:
  Location:
    org/exolin/geno/Test.<init>()V @8: return
  Reason:
    Error exists in the bytecode
  Bytecode:
    0000000: b200 0212 03b6 0004 b1

        at java.lang.Class.getDeclaredMethods0(Native Method)
        at java.lang.Class.privateGetDeclaredMethods(Unknown Source)
        at java.lang.Class.getMethod0(Unknown Source)
        at java.lang.Class.getMethod(Unknown Source)
        at sun.launcher.LauncherHelper.validateMainClass(Unknown Source)
        at sun.launcher.LauncherHelper.checkAndLoadMain(Unknown Source)

이로 인해 호기심이 생겨 생성자 지침을 다음과 같이 재정렬했습니다.

getstatic java/lang/System/out Ljava/io/PrintStream;
ldc "Message"
invokevirtual java/io/PrintStream/println(Ljava/lang/String;)V
aload_0
invokespecial java/lang/Object/<init>()V
return

작동했습니다!

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

확장 클래스에서 선택적 슈퍼 메서드 또는 생성자를 호출하지 않으면 어떻게됩니까?

분류에서Dev

Kotlin에서 정규화 된 슈퍼 클래스 생성자를 어떻게 호출하나요?

분류에서Dev

상속 된 다른 클래스에서 슈퍼 생성자를 호출하는 방법은 무엇입니까?

분류에서Dev

어떻게 슈퍼 클래스 생성자에 전달하기 전에 특성을 수정할 수?

분류에서Dev

슈퍼 클래스 생성자에서 어떤 하위 클래스 지정

분류에서Dev

어떻게 자바에서, 슈퍼 클래스의 서브 클래스의 메소드를 호출합니까?

분류에서Dev

슈퍼 클래스 생성자를 호출하는 HTML5 게임

분류에서Dev

서브 클래스의 슈퍼 클래스 생성자를 첫 번째 줄로 호출하는 것이 중요합니까?

분류에서Dev

슈퍼 클래스 생성자를 호출하는 자식 클래스

분류에서Dev

Python 슈퍼 클래스에서 메서드를 실행할 때이를 호출 한 자식 클래스의 이름을 어떻게 알 수 있습니까?

분류에서Dev

어떻게 슈퍼 클래스의 서브 클래스와 다형성을 할 수 있습니까?

분류에서Dev

다형성 속성을 유지하면서 슈퍼 클래스 배열 생성

분류에서Dev

슈퍼 타입 메서드를 호출하면 새로운 슈퍼 타입 객체가 생성됩니까?

분류에서Dev

Python-자식 클래스 인스턴스에서 슈퍼 클래스의 메서드를 어떻게 호출 할 수 있습니까?

분류에서Dev

슈퍼 클래스에서 생성 될 때 자바 호출 함수

분류에서Dev

슈퍼 클래스 생성자의 MATLAB 슈퍼 클래스 호출

분류에서Dev

슈퍼 클래스 사용자 지정 init / setup 메서드를 호출하려면 awakeFromNib를 하위 클래스로 지정 하시겠습니까?

분류에서Dev

Android : 코드에서 슈퍼 클래스가 호출되어야하는 곳

분류에서Dev

Android : 코드에서 슈퍼 클래스가 호출되어야하는 곳

분류에서Dev

슈퍼 클래스 생성자를 호출하지 않고 다단계 상속

분류에서Dev

어떻게 자식 클래스는 롬복에서 올바른 슈퍼 생성자를 호출 할 수 있도록?

분류에서Dev

파생 클래스에서 기본 함수를 호출하면 어떻게됩니까?

분류에서Dev

Typescript에서 슈퍼 생성자를 호출 한 후 자식 클래스 인스턴스에서 속성에 액세스 할 수 없습니다.

분류에서Dev

슈퍼 클래스가 없다면 슈퍼 생성자?

분류에서Dev

내 슈퍼 클래스가 Swift에서 자체 메서드 대신 하위 클래스의 메서드를 호출하는 이유는 무엇입니까?

분류에서Dev

슈퍼 클래스 인스턴스를 생성자에 전달하는 것이 더 나은 방법입니까?

분류에서Dev

생성자 외부에서 슈퍼 생성자를 어떻게 호출합니까?

분류에서Dev

Python에서 다른 인수 목록을 사용하는 슈퍼 클래스의 생성자

분류에서Dev

Dart-서브 클래스의 생성자에서 수퍼 클래스의 팩토리 생성자를 어떻게 호출합니까?

Related 관련 기사

  1. 1

    확장 클래스에서 선택적 슈퍼 메서드 또는 생성자를 호출하지 않으면 어떻게됩니까?

  2. 2

    Kotlin에서 정규화 된 슈퍼 클래스 생성자를 어떻게 호출하나요?

  3. 3

    상속 된 다른 클래스에서 슈퍼 생성자를 호출하는 방법은 무엇입니까?

  4. 4

    어떻게 슈퍼 클래스 생성자에 전달하기 전에 특성을 수정할 수?

  5. 5

    슈퍼 클래스 생성자에서 어떤 하위 클래스 지정

  6. 6

    어떻게 자바에서, 슈퍼 클래스의 서브 클래스의 메소드를 호출합니까?

  7. 7

    슈퍼 클래스 생성자를 호출하는 HTML5 게임

  8. 8

    서브 클래스의 슈퍼 클래스 생성자를 첫 번째 줄로 호출하는 것이 중요합니까?

  9. 9

    슈퍼 클래스 생성자를 호출하는 자식 클래스

  10. 10

    Python 슈퍼 클래스에서 메서드를 실행할 때이를 호출 한 자식 클래스의 이름을 어떻게 알 수 있습니까?

  11. 11

    어떻게 슈퍼 클래스의 서브 클래스와 다형성을 할 수 있습니까?

  12. 12

    다형성 속성을 유지하면서 슈퍼 클래스 배열 생성

  13. 13

    슈퍼 타입 메서드를 호출하면 새로운 슈퍼 타입 객체가 생성됩니까?

  14. 14

    Python-자식 클래스 인스턴스에서 슈퍼 클래스의 메서드를 어떻게 호출 할 수 있습니까?

  15. 15

    슈퍼 클래스에서 생성 될 때 자바 호출 함수

  16. 16

    슈퍼 클래스 생성자의 MATLAB 슈퍼 클래스 호출

  17. 17

    슈퍼 클래스 사용자 지정 init / setup 메서드를 호출하려면 awakeFromNib를 하위 클래스로 지정 하시겠습니까?

  18. 18

    Android : 코드에서 슈퍼 클래스가 호출되어야하는 곳

  19. 19

    Android : 코드에서 슈퍼 클래스가 호출되어야하는 곳

  20. 20

    슈퍼 클래스 생성자를 호출하지 않고 다단계 상속

  21. 21

    어떻게 자식 클래스는 롬복에서 올바른 슈퍼 생성자를 호출 할 수 있도록?

  22. 22

    파생 클래스에서 기본 함수를 호출하면 어떻게됩니까?

  23. 23

    Typescript에서 슈퍼 생성자를 호출 한 후 자식 클래스 인스턴스에서 속성에 액세스 할 수 없습니다.

  24. 24

    슈퍼 클래스가 없다면 슈퍼 생성자?

  25. 25

    내 슈퍼 클래스가 Swift에서 자체 메서드 대신 하위 클래스의 메서드를 호출하는 이유는 무엇입니까?

  26. 26

    슈퍼 클래스 인스턴스를 생성자에 전달하는 것이 더 나은 방법입니까?

  27. 27

    생성자 외부에서 슈퍼 생성자를 어떻게 호출합니까?

  28. 28

    Python에서 다른 인수 목록을 사용하는 슈퍼 클래스의 생성자

  29. 29

    Dart-서브 클래스의 생성자에서 수퍼 클래스의 팩토리 생성자를 어떻게 호출합니까?

뜨겁다태그

보관