一、类路径 (class path) 当你满怀着希望安装好java,然后兴冲冲地写了个“hello world”,然后编译, 运行,就等着那两个美好的单词出现在眼前
可是不幸的是,只看到了“Can't find class HelloWorld”或者“Exception in thread " main" java
NoSuchMethodError: main
编译好的class 明明在呀
我们一起来看一看java 程序的运行过程
我们已经知道java 是通过java 虚拟机来解释运行的,也就是通过java 命令—javac 编译生成的
class 文件就是虚拟机要执行的代码, 称之为字节码(bytecode), 虚拟机通过classloader 来装载这些字节码,也就是通常意义上的类
这里就有一个问题,classloader 从哪里知道java 本身的类库及用户自己的类在什么地方呢
或者有着缺省值(当前路径) ,或者要有一个用户指定的变量来表明,这个变量就是类路径(classpath),或者在运行的时候传参数给虚拟机
这也就是指明classpath 的三个方法
编译的过程和运行的过程大同小异,只是一个是找出来编译,另一个是找出来装载
实际上java 虚拟机是由java luncher 初始化的,也就是java (或 java
exe) 这个程序来做的
虚拟机按以下顺序搜索并装载所有需要的类: 1、引导类:组成java 平台的类,包含rt
jar 和 i18n
jar 中的类
2、扩展类:使用java 扩展机制的类,都是位于扩展目录($JAVA_HOME/jre/lib/ext) 中的
jar 档案包
3、用户类:开发者定义的类或者没有使用java 扩展机制的第三方产品
你必须在命令行中使用-classpath 选项或者使用CLASS