在class.forName(String)中:
@CallerSensitive
public static Class<?> forName(String className)
throws ClassNotFoundException {
return forName0(className, true,
ClassLoader.getClassLoader(Reflection.getCallerClass()));
}
Reflection.getCallerClass()返回调用此方法的方法调用者的类,忽略关联的框架及其实现。
JVM将跟踪这个注释,该方法只能在使用该注释标记方法时才报告方法的调用方。
只有特权代码才能使用这个注释。如果代码通过引导类装入器或扩展类装入器装入,则具有特权。否则会抛出:
java.lang.InternalError: CallerSensitive annotation expected at frame 1