2012-09-19 39 views
0
public class welcomepage extends javax.swing.JFrame { 
    backendcode bec; 
    String username; 
    public welcomepage() { 
      initComponents(); 
      username=null; 
      backendcode bec= new backendcode("dummy"); 
      System.out.println("bec created "+ bec); 
    } 

    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) { 
      System.out.println("bec created "+ bec); 
      bec.back_login_credentials(username); 
    } 
    /* 
    and other private methods(not mentioned here) which also needs to access bec object 
    */ 
} 

public class backendcode { 
    public backendcode(String dummy) { 
      //some code 
    } 
    public void back_login_credentials(String username, String password) { 
      //some code 
    } 
    } 

我宣佈BEC(backendcode對象,以便它是可見的整個類)作爲welcomepage類內部成員的數據,並在其construcor 初始化,但它得到了一些intialisations是construcor內創建,但因爲jButton1ActionPerformed方法內的對象的值將爲null。爲什麼它是..什麼是解決方案,以獲得初始化對象實例?不當對象創建Java中

+3

我沒有動力來回答一個問題,如果它沒有被錄取的機會......嗯,通常不會...嘆息 – ZnArK

回答

3

全局變量bec從不初始化。您在構造函數的範圍內創建一個新的bec變量。

嘗試以下操作:

public class welcomepage extends javax.swing.JFrame { 
    backendcode bec; 
    String username; 
    public welcomepage() { 
    initComponents(); 
      username=null; 
      bec= new backendcode("dummy"); 
    ... 
1

改變這一行

backendcode bec = new backendcode("dummy");

這一行:

bec = new backendcode("dummy"); 

你是隱藏的全局變量BEC,如果你在你的代碼仔細看。

0

你在這個網站上隱藏着這條線。

backendcode bec= new backendcode("dummy"); 

應該

bec= new backendcode("dummy"); 

您所做的一切被稱爲shadowing

我也建議仰視Java naming conventions。它會讓你的代碼更易於閱讀。

1

在你的構造函數,你正在做的:

backendcode bec= new backendcode("dummy"); 

...這將創建一個新的變量。你要設置的現有場這樣的:

bec= new backendcode("dummy"); 

每當您指定的類型,你要創建一個新的變量,而不是設置一個現有的價值。這可能會令人困惑,因爲你發現局部變量可以和字段名稱相同 - 當他們這樣做時,它被稱爲陰影,它是局部變量,在該方法的其餘部分,而不是字段,這是默認引用的局部變量。

您可以通過使用this關鍵字明確引用該字段,而不是本地變量。舉例來說,如果你改變了你的構造函數如下:

public welcomepage() { 
    initComponents(); 
    username=null; 
    backendcode bec= new backendcode("dummy"); 
    System.out.println("bec created "+ this.bec); 
} 

...你會看到領域(this.bec)仍然是零。

順便說一句,你應該申報現場爲私有 - 這樣,它仍然是可見的整個類(這就是爲什麼它是一個場),但將不可見(或更重要的是,改變的)任何其他類。如果您確實需要其他類來更改字段的狀態,那麼您可以通過getter/setter方法以更受控制的方式來執行此操作。