package MyPack;
class Balance
{
String name;
protected double bal;
Balance(String n, double b)
{
name=n;
bal=b;
}
void show()
{
if(bal<0)
System.out.print("--> ");
System.out.println(name+": $" +bal);
}
}
类:AccountBalance
package MyPack;
class AccountBalance
{
public static void main(String[] args)
{
Balance current[]=new Balance[3];
current[0]=new Balance("K. J. Fielding", 123.23);
current[1]=new Balance("will Tell", 157.02);
current[2]=new Balance("Tom Jackson", -12.33);
for(int i=0; i<3; i++) current[i].show();
}
}
我已将这两个类放在Balance.java和AccountBalance.java中。这两个文件都在E:/ programs / MyPack中。 Balance.java编译没有错误但是当我编译AccountBalance.java时它给出了错误:找不到符号“Balance”。
我无法弄清楚为什么两个类都在同一个包中声明?
我正在使用MyPack进行编译 javac Balance.java javac AccountBalance.java
答案 0 :(得分:2)
假设您从javac
以外的某个文件夹发出E:/programs
命令,则需要指定一个-cp
选项,其中包含包含Balance
的位置类。
这是因为如果未指定选项,javac
将使用当前目录
如果未指定
CLASSPATH
,-cp
或-classpath
,则为用户类 path由当前目录组成。
所以如果你这样做了,例如,
E:/> javac programs/MyPack/AccountBalance.java
然后Balance
类不在类路径中,编译器会给你看错。
在这种情况下,您需要为类路径指定显式位置。例如
E:/> javac -cp programs programs/MyPack/AccountBalance.java
由于Balance
位于MyPack
的根/E/programs
,因此编译器会找到它并可以使用它。
使用IDE。
答案 1 :(得分:0)
假设您使用javac
,原因是您逐个编译它们(首先Balance
然后AccountBalance
)并且您不在MyPack
的父文件夹中。如果您确实这样做,请使用-cp
的{{1}}选项指出已编译的javac
的位置。例如:
Balance.class
或者将两者兼容,例如:
..\so\src\MyPack>javac Balance.java
..\so\src\MyPack>javac -cp ../. AccountBalance.java