标准Java API中的一些类与其他类略有不同。我说的是那些没有特殊编译器和/或JVM支持就无法实现的类。
我能想到的是:
Object
(显然)因为它在其他事物之外没有超类。String
因为该语言对+运算符有特殊支持。Thread
因为它有这个神奇的start()方法,尽管没有字节码指令可以“分叉”执行。
我想所有这些类都以某种方式在JLS中提到了。如果我错了,请纠正我。
无论如何,还有哪些这样的类存在?Java语言中是否有完整的“受人尊敬的类”列表?
标准Java API中的一些类与其他类略有不同。我说的是那些没有特殊编译器和/或JVM支持就无法实现的类。
我能想到的是:
Object
(显然)因为它在其他事物之外没有超类。String
因为该语言对+运算符有特殊支持。Thread
因为它有这个神奇的start()方法,尽管没有字节码指令可以“分叉”执行。我想所有这些类都以某种方式在JLS中提到了。如果我错了,请纠正我。
无论如何,还有哪些这样的类存在?Java语言中是否有完整的“受人尊敬的类”列表?
有很多不同的答案,因此我认为收集它们所有(并添加一些)会很有用:
注意:我在列表中省略了提供JNI的内容(例如IO),因为如果你愿意,你总是可以实现自己的JNI调用。然而与JVM以特权方式交互的本地调用是不同的。
Arrays是有争议的-它们继承自Object,有一个理解的层次结构(Object[]是String[]的超类型),但它们是语言功能,而不是独立定义的类。
SecurityManager
怎么样?或者与反射或序列化有关的任何内容呢? - AntimonyClass
,当然。它有自己的字面值(这一点与String
相同),并且是所有反射魔法的起点。
既然提到了重要的类,那么我就提一下一些接口:
Iterable
接口(自1.5版起) - 它允许对象参与foreach循环:
Iterable<Foo> iterable = ...;
for (Foo foo : iterable) {
}
Serializable
接口有着非常特殊的含义,与标准接口不同。您可以定义方法,即使它们未在接口中定义也会被考虑(例如 readResolve()
)。transient
关键字是影响 Serializable
实现者行为的语言元素。
transient
关键字。 - BozhoComparable
不参与任何内部操作。你可以轻松地编写 NewComparable
和新的 NewArrays.sort(..)
,并具有相同的功能。 - BozhoJava数组,如int[].class
[I
类;)虽然它不是一个 API 类。 - aioobeSystem
类中有一些神奇的东西。
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) {
...
}