我们反射通常使用第一种方式,首先来看看class.forname(clssname):
注意:传入的classname必须是类的全路径,否则会报错java.lang.classnotfoundexception。
public static Class<?> forName(String className)
throws ClassNotFoundException {
return forName0(className, true, ClassLoader.getCallerClassLoader());
}通过调用forName0方法,使用ClassLoader.getCallerClassLoader()来加载ClassLoader
立即学习“Java免费学习笔记(深入)”;
// Returns the invoker's class loader, or null if none.
// NOTE: This must always be invoked when there is exactly one intervening
// frame from the core libraries on the stack between this method's
// invocation and the desired invoker.
static ClassLoader getCallerClassLoader() {
// NOTE use of more generic Reflection.getCallerClass()
Class caller = Reflection.getCallerClass(3);
// This can be null if the VM is requesting it
if (caller == null) {
return null;
}
// Circumvent security check since this is package-private
return caller.getClassLoader0();
}在获取ClassLoader调用claser.getClassLoader0() 这是一个私有包,可以避免安全检查。
// Package-private to allow ClassLoader access
native ClassLoader getClassLoader0();我们反射通常使用第一种方式,首先来看看class.forname(clssname):
注意:传入的classname必须是类的全路径,否则会报错java.lang.classnotfoundexception。
public static Class<?> forName(String className)
throws ClassNotFoundException {
return forName0(className, true, ClassLoader.getCallerClassLoader());
}通过调用forName0方法,使用ClassLoader.getCallerClassLoader()来加载ClassLoader
立即学习“Java免费学习笔记(深入)”;
// Returns the invoker's class loader, or null if none.
// NOTE: This must always be invoked when there is exactly one intervening
// frame from the core libraries on the stack between this method's
// invocation and the desired invoker.
static ClassLoader getCallerClassLoader() {
// NOTE use of more generic Reflection.getCallerClass()
Class caller = Reflection.getCallerClass(3);
// This can be null if the VM is requesting it
if (caller == null) {
return null;
}
// Circumvent security check since this is package-private
return caller.getClassLoader0();
}在获取ClassLoader调用claser.getClassLoader0() 这是一个私有包,可以避免安全检查。
// Package-private to allow ClassLoader access
native ClassLoader getClassLoader0(); 以上就是java之反射进阶的内容,更多相关内容请关注PHP中文网(www.php.cn)!
java怎么学习?java怎么入门?java在哪学?java怎么学才快?不用担心,这里为大家提供了java速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号