Java类/包交互
我有两个.java文件,我试图在OSX终端中用Java类/包交互,java,Java,我有两个.java文件,我试图在OSX终端中用javac编译它们 DieRun.java package die; public class DieRun { public static void main(String[] args) { Die d6 = new Die(6); } } 和Die.java: package die; import java.util.Random; public class Die { private i
javac
编译它们
DieRun.java
package die;
public class DieRun {
public static void main(String[] args) {
Die d6 = new Die(6);
}
}
和Die.java:
package die;
import java.util.Random;
public class Die {
private int sides;
private int value;
private Random rng;
public Die(int sides) {
this.sides = sides;
this.rng = new Random();
this.value = this.roll();
}
public Die(int sides, int seed) {
this.sides = sides;
this.rng = new Random(seed);
this.value = this.roll();
}
public int roll() {
this.value = this.rng.nextInt(this.sides) + 1;
return this.value;
}
public int getValue() {
return this.value;
}
}
使用
javac*.java
它们都编译时没有任何错误,但当我尝试运行其中一个(例如javadierun
)时失败,出现错误:无法找到或加载主类DieRun。您的类位于名为“die”的包中。要运行它们,您有几个选项
快速选项是删除包
声明,以便它们位于默认包中。一般来说,这不是最好的做法,但对于快速一次性应用来说完全有效
正确的选择是:
javadie.DieRun
您也可以阅读。您的类位于名为“die”的包中。要运行它们,您有几个选项 快速选项是删除
包
声明,以便它们位于默认包中。一般来说,这不是最好的做法,但对于快速一次性应用来说完全有效
正确的选择是:
javadie.DieRun
您可能也希望阅读。已经有了名为die的目录,所以我导航到了一个目录,并运行了
javadie.RunDie
,这很有效。Java是我的第一种“可编译”语言,所以整个包和运行概念对我来说非常奇怪。所以谢谢你。@robjtede很高兴你让它工作起来了。请注意,这种类型的打包不是编译语言的一般特性,而是Java的一个有趣特性。例如,C++不需要目录结构来匹配命名空间层次结构。Java的类和包布局与文件名和目录结构密切相关。已经有一个名为die的目录,所以我导航到一个目录并运行了Javadie.RunDie
,这很有效。Java是我的第一种“可编译”语言,所以整个包和运行概念对我来说非常奇怪。所以谢谢你。@robjtede很高兴你让它工作起来了。请注意,这种类型的打包不是编译语言的一般特性,而是Java的一个有趣特性。例如,C++不需要目录结构来匹配命名空间层次结构。Java的类和包布局与文件名和目录结构密切相关。