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中的所有类。
按需加载则是在应用程序运行之后,在
相关文档:
为了做到使得程序具有更高的灵活性,可配置性,在开发中我们经常利用反射来创建一个类的实例,也就是获得一个类的一个对象!通常的做法是通过class.newInstance获得;但这种方法有一个不好的地方,那就是他只能创建无参构造器的对象,如果构造器有参数那它是无能为力的;解决的方法就是 先通过该类的Class获得带有参 ......
jar -cvf name.jar *.*(打包此目录下所有文件)
jar -cvf name.jar filename(打包此目录下单个文件helloWorld.java或文件夹)
jar -cvf name.jar filename1 filename2....(打包此目录下多个文件或文件夹)
参考: jar ......
前言
在Java语言中,equals()和hashCode()两个函数的使用是紧密配合的,你要是自己设计其中一个,就要设计另外一个。在多数情况 下,这两个函数是不用考虑的,直接使用它们的默认设计就可以了。但是在一些情况下,这两个函数最好是自己设计,才能确保整个程序的正常运行。最常见的是当 一个对象被加入集合对象(collectio ......