易截截图软件、单文件、免安装、纯绿色、仅160KB

Java 动态加载类


第一部分:Java虚拟机启动时,关于类加载方面的一些动作
当使用java ProgramName.class运行程序时,Java找到JRE,接着找到jvm.dll,把该动态库载入内存,这就是JVM。然后加载其它动态库, 并激活JVM。JVM激活之后会进行一些初始化工作,之后生成BootstrapLoader,该Class Loader是由C++写的。BootstrapLoader加载Launcher.java中的ExtClassLoader,并设定其Parent为 null,意思是ExtClassLoader的Parent Class Loader就是BootstrapLoader。然后BootstrapLoader又加载Launcher.java中的 AppClassLoade,并设定其Parent Class Loader是ExtClassLoader。不过如果调用ExtClassLoader的getParent( )方法,则返回的是null。这两个Class Loader都是以静态类的形式存在,并且都是用Java编写的。
这三个Class Loader它们都有自己的类查找路径:
BootstrapLoader: sun.boot.class.path
ExtClassLoader: java.ext.dirs
AppClassLoader: java.class.path
以上三个路径都是Java的系统属性,可以通过System.getProperty(String key)方法来查看其设置:
System.out.println(System.getProperty("sun.boot.class.path"));
输出:
C:\Program Files\Java\jre1.5.0_04\lib\rt.jar;
C:\Program Files\Java\jre1.5.0_04\lib\i18n.jar;
C:\Program Files\Java\jre1.5.0_04\lib\sunrsasign.jar;
C:\Program Files\Java\jre1.5.0_04\lib\jsse.jar;
C:\Program Files\Java\jre1.5.0_04\lib\jce.jar;
C:\Program Files\Java\jre1.5.0_04\lib\charsets.jar;
C:\Program Files\Java\jre1.5.0_04\classes
即BootstrapLoader 加载的是jre和jre\lib目录下的class
System.out.println(System.getProperty("java.class.path"));
输出:
C:\Program Files\Java\jre1.5.0_04\lib\ext
即ExtClassLoader加载的是jre\lib\ext下的class
System.out.println(System.getProperty("java.class.path"));
输出:应用里的路径
由此可见,BootstrapLoader负责Java核心类(所有以java.*开头的类)。ExtClassLoader负责加载扩展类(所以以javax.*开头的类以及存在ext目录下的类)。AppClassLoader负责加载应用程序自身的类。
第二部分:Java的类加载机制。Java是如何加载类的,其流程。
类加载按照加载时机,是否自动加载分为两种:预先加载和按需加载。
预先加载的类是在JVM启动之后,应用程序运行之前。至少包含rt.jar中的所有类。
按需加载则是在应用程序运行之后,在


相关文档:

java反射之创建实例

  为了做到使得程序具有更高的灵活性,可配置性,在开发中我们经常利用反射来创建一个类的实例,也就是获得一个类的一个对象!通常的做法是通过class.newInstance获得;但这种方法有一个不好的地方,那就是他只能创建无参构造器的对象,如果构造器有参数那它是无能为力的;解决的方法就是 先通过该类的Class获得带有参 ......

java jar包打包命令

jar -cvf  name.jar *.*(打包此目录下所有文件)
jar -cvf  name.jar  filename(打包此目录下单个文件helloWorld.java或文件夹)
jar -cvf name.jar filename1  filename2....(打包此目录下多个文件或文件夹)
参考: jar ......

解析Java对象的equals()和hashCode()的使用

前言
在Java语言中,equals()和hashCode()两个函数的使用是紧密配合的,你要是自己设计其中一个,就要设计另外一个。在多数情况 下,这两个函数是不用考虑的,直接使用它们的默认设计就可以了。但是在一些情况下,这两个函数最好是自己设计,才能确保整个程序的正常运行。最常见的是当 一个对象被加入集合对象(collectio ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号