표준 Java API의 일부 클래스는 다른 클래스와 약간 다르게 처리됩니다. 컴파일러 및 / 또는 JVM의 특별한 지원 없이는 구현할 수없는 클래스에 대해 이야기하고 있습니다.
내가 바로 생각해 낸 것은 다음과 같습니다.
Object
(분명히) 다른 것들 중에서도 슈퍼 클래스가 없습니다.String
언어는 + 연산자에 대한 특별한 지원을 가지고 있기 때문입니다.Thread
실행을 “포크”하는 바이트 코드 명령이 없다는 사실에도 불구하고 마법의 start () 메서드가 있기 때문입니다.
나는 이것들과 같은 모든 클래스가 JLS에 언급 된 어떤 식 으로든 있다고 생각합니다. 틀 렸으면 말해줘.
어쨌든, 어떤 다른 클래스가 있습니까? Java 언어로 된 “영광 클래스”의 전체 목록이 있습니까?
답변
다양한 답변이 있으므로 모두 수집하고 일부를 추가하는 것이 유용 할 것이라고 생각했습니다.
클래스
- AutoBoxing 클래스-컴파일러는 특정 클래스 만 허용합니다.
- 클래스 -자체 리터럴 (예 : int.class)이 있습니다. 또한 새 인스턴스를 생성하지 않고 일반 유형을 추가합니다.
- 문자열 -오버로드 된 + 연산자 및 리터럴 지원
- Enum -switch 문에서 사용할 수있는 유일한 클래스입니다 (곧 String에도 권한이 부여됨). 다른 작업 (자동 정적 메서드 생성, 직렬화 처리 등)도 수행하지만 이론적으로는 코드를 사용하여 수행 할 수 있습니다. 단지 많은 상용구 일 뿐이며 일부 제약 조건은 하위 클래스 (예 : 특별한 서브 클래 싱 규칙) 그러나 열거 형의 특권 상태 없이는 결코 달성 할 수없는 것은 switch 문에 포함시키는 것입니다.
- 객체 -모든 객체의 루트 (복제 및 finalize 메소드를 추가하는 것은 구현할 수있는 것이 아닙니다)
- 참조 : WeakReference, SoftReference, PhantomReference
- 스레드 -언어는 스레드를 시작하라는 특정 명령을 제공하지 않고 마술처럼 start () 메서드에 적용합니다.
- Throwable -throw, throw 및 catch와 함께 작동 할 수있는 모든 클래스의 루트는 물론 Exception 대 RuntimeException 및 Error에 대한 컴파일러 이해도입니다.
- NullPointerException 및 athrow 이외의 다른 바이트 코드 명령에 의해 throw 될 수있는 ArrayIndexOutOfBounds와 같은 기타 예외.
인터페이스
- Iterable- 향상된 for 루프에서 사용할 수있는 유일한 인터페이스
명예로운 언급은 다음과 같습니다.
- java.lang.reflect. 배열 -Class 객체에 정의 된대로 새 배열을 만드는 것은 불가능합니다.
- 주석 런타임시 인터페이스처럼 작동하는 특수 언어 기능입니다. Object에 대한 대체를 정의 할 수없는 것처럼 확실히 다른 Annotation 인터페이스를 정의 할 수 없습니다. 그러나 모든 기능을 구현하고 리플렉션이 아닌 다른 방법으로 검색 할 수 있습니다. 사실, 주석이 도입되기 전에는 많은 XML 기반 및 javadoc 태그 기반 구현이있었습니다.
- ClassLoader- 바이트 코드 방식이 있지만 클래스를로드하는 언어 방식이 없기 때문에 JVM과 확실히 특권 관계가 있으므로 그런 방식으로 Array와 같습니다. 구현 세부 사항이지만 JVM에 의해 다시 호출되는 특별한 권한도 있습니다.
- 직렬화 가능 -리플렉션을 통해 기능을 구현할 수 있지만 고유 한 권한이있는 키워드가 있으며 일부 시나리오에서 SecurityManager와 친밀 해지는 데 많은 시간을 할애합니다.
참고 : JNI (예 : IO)를 제공하는 항목은 목록에서 제외했습니다. 원하는 경우 항상 자체 JNI 호출을 구현할 수 있기 때문입니다. 그러나 특권 방식으로 JVM과 상호 작용하는 기본 호출은 다릅니다.
배열은 논란의 여지가 있습니다-그들은 Object를 상속하고 이해되는 계층 구조를 가지고 있습니다 (Object []는 String []의 상위 유형입니다). 그러나 그것들은 그 자체로 정의 된 클래스가 아니라 언어 기능입니다.
답변
Class
, 물론이야. 자체 리터럴 ( String
BTW 와 공유하는 구별 )이 있으며 모든 반사 마법의 시작점입니다.
답변
sun.misc.unsafe 는 모든 더럽고 언어를 깨는 해킹의 어머니입니다.
답변
- 열거 형. 하위 클래스는 허용되지 않지만 컴파일러는 할 수 있습니다.
- java.util.concurrent 아래의 많은 것들은 JVM 지원없이 구현 될 수 있지만 훨씬 덜 효율적입니다.
답변
모든 Number 클래스 에는 Autoboxing 형식으로 약간의 마법이 있습니다.
답변
중요한 클래스 가 언급되었으므로 몇 가지 인터페이스를 언급하겠습니다.
Iterable
(1.5부터) 인터페이스 -이 객체가 foreach 루프에 참여할 수 있습니다 :
Iterable<Foo> iterable = ...;
for (Foo foo : iterable) {
}
Serializable
인터페이스는 표준 인터페이스는 다른 매우 특별한 의미를 가지고 있습니다. 인터페이스에 정의되지 않은 경우에도 고려할 메서드를 정의 할 수 있습니다 (예 readResolve()
:). transient
키워드의 동작에 영향을주는 언어 요소 Serializable
구현합니다.
답변
- Throwable , RuntimeException, 오류 AssertionError
- 참조 WeakReference, SoftReference, PhantomReference
- 열거 형
- 주석