为什么0代表java.lang.Class.forName0?

时间:2018-02-21 16:56:58

标签: java exception stack-trace

我熟悉Java异常的基本结构,但是我第一次注意到Class.forName堆栈跟踪的奇怪之处:<​​/ p>

java.lang.Class.forName0(Native Method)
java.lang.Class.forName(Class.java:195)
...
java.lang.Thread.run(Thread.java:745)

为什么提到了两个forName实例,零代表什么?这是堆栈跟踪如何表示具有不同签名的多个同名方法吗?

1 个答案:

答案 0 :(得分:5)

请注意,此方法的源代码的可见性标记为private

/** Called after security check for system loader access checks have been made. */
private static native Class<?> forName0(String name, boolean initialize,
                                        ClassLoader loader,
                                        Class<?> caller)
    throws ClassNotFoundException;

这意味着这个课程并不打算成为面向公众的API的一部分,也不是你作为凡人应该直接调用的东西。

为什么零?它只是一个命名惯例。如果它超载forName,它也会显得很奇怪,因为它不打算在这个特定类之外使用。

此命名约定不受Java库的约束或绑定;您可以使用任何名称来描述您的内部非公开API。

例如,ArrayList abandons this convention并使用Internal标记代替内部方法。

private void ensureCapacityInternal(int minCapacity) {
    ensureExplicitCapacity(calculateCapacity(elementData, minCapacity));
}