我想创建两个软件包:一个包含特定于问题的类和方法,另一个包含一些典型的数学工具。 我将它们表示为“ maxim.main_package”和“ maxim.algebra”。 由于某种原因,我无法将代数包导入到主包中。 请帮忙。
由于代数软件包不依赖主要软件包,因此我已通过命令行将.java文件成功编译为.class。 .java文件以“ package maxim.algebra;”开头。 现在,我要编译以“ package maxim.main;”开头的主要.java文件。其次是“导入代数。*”。 .java文件的路径分别是:
1) maxim\main\main.java
2) maxim\algebra\algebra.java
I run "javac maxim\main\main.java" command from maxim directory.
It fails saying:
`error: cannot access Algebra
Algebra.matrix3x3 R = Algebra.some_method(parameters)
bad class file: .\algebra\Algebra.class
class file contains wrong class: maxim.algebra.Algebra`
答案 0 :(得分:0)
软件包名称和目录结构需要匹配。案件很重要。然后,这些软件包也需要在classpath上可用。默认情况下,当前目录位于类路径中。但是可以使用环境变量CLASSPATH
更改类路径。如果定义了此变量并且.
(当前目录)不在其中,则当前目录将不在类路径中。也可以使用参数-classpath
或-cp
来简短地设置类路径。另请参见Setting the Class Path。
这是有关如何将类放入包中以及如何从不同包中导入类的简短指南:
您有两个软件包,maxim.main
和maxim.algebra
。我们从当前目录开始,在此目录中,我们创建两个以软件包名称maxim\main
和maxim\algebra
命名的目录。
> mkdir maxim\main maxim\algebra
> dir
2019-08-14 12:39 <DIR> .
2019-08-14 12:39 <DIR> ..
2019-08-14 12:39 <DIR> maxim
> dir maxim
2019-08-14 12:39 <DIR> .
2019-08-14 12:39 <DIR> ..
2019-08-14 12:41 <DIR> algebra
2019-08-14 12:46 <DIR> main
>
我们创建两个类,Main.java
,文件名为maxim\main\Main.java
,内容如下:
package maxim.main;
import maxim.algebra.Algebra;
public class Main {
public static void main(String... args) {
Algebra algebra = new Algebra();
System.out.println(algebra.sayHello() + " World");
}
}
和Algebra.java
,文件名maxim\algebra\Algebra.java
和以下内容:
package maxim.algebra;
public class Algebra {
public String sayHello() {
return "Hello";
}
}
在不更改活动目录的情况下,我们首先编译两个类,Algebra
:
> javac -cp . maxim\algebra\Algebra.java maxim\main\Main.java
>
我们指定-cp .
覆盖可能设置的任何CLASSPATH
环境变量。
编译后,目录结构如下:
.\
maxim\
main\
Main.class
Main.java
algebra\
Algebra.class
Algebra.java
现在我们可以运行Main
类:
> java -cp . maxim.main.Main
Hello World
>