2015-11-19 63 views
-2

我正在學習Java(OOP)中的構造函數,但無法弄清楚什麼類型的變量構造函數可以訪問?以下哪個變量可以通過構造函數訪問?哪些變量構造函數可以在Java類中訪問?

  1. 通過任何方法定義的局部變量
  2. 私有的實例變量
  3. 公共實例變量
  4. 一個靜態變量

我創建下面的例子來闡述我的問題:

public class constructorAccess { 
    public int marks; // 3. Public instance variable 
    private String firstName; // 2. Private instance variable 
    static final String LASTNAME = "Smith"; // 4. Static variable 

    public static void studentId(){ 
     int id; // 1. Local variable inside method 
     id = 5; 
     System.out.println(id); 
    } 

    public constructorAccess(int marks, String firstName) { 
     this.marks = marks; 
     this.firstName = firstName; 
    } 
} 

是有可能訪問id(1。在studentId方法中聲明的局部變量)和LASTNAME(4.在類中聲明的靜態變量)from constructorAccess?

public constructorAccess(int marks, String firstName) { 
    this.marks = marks; 
    this.firstName = firstName; 
    // How can I use id variable here from studentId method? 
    // How can I use LASTNAME static variable here? 
} 

我用這個訪問了私有和公共實例變量。以引用但LASTNAMEid變量給我錯誤(創建一個局部變量)。

+1

我想你應該試着寫一個構造函數,看看你是否可以在裏面使用這些變量。 –

+1

範圍是範圍,構造函數只是另一種沒有特殊範圍的方法 –

+2

你的問題沒有意義。如果靜態變量和實例變量不能被構造函數訪問,並且/或者它不能有局部變量,那麼很難看出哪些構造函數實際上是用於這些變量的,你不覺得嗎?你真的認爲這是通過? – EJP

回答

1

局部變量只能在代碼範圍內(即{ ... })聲明本地變量的位置。從方法外部訪問它們是沒有意義的,因爲局部變量的存在與特定方法有關調用:雖然該方法當前未被執行,但其局部變量根本不存在;如果方法遞歸地調用它或者從多個線程執行,每個方法調用都有自己的一組獨立的局部變量。

對於其他三個問題:是的,構造函數(和方法)總是可以訪問任何實例和靜態變量,如果它們在同一個類中聲明的話。如果他們在不同的課程,那麼更復雜的access rules進來玩。

如果您收到您的示例中分配給LASTNAME那是因爲你宣佈它final,這意味着該變量只能分配給恰好一次,因爲它的價值已被分配,不能分配給它的錯誤再次。但它仍然「可以訪問」,因爲您可以讀取它的值。或者讓它staticfinal,然後你可以閱讀並分配給它。

相關問題