![](/img/trans.png)
[英]Maven java project in eclipse doesn't see classes in same package
[英]Java - Can't see classes inside a package
我試圖創建一個包含一些類的程序包,但似乎有一些可見性問題。
這是我的第一堂課:
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”的文件夾中。 我試圖在“常綠”類中插入“實施樹。*”,但沒有任何變化。 我使用的是Mac Maverick,可通過終端進行編譯,而Java是最新的。
難道我做錯了什么?
感謝您的幫助。
由於編譯錯誤,您的構造函數無法訪問,這主要是因為您在變量中添加了修飾符: final
加static
關鍵字,
這樣做時,您需要指定一個默認值,否則會出現編譯錯誤。
在構造函數中,您要為final
變量分配一個值,這是您在構造函數之前聲明變量的方式所不允許的,每個定義為final的變量都應具有該值,這就是您為代碼定義常量的方式。
我建議您檢查一下final和static修飾符的兩個概念:
如果您試圖創建一個簡單的類來創建其實例並使用其屬性,則應刪除靜態和最終修飾符,例如:
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; 例如: double baseSalary.
然后,您可以為類定義常量,例如: private static final int MAX_TREE_HEIGHT = 100;
這不是可見性問題。 基本上發生的事情是您有變量HEIGHT和NAME這是最終變量。 根據此處提到的Java最終變量合同,
始終允許您初始化最終變量。 編譯器確保您只能執行一次。
您的代碼中有2個問題,
這兩個都違反了上述合同。
您可以嘗試通過從變量修飾符中刪除最終代碼來修改代碼。
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;
}
}
嘗試
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;
}
}
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());
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.