从命令行执行包的 java 程序时出错

Getting error while executing java programs of packages from command line

我正在从命令行执行程序并在其中使用程序包。 我的程序文件名是 TestA.java 和 TestB.java.

我最初执行了以下 javac TestA.java

以上没有问题,它也生成了 class 文件 对于以下我正在观察这个问题 javac TestB.java

输出:

TestB.java:2: error: '.' expected
import TestA;
            ^
TestB.java:2: error: ';' expected
import TestA;
             ^
2 errors

并且 TestA.java 文件是

package a.b;
class TestA {

    public static void methodPublic(){
        methodPrivate();
    }

    protected static void methodProtected(){
        methodPrivate();
    }

    static void methodDefault(){
        methodPrivate();
    }

    private static void methodPrivate(){}
}

TestB.java 内容是:

package a.b;

import TestA;

public class TestB {

    public static void main(String args[]) {
        TestA.methodPublic();
        TestA.methodProtected();
        TestA.methodDefault();

    }

    public static void methodPublic() {
    }

    protected static void methodProtected() {
    }

    static void methodDefault() {

    }

    private static void methodPrivate() {
    }
}

我正在通过导航到这两个文件所在的 b 文件夹来执行 javac。

I'm executing the javac by navigating to b folder where these two files exist.

你不想那样做;每个 class 包含 包的完全限定 class 名称。它们形成一棵树。很像你的文件系统。从 b 文件夹向上移动两个目录(到包含 a 的文件夹 - 例如 Windows 上的 cd ../..cd ..\..。那么

javac -cp . a/b/TestA.java a/b/TestB.java

此外,您通常希望将其写入 "binary" 输出文件夹。所以

javac -cp . -d bin a/b/TestA.java a/b/TestB.java

最后,您不需要 import TestA,因为它与 TestB 在同一个包中。但是,如果您想要,您需要

import a.b.TestA;