簡體   English   中英

Java-看不到包內的類

[英]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是最新的。

難道我做錯了什么?

感謝您的幫助。

由於編譯錯誤,您的構造函數無法訪問,這主要是因為您在變量中添加了修飾符: finalstatic關鍵字,

這樣做時,您需要指定一個默認值,否則會出現編譯錯誤。

在構造函數中,您要為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個問題,

  1. 初始化最終變量時,您沒有提供任何值。
  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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM