如题所述
原生的ClassLoader是有一个方法判断类是否已经加载的
/*** Returns the class with the given <a href="#name">binary name</a> if this
* loader has been recorded by the Java virtual machine as an initiating
* loader of a class with that <a href="#name">binary name</a>. Otherwise
* <tt>null</tt> is returned. </p>
*
* @param name
* The <a href="#name">binary name</a> of the class
*
* @return The <tt>Class</tt> object, or <tt>null</tt> if the class has
* not been loaded
*
* @since 1.1
*/
protected final Class<?> findLoadedClass(String name) {
if (!checkName(name))
return null;
return findLoadedClass0(name);
}
不过方法是protected的 所以需要通过反射来使用 以下代码仅供参考
import java.lang.reflect.Method;
public class Time {
public static void main(String[] args) throws NoSuchMethodException, SecurityException, IllegalAccessException,
IllegalArgumentException, InvocationTargetException, ClassNotFoundException {
Class cl = Class.forName("java.lang.ClassLoader", false, Thread.currentThread().getContextClassLoader());
Method method = cl.getDeclaredMethod("findLoadedClass", new Class[] { String.class });
method.setAccessible(true);
if (method.invoke(Thread.currentThread().getContextClassLoader(), "java.lang.System") != null) {
System.out.println("java.lang.System已经加载!");
} else {
System.out.println("java.lang.System尚未加载!");
}
if (method.invoke(Thread.currentThread().getContextClassLoader(), "java.sql.Date") != null) {
System.out.println("java.lang.System已经加载!");
} else {
System.out.println("java.sql.Date尚未加载!");
}
}
}
温馨提示:答案为网友推荐,仅供参考