展开全部
原生的ClassLoader是有e68a843231313335323631343130323136353331333337616631一个方法判断类是否已经加载的/**
* Returns the class with the given binary name if this
* loader has been recorded by the Java virtual machine as an initiating
* loader of a class with that binary name. Otherwise
* null is returned.
*
* @param name
* The binary name of the class
*
* @return The Class object, or null 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.InvocationTargetException;
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尚未加载!");
}
}
}