两个java源文件同属一个包,其中一个类引用了另一个,在用javac编译时,报错找不到引用的类,import无作用

请问,应该怎样解决?
下面是ComplexNumber.java和PassParemter.java的部分代码,ComplexNumber.java已经编译过了。
package book.oo;
import book.oo.ComplexNumber;
public class PassParamter {
public PassParamter() {
}
public void methodA(ComplexNumber comNum) {
// comNum这个引用指向了一个新new出来的对象。
comNum = new ComplexNumber(1, 2);
}
......
}

package book.oo;
public class ComplexNumber implements Cloneable{
/** 复数的实部 */
private double realPart;
/** 复数的虚部 */
private double imaginaryPart;
/** 默认构造函数 */
public ComplexNumber() {
this.realPart = 0.0;
this.imaginaryPart = 0.0;
}
/**
* 构造函数
* @param a 实部
* @param b 虚部
*/
public ComplexNumber(double a, double b) {
this.realPart = a;
this.imaginaryPart = b;
}
......
}
之前编译和执行ComplexNumber.java时,加了包语句后,我在使用javac和java时要转到不同目录去,编译时要到源文件所在目录,执行时要退回到包含包的目录去,我弄不明白为什么这样?

第1个回答  推荐于2018-03-28
确保import的类在classpath中,或者在本次编译.java文件范围内追问

在本次编译的java范围内

追答

最好把目录和文件结构还有你执行的编译命令描述一下

追问

C:\Documents and Settings\Administrator\My Documents\java\book\oo
存放了两个java源文件:ComplexNumber.java和PassParamter.java
1. 首先,我通过cd命令转到当前目录下,即C:\Documents and Settings\Administrator\My Documents\java\book\oo
2. 输入javac ComplexNumber.java成功编译,编译后的ComplexNumber.class在当前目录下。
3. 输入javac PassParamter.java出现编译时错误,提示找不到符号ComplexNumber

追答

javac -cp . PassParamter.java
也可以直接javac *.java

追问

javac -cp . PassParamter.java不行
javac *.java可以
还想问一问,我对这里面的原理不太明白。
我自己建了目录book/oo,把两个源文件放到里面去的,这是不是不合理?

追答

如果用命令,建议不要自己根据package结构建文件夹
编译时用javac -d . *.java 自动生成package目录

追问

很感谢!

本回答被提问者和网友采纳
第2个回答  2011-08-17
import引用的是打包好的类 不是源文件 一个源文件引用另一个 另一个是public 最好让我看看 引用语句和另一个包的声明语句
第3个回答  2011-08-17
代码贴出来看看
相似回答