新手村的翻车记录
今年下午偶然间想起当初刚学java时用过javac指令编译本地的源码,再用java指令运行编译好的class文件,于是又在本地试了一下,没成想翻了车,后多方查阅尝试才找到问题根源所在。
首先我是随便进了一个idea项目中的包目录下,以该目录为基础,调出来cmd指令控制台,如下图所示:
然后我javac编译了YanJing.java文件,再调用java指令对其进行执行
就报错了,看网上有人说是环境变量classpath的原因,改成.;后用java YanJing还是不行,后来才知道,在用java指令运行class文件时,class文件名不只是类名,还要带上类的包路径,组起来就是
类的全路径名。联想到因为在虚拟机中是用类的全路径跟类加载器来唯一标识一个类的,class文件是与类的全路径名绑定而非类名(个人猜测可能是在编译成class文件时就将全路径名给设置好了,
当再次虚拟机去读取class文件时就用指令中的全路径名匹配class文件的全路径名,但是查阅了一下JVM编译的地方,未找到这种说明,所以只能先个人猜测一下)。故此处用java com.paradise.testDataSource.YanJing,但还是一样的报错。因为漏了一点 --- 包的路径。当在当前目录下的cmd中执行java命令运行class文件时,系统会首先通过环境变量的
CLASSPATH来进行目录的重定向(如果CLASSPATH值设置为.;则是默认为当前路径),然后以当前路径为基础拼接上包路径,找最后全路径名为名称的class文件。所以此处要将
class文件放入当前目录下的com/paradise/testDataSource目录下
确认一下classpath设置为当前路径(classpath改变后,需要将cmd关闭重新打开),再执行一下java指令
到此问题解决,Done。
看来今年有必要将JVM编译一章好好研读一番了...