source

Java 언어로 미화된 클래스

factcode 2022. 9. 24. 09:56
반응형

Java 언어로 미화된 클래스

표준 Java API의 일부 클래스는 다른 클래스와 약간 다르게 취급됩니다.컴파일러 및/또는 JVM의 특별한 지원이 없으면 구현할 수 없었던 클래스를 말하는 것입니다.

바로 떠오르는 것은 다음과 같습니다.

  • Object그 중에서도 슈퍼클래스가 없다.
  • String언어에는 + 연산자가 특별히 지원되기 때문입니다.
  • Thread실행을 "실행"하는 바이트 코드 명령이 없음에도 불구하고 마법의 start() 메서드를 가지고 있기 때문입니다.

JLS에는 이러한 모든 클래스가 어떤 식으로든 언급되어 있을 것입니다.내가 틀렸다면 고쳐 주세요.

그나저나, 그런 수업들은 또 뭐가 있을까요?Java 언어로 된 "영예화된 클래스"의 전체 목록이 있습니까?

다양한 답변이 있기 때문에 모두 모아 두면 편리하다고 생각했습니다.

  • AutoBoxing 클래스 - 컴파일러는 특정 클래스만 허용합니다.
  • 클래스 - 자체 리터럴이 있습니다(예: int.class).새 인스턴스를 만들지 않고 일반 타이핑을 추가합니다.
  • 문자열 - 오버로드된 + 연산자 및 리터럴 지원
  • Enum - 스위치문에서 사용할 수 있는 유일한 클래스(String에도 곧 특권이 부여됩니다).다른 작업(자동 정적 메서드 작성, 시리얼화 처리 등)도 수행합니다.하지만 이론적으로는 코드를 사용하여 달성할 수 있습니다.보일러플레이트가 많을 뿐이며 일부 제약조건은 서브클래스(특수 서브클래스 규칙 등)에서는 적용할 수 없지만, 프로파일의 st.가 없으면 달성할 수 없는 것이 있습니다.Enum의 atus는 스위치스테이트먼트에 포함됩니다.
  • 오브젝트 - 모든 오브젝트의 루트 (클론을 추가하고 메서드를 확정하는 것은 구현할 수 없습니다)
  • 참고 자료:WeakReference, SoftReference, PhantomReference
  • 스레드 - 이 언어는 스레드를 시작하기 위한 특정 명령을 제공하는 것이 아니라 마법처럼 스레드를 start() 메서드에 적용합니다.
  • 슬로우 가능 - 던지기, 던지기, 캐치를 사용할 수 있는 모든 클래스의 루트 및 예외와 캐치에 대한 컴파일러의 이해.런타임예외 및 오류.
  • 특수한 포인터예외 및 ArrayIndexOutOfBounds 등의 예외는 athrow 이외의 바이트 코드 명령에 의해 느려질 수 있습니다.

인터페이스

  • Itable - 확장 루프에서 사용할 수 있는 유일한 인터페이스

명예로운 언급은 다음과 같습니다.

  • java.displect.reflect.배열 - 클래스 개체에서 정의한 대로 새 배열을 만들 수 없습니다.
  • 주석 런타임에 인터페이스처럼 동작하는 특수한 언어 기능입니다.오브젝트에 대한 대체를 정의할 수 없는 것처럼 다른 주석 인터페이스를 정의할 수 없습니다.그러나 이러한 기능을 모두 구현하여 반사 대신 다른 방법으로 그것들을 회수할 수 있습니다(및 보일러 플레이트 전체를 회수할 수도 있습니다.실제로 주석이 도입되기 전에는 XML 기반 및 javadoc 태그 기반 구현이 많이 있었습니다.
  • ClassLoader - Bytecode 방식은 있지만 클래스를 로드하는 언어 방법이 없기 때문에 JVM과 확실히 특권 관계가 있습니다.그러면 Array와 같습니다.또한 구현 세부 사항이지만 JVM에 의해 다시 호출되는 특별한 특권이 있습니다.
  • 시리얼화 가능 - 리플렉션을 통해 기능을 구현할 수 있지만 자체 특권 키워드가 있어 경우에 따라서는 Security Manager와 친해지기 위해 많은 시간을 소비할 수 있습니다.

주의: JNI를 제공하는 것(IO 등)은 생략했습니다.왜냐하면 JNI 콜은 언제든지 실장할 수 있기 때문입니다.단, 특권 방식으로 JVM과 대화하는 네이티브콜은 다릅니다

어레이는 오브젝트를 상속하고 계층이 인식되지만(오브젝트[]는 String[]의 슈퍼타입이지만 언어기능이지 정의된 클래스는 아닙니다.

Class.String

sun.misc.disc.disc.disc는 모든 더럽고 언어 정신을 깨는 해킹의 어머니다.

  1. Enum. 하위 분류는 허용되지 않지만 컴파일러는 가능합니다.
  2. java.util.concurrent의 많은 기능은 JVM 지원 없이도 구현할 수 있지만 효율성이 훨씬 떨어집니다.

모든 Number 클래스에는 Autoboxing 형태로 약간의 마법이 있습니다.

중요한 클래스가 언급되었으므로 몇 가지 인터페이스에 대해 설명하겠습니다.

Iterableinterface (1.5 이후) - 오브젝트를 foreach 루프에 참여시킬 수 있습니다.

Iterable<Foo> iterable = ...;
for (Foo foo : iterable) {

}

인터페이스에는 표준 인터페이스와는 다른 매우 특별한 의미가 있습니다.인터페이스에 정의되어 있지 않은 경우에도 고려되는 방식을 정의할 수 있습니다(예:readResolve()).transient키워드는 의 동작에 영향을 주는 언어 요소입니다.Serializable실장하고 있습니다.

  1. 폐기 가능, 런타임예외, 오류 Assertion Error
  2. 참조 WeakReference, SoftReference, PhantomReference
  3. 열거형
  4. 주석

의 Java 어레이int[].class

그러나 실제 더러운 작업은 언급되지 않은 일부 하위 클래스에 의해 수행됩니다(12.2.1 로딩 프로세스 참조java.lang.ClassLoader).

이건 잘 모르겠어요.그러나 IO 개체를 수동으로 구현하는 방법이 생각나지 않습니다.

그 안에 마법이 있다.System학급.

System.arraycopy네이티브 코드로의 훅입니다.

public static native void arraycopy(Object array1, int start1, 
  Object array2, int start2, int length);

그렇지만.....

/**
 * Private version of the arraycopy method used by the jit
 * for reference arraycopies
 */
private static void arraycopy(Object[] A1, int offset1,
  Object[] A2, int offset2, int length) {
   ...
}

주장의 특별한 취급이 언급된 이후부터요.다음은 jvm에 의해 특수 처리되는 몇 가지 예외 유형입니다.

  • 특수한 포인터예외.
  • 산술 예외
  • 스택 오버플로우예외.
  • 모든 종류의 Out Of Memory Errors
  • ...

예외는 특별하지 않지만 jvm은 특수한 경우에 이를 사용하기 때문에 직접 jvm을 작성하지 않고는 구현할 수 없습니다.나는 주변에 더 특별한 예외가 있다고 확신한다.

이러한 클래스의 대부분은 컴파일러 또는 JVM의 '특별한' 도움을 받아 실제로 구현되지 않습니다.오브젝트는 내부 JVM 구조를 탐색하는 네이티브를 등록하지만, 자신의 클래스도 등록할 수 있습니다(이것은 의미론의 영향을 받는 것은 인정합니다.JVM에 정의된 네이티브 호출은 특별한 JVM 지원으로 간주할 수 있습니다).

/is/는 이러한 내부 구조를 초기화하는 방법에 대한 '신규' 및 '투척' 지침의 동작입니다.

주석과 숫자는 거의 모든 면에서 기괴하다.

언급URL : https://stackoverflow.com/questions/3458281/glorified-classes-in-the-java-language

반응형