Java中的三种类型class

Bootstrap classes

这些是核心class,即Java平台最基础的class. 它放在 rt.jar(runtime),以及其他一些非常重要的jar包里.

它是通过参数sun.boot.class.path来决定的.也有一个非标准的JVM参数来决定这些class:-Xbootclasspath.例子:

java -Dsun.boot.class.path=/path/to/xx1.jar:/path/to/xx2.jar(注意,不同的操作系统,分隔符不同,*unix下是:,Windows下的是;)

使用-Xbootclasspath方式有以下三种:

替换

java -Xbootclasspath:/path/to/xx1.jar:/path/to/xx2.jar

追加

即在原java的bootstrap cless的基础上,追加以下这些jar包的class

java -Xbootclasspath/a:/path/to/xx1.jar:/path/to/xx2.jar

前置

即在原java的bootstrap class的基础上,前置(即优先)查找以下jar包的class

java -Xbootclasspath/p:/path/to/xx1.jar:/path/to/xx2.jar

参考资料

Extension classes

这些是扩展class,由用于Java扩展机制使用.这些是由一些在扩展目录的jar文件组成的.它们放在jre/lib/ext目录, 该目录下的所有jar文件是使用Java Extension Framework加载的.

可以使用-Djava.ext.dirs参数来修改这些目录的值.例如:

java -Djava.ext.dirs=/path/to/your/dirs1:/path/to/your/dirs2(*unix是:分隔符,Windows是;分隔符)

参考资料

User classes

这些值存放在java.class.path系统属性里.

这个是由开发者以及那些没有使用扩展机制的第三方定义的class. 它是通过-classpath 或者 -cp 的命令行选项或者CLASSPATH环境变量来定位class的. 它的值有以下几种情况:

.:意味着这些class在当前目录或者子目录(如果有package)吧. CLASSPATH: 如果有这个环境变量,它就会覆盖默认的值. -cp或者-classpath: 它会覆盖默认的值,以及CLASSPATH环境变量的值. 通过-jar来启动的: 所有的class,都必须包含在jar文件里.(即它会忽略CLASSPATH以及-cp-classpath的值).

在OSGi中使用注意

可以参考这篇Apache-Felix-OSGi-使用非bundle-jar包共享到其他所有bundle