【问题标题】:Getting error while executing java programs of packages from command line从命令行执行包的java程序时出错
【发布时间】:2019-08-24 12:53:15
【问题描述】:

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

我最初在下面执行 javac TestA.java

上面没有问题,它也生成了类文件 对于以下我正在观察这个问题 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。

【问题讨论】:

    标签: java command-line classpath


    【解决方案1】:

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

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

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

    此外,您通常希望将其写入“二进制”输出文件夹。所以

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

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

    import a.b.TestA;
    

    【讨论】:

    • 编译成功了,执行如何?我收到以下错误:错误:无法找到或加载主类 TestB 我尝试从根文件夹以及 b 执行
    • java -cp . a.b.TestB - 如果您使用了-d bin,那么您希望位于bin 文件夹中。否则,与您运行 javac 的文件夹相同。 javajavac 的包不是可选的。
    猜你喜欢
    • 2015-07-16
    • 2013-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-01
    • 1970-01-01
    相关资源
    最近更新 更多