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는 모든 더럽고 언어 정신을 깨는 해킹의 어머니다.
- Enum. 하위 분류는 허용되지 않지만 컴파일러는 가능합니다.
- java.util.concurrent의 많은 기능은 JVM 지원 없이도 구현할 수 있지만 효율성이 훨씬 떨어집니다.
모든 Number 클래스에는 Autoboxing 형태로 약간의 마법이 있습니다.
중요한 클래스가 언급되었으므로 몇 가지 인터페이스에 대해 설명하겠습니다.
그Iterable
interface (1.5 이후) - 오브젝트를 foreach 루프에 참여시킬 수 있습니다.
Iterable<Foo> iterable = ...;
for (Foo foo : iterable) {
}
인터페이스에는 표준 인터페이스와는 다른 매우 특별한 의미가 있습니다.인터페이스에 정의되어 있지 않은 경우에도 고려되는 방식을 정의할 수 있습니다(예:readResolve()
).transient
키워드는 의 동작에 영향을 주는 언어 요소입니다.Serializable
실장하고 있습니다.
- 폐기 가능, 런타임예외, 오류 Assertion Error
- 참조 WeakReference, SoftReference, PhantomReference
- 열거형
- 주석
의 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
'source' 카테고리의 다른 글
PHP의 session_unset()과 session_destroy()의 차이점은 무엇입니까? (0) | 2022.09.24 |
---|---|
"\u00ed"와 같은 Unicode 이스케이프 시퀀스를 적절한 UTF-8 인코딩 문자로 디코딩하려면 어떻게 해야 합니까? (0) | 2022.09.24 |
VueJ + Vuex에서 여러 웹 소켓 엔드포인트를 처리하는 방법 (0) | 2022.09.24 |
해당 함수 내에서 함수 이름을 얻는 방법은 무엇입니까? (0) | 2022.09.24 |
Laravel Archent는 결과를 일 단위로 그룹화합니다. (0) | 2022.09.24 |