为什么同一个包中的一个 class 不能访问另一个?
why one class of same package can't access another?
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);
}
}
class:账户余额
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();
}
}
我已将这两个 classes 放入 Balance.java 和 AccountBalance.java 中。这两个文件都在 E:/programs/MyPack 中。 Balance.java 编译没有错误但是当我编译 AccountBalance.java 时出现错误:找不到符号 "Balance".
我不明白为什么两个 class 都声明在同一个包中?
我正在使用 MyPack 进行编译
javac Balance.java
javac 帐户Balance.java
假设你使用javac
,原因是你一个一个地编译它们(首先Balance
然后AccountBalance
)并且你不在[=15=的父文件夹中].如果你真的这样做,那么请使用javac
的-cp
选项来指向已经编译的Balance.class
。例如:
..\so\src\MyPack>javac Balance.java
..\so\src\MyPack>javac -cp ../. AccountBalance.java
或者将它们都强制执行,例如:
..\so\src\MyPack>javac *.java
假设您从 E:/programs
以外的某个文件夹发出 javac
命令,您需要指定一个 -cp
选项,包括包含您的 [=15] 的位置=] class.
这是因为 javac
如果未指定该选项,则使用当前目录
If neither CLASSPATH
, -cp
nor -classpath
is specified, the user class
path consists of the current directory.
所以如果你这样做了,例如,
E:/> javac programs/MyPack/AccountBalance.java
那么 Balance
class 将不会在 class 路径中,编译器会给你你看到的错误。
在这种情况下,您需要为 class路径指定一个明确的位置。例如
E:/> javac -cp programs programs/MyPack/AccountBalance.java
由于 Balance
位于 /E/programs
根目录下的包 MyPack
中,编译器可以找到并使用它。
使用 IDE.
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);
}
}
class:账户余额
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();
}
}
我已将这两个 classes 放入 Balance.java 和 AccountBalance.java 中。这两个文件都在 E:/programs/MyPack 中。 Balance.java 编译没有错误但是当我编译 AccountBalance.java 时出现错误:找不到符号 "Balance".
我不明白为什么两个 class 都声明在同一个包中?
我正在使用 MyPack 进行编译 javac Balance.java javac 帐户Balance.java
假设你使用javac
,原因是你一个一个地编译它们(首先Balance
然后AccountBalance
)并且你不在[=15=的父文件夹中].如果你真的这样做,那么请使用javac
的-cp
选项来指向已经编译的Balance.class
。例如:
..\so\src\MyPack>javac Balance.java
..\so\src\MyPack>javac -cp ../. AccountBalance.java
或者将它们都强制执行,例如:
..\so\src\MyPack>javac *.java
假设您从 E:/programs
以外的某个文件夹发出 javac
命令,您需要指定一个 -cp
选项,包括包含您的 [=15] 的位置=] class.
这是因为 javac
如果未指定该选项,则使用当前目录
If neither
CLASSPATH
,-cp
nor-classpath
is specified, the user class path consists of the current directory.
所以如果你这样做了,例如,
E:/> javac programs/MyPack/AccountBalance.java
那么 Balance
class 将不会在 class 路径中,编译器会给你你看到的错误。
在这种情况下,您需要为 class路径指定一个明确的位置。例如
E:/> javac -cp programs programs/MyPack/AccountBalance.java
由于 Balance
位于 /E/programs
根目录下的包 MyPack
中,编译器可以找到并使用它。
使用 IDE.