A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 章小东 初级黑马   /  2012-8-5 22:13  /  1440 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

今天学了类加载器,听的不是很明白,谁来帮我解答下ClassLoader是如何加载Class的。谢谢

3 个回复

倒序浏览
jvm里有多个类加载,每个类加载可以负责加载特定位置的类,例如,bootstrap类加载负责加载jre/lib/rt.jar中的类, 我们平时用的jdk中的类都位于rt.jar中。extclassloader负责加载jar/lib/ext/*.jar中的类,appclassloader负责classpath指定的目录或jar中的类。除了bootstrap之外,其他的类加载器本身也都是java类,它们的父类是ClassLoader
回复 使用道具 举报
jvm里有多个类加载,每个类加载可以负责加载特定位置的类,
例如,bootstrap类加载负责加载jre/lib/rt.jar中的类, 我们平时用的jdk中的类都位于rt.jar中。
extclassloader负责加载jar/lib/ext/*.jar中的类,
appclassloader负责classpath指定的目录或jar中的类。
除了bootstrap之外,其他的类加载器本身也都是java类,它们的父类是ClassLoader。

下面是演示的代码,运行出结果,很直观的就能观察到他们的关系

public class ClassLoaderBiji {
        public static void main(String[] args) {
                System.out.println(ClassLoaderBiji.class.getClassLoader()
                                .getClass().getName());
                System.out.println(System.class.getClassLoader());
               
                /**通过打印,了解3个加载器的继承关系
                 * 先拿到一个类加载器,然后打印出它的名字,
                 * 然后再拿到父类的加载器,继续打印出名字。
                 * */
                ClassLoader loader = ClassLoaderBiji.class.getClassLoader();
                while(loader != null) {
                        System.out.println(loader.getClass().getName());
                        loader = loader.getParent();
                }
                System.out.println(loader);
        }
}

希望可以帮到你
回复 使用道具 举报
刚才网速卡。不小心发了两次。现在问题已经解决了。不好意思
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马