请检查在com.bruceeckel.util.*这个包的根路径上是不是存在着Array2.java即com.bruceeckel.util.Array2的源文件,如果存在就会出现这个错误
但是如果把原文件删掉或移走,则上面两种导入都是正确的原因可能是系统类装载器在搜索类路径时,如果遇到了源文件就会临时编译它(并在推出JVM时删除它),但只会使用默认的命令行参数,但对于使用了packege命令的类,应该使用-d <root>参数,因此类装载器会载入两个类Array2和com.bruceeckel.util.Array(也许还到不了装载后一个类就报错了),所以出现了那个错误,找不到正确的类
但是如果把原文件删掉或移走,则上面两种导入都是正确的原因可能是系统类装载器在搜索类路径时,如果遇到了源文件就会临时编译它(并在推出JVM时删除它),但只会使用默认的命令行参数,但对于使用了packege命令的类,应该使用-d <root>参数,因此类装载器会载入两个类Array2和com.bruceeckel.util.Array(也许还到不了装载后一个类就报错了),所以出现了那个错误,找不到正确的类
Arrays2.print("it's a",sString);
改成
com.bruceeckel.util.Arrays2.print("it's a",sString);
可以,
还会是什么问题呢?
我刚才把那个Arrays2移除了,是可以了。
我用的是jcreator,所有的.java文件都放在一个目录里面,它执行的时候把那个目录当作当前目录了,然后系统类装载器在搜索类路径就装载了这个目录中的Array2.java,是不是这样的?
不过还有些不明白的就是
系统类装载器遇到了源文件就会临时编译后,这两个类是不是都会编译?
“一个是临时编译生成的,但在JVM退出时自动删除”什么意思?
菜鸟,还望指教。
虽然有2个类,但
两个类不管装载哪个类应该都可以用Array2.java,
为什么不行呢?