黑马程序员技术交流社区

标题: 关于类加载的相关问题 [打印本页]

作者: 刘士林    时间: 2012-10-21 11:54
标题: 关于类加载的相关问题
自定义类时,如果用到了api中的java类时需要用import倒包,原因是类名的全名是包名加类名,这样可以简化书写
如用到io流时,不倒包的话,编译都通不过。但有时不用倒包也可以,如用到System类,Integer等类时,一样可以编译运行,这是为什么呢?
运行自定义类时,用到的api中的类是从哪里找到并加载的,由谁加载的,加载顺序又是什么?不好意思,一下子
问了这么多问题,因为实在想不明白,请哪位同学指点一下!
作者: 杨政    时间: 2012-10-21 12:07
在rt.jar中吧。system等基本类是在lang包里,lang包是自动加载的,所以不用再import。但用到其他包时,就要import导包了。
作者: 徐梦侠    时间: 2012-10-21 12:09
第一个问题:java默认导入了lang包,System类、Integer等类对象都是属于lang包的
第二个问题:Java虚拟机中系统默认三个主要类加载器,每个类负责加载特定位置的类:BootStrap,ExtClassLoader,AppClassLoader。其中BootStrap加载JRE/lib/rt.jar里面的,ExtClassLoader加载JRE/lib/ext/*中的,AppClassLoader加载CALSSPTH指定的所有jar或目录。对于自定义的类一般用的加载器时AppClassLoader。但是顺序是先由它委托给其父类ExtClassLoader,再委托给ExtClassLoader的父类BootStrap,如果这些父类加载的包里面没有自定义的类或者无法加载当前所要加载的类时,才会一级级退回子孙类加载器进行加载。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2