怎么判断java当前线程是否加载了一个类的字节码

如题所述

原生的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.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尚未加载!");
}

}

}

温馨提示:答案为网友推荐,仅供参考

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网