Java-Can';在包中看不到类
我试图创建一个包含一些类的包,但似乎我有一些可见性问题 这是我的第一节课:Java-Can';在包中看不到类,java,packages,Java,Packages,我试图创建一个包含一些类的包,但似乎我有一些可见性问题 这是我的第一节课: package trees; public class Tree{ private static final int HEIGHT; private static final String NAME; public Tree(){ HEIGHT = 5; NAME = "Basic Tree"; } public Tree(int a, String n){ HEIGHT = a;
package trees;
public class Tree{
private static final int HEIGHT;
private static final String NAME;
public Tree(){
HEIGHT = 5;
NAME = "Basic Tree";
}
public Tree(int a, String n){
HEIGHT = a;
NAME = n;
}
public static int getHeight(){
return HEIGHT;
}
public static String getName(){
return NAME;
}
}
这是我的第二节课:
package trees;
public class Evergreen{
public static void main(String[] args){
Tree first_tree = new Tree(20, "Fir");
System.out.println(first_tree.getName());
System.out.println(first_tree.getHeight());
}
}
但当我编译时,终端会给我以下错误:
Evergreen.java:6: error: cannot find symbol
Tree first_tree = new Tree(20, "Fir");
^
symbol: class Tree
location: class Evergreen
Evergreen.java:6: error: cannot find symbol
Tree first_tree = new Tree(20, "Fir");
^
symbol: class Tree
location: class Evergreen
这两个类位于名为“trees”的文件夹中。
我试图在Evergreen类中插入一个“implementtrees.*”,但没有任何变化。
我用的是MacMaverick,用终端编译,Java是最新的
我做错什么了吗
谢谢你的帮助。试试看
package trees;
public class Tree {
private final int HEIGHT;
private final String NAME;
public Tree() {
HEIGHT = 5;
NAME = "Basic Tree";
}
public Tree(int a, String n) {
HEIGHT = a;
NAME = n;
}
public int getHeight() {
return HEIGHT;
}
public String getName() {
return NAME;
}
}
由于编译错误,您的构造函数无法访问,主要是因为您定义了变量并添加了修饰符:
final
加上static
关键字
当您这样做时,您需要指定一个默认值,否则您将得到一个编译错误
在构造函数中,您为final
变量赋值,这是在构造函数之前声明变量时不允许的,每个定义为final的变量都应该有该值,这是您为代码定义常量的方式
我建议您检查最终修改器和静态修改器的概念:
如果您试图创建一个简单的类来创建它的实例并使用它们的属性,您应该删除静态和最终修饰符,如:
public class Tree {
private int height;
private String name;
public Tree() {
height = 5;
name = "Basic Tree";
}
public Tree(int a, String n) {
height = a;
name = n;
}
public int getHeight() {
return height;
}
public String getName() {
return name;
}
}
此外,尝试遵循定义变量的代码约定,如果变量是常量,请确保可以用大写字母编写,如果不能,则应使用小写字母编写:lowerCamelCase;例如:双基工资。
然后,您可以为类定义常量,比如:
private static final int MAX_TREE_HEIGHT=100代码>这不是可见性问题。基本上,你有变量HEIGHT和NAME,它们是最终的变量。根据提到的Java最终变量合同
始终允许您初始化最终变量。编译程序
确保你只能做一次
代码中有两个问题
初始化最终变量时不提供任何值
您正试图在稍后的时间点将一些值赋给最终变量
这两项都违反了上述合同
您可以尝试通过从变量修饰符中删除final来修改代码
package trees;
public class Tree {
private static int HEIGHT;
private static String NAME;
public Tree() {
HEIGHT = 5;
NAME = "Basic Tree";
}
public Tree(int a, String n) {
HEIGHT = a;
NAME = n;
}
public static int getHeight() {
return HEIGHT;
}
public static String getName() {
return NAME;
}
}
除了高度
和名称
是非静态的之外,在主方法中,树
应该替换为第一棵树
。请注意,这不符合camelCase惯例。很好的一点,没有看到它,谢谢!如果要删除静态
,为什么要删除最终
?允许在构造函数中初始化final
字段。是的,允许您这样做,我不是说禁止您这样做,我没有正确解释。谢谢PD:我删除了“final”,因为我遵循了我附加的关于如何使用“final”的链接中的指示。仅此而已,如果你认为有必要的话,你就可以使用期末考试,但要记住,如果你想在以后的课程中加入Stestter,你就做不到。就这些,谢谢你的回答!但是,即使现在类树是正确的,并且编译时没有错误,终端仍然会给我这两个错误,因为它在编译Evergreen时看不到这两个错误。尝试重新清理和构建项目并重新编译类。我尝试在Eclipse中用包重新创建类,所有工作都很好,显然,除了一些语法错误外,问题在于终端的java编译器。我希望有一天我能把它修好。不过,非常感谢大家的支持!谢谢你的回答!然而,即使现在类树是正确的,并且编译时没有错误,终端仍然会给我这两个错误,因为它在编译Evergreen时看不到。Evergreen中的错误可能在那里,因为,1。您已经用标识符(名称)初始化了第一棵树上的对象,并且正在尝试访问具有树标识符的对象。因此,System.out.println(tree.getName());将是System.out.println(first_tree.getName());二,。可能是因为您试图使用对象引用访问静态方法。静态方法在类的上下文中工作,而不是在对象的上下文中工作。因此,System.out.println(first_tree.getName());将再次是System.out.println(Tree.getName());。我试图用Eclipse中的包重新创建这些类,所有的工作都很好,所以很明显,除了一些语法错误之外,问题出在终端的java编译器上。我希望有一天我能把它修好。不过,非常感谢大家的支持!
package trees;
public class Tree {
private static int HEIGHT;
private static String NAME;
public Tree() {
HEIGHT = 5;
NAME = "Basic Tree";
}
public Tree(int a, String n) {
HEIGHT = a;
NAME = n;
}
public static int getHeight() {
return HEIGHT;
}
public static String getName() {
return NAME;
}
}