2013-02-13 87 views
0

我有2個文本字段和登錄按鈕的登錄頁面。單擊登錄按鈕時,將從txtfield檢索用戶名和密碼,並使用數據庫中的用戶名和密碼進行檢查。如果密碼和用戶名正確,則進入主頁面。我要獲取用戶名並在主頁面顯示名稱。但是,所有用於檢查數據庫並從數據庫中檢索數據的代碼都位於buttonActionPerformed的私有類中。儘管我從數據庫中檢索用戶名並將其存儲在變量中,但我無法從其他類訪問它,因爲它是私有類。那麼,我應該怎麼做才能訪問我在私人課堂中所傳遞的變量。我嘗試在私有類之外釋放變量並在私有類中更新它,但是當我從其他類調用時仍然空白。如何從java中的其他類訪問私有類內部變量的變量?

+5

你能告訴我們你的類和變量的代碼嗎? – Grambot 2013-02-13 15:08:21

+1

你在說私人**班還是私人班?是你的私人班**內部/嵌套班? – Kent 2013-02-13 15:18:36

+0

我試圖把代碼,但不允許放在這裏。我在談論私人課程。當我雙擊jframe上的按鈕時,會創建此私有類以在執行操作時執行代碼。 – user2068452 2013-02-13 15:44:58

回答

1
public class PrivateInformationRetreiving{ 
private int PrivateInfo; 
public void setPrivateInfo(int PrivateInfo) 
{ 
this.PrivateInfo=PrivateInfo; 
} 
public int getPrivateInfo(){return PrivateInfo;} 
} 

說明

首先,瓦里能夠PrivateInfo被宣佈爲private,這意味着只有類PrivateInformationRetreiving內的方法纔會知道PrivateInfo
所以,當我們想知道私有變量PrivateInfo時,我們必須用public方法來做到這一點。
public元素不僅可以在課堂上使用,也可以在課堂以外使用。
因此,setPrivateInfo()可以訪問PrivateInfo,因爲它在類中。
因此,我們必須使用方法setPrivateInfo()getPrivateInfo()作爲接口來訪問PrivateInfo

+0

你能解釋一下嗎,因爲我是初學者,我不明白這一點。 – user2068452 2013-02-13 15:52:06

+1

我會在我的回答中加上解釋 – 2013-02-13 15:55:48

+0

我應該把這些代碼放在私人類還是別的地方? – user2068452 2013-02-13 16:10:45

-1

如果你聲明它是私有的,你不能在類上下文之外訪問它。

一個選項是公開獲取器/設置器與變量進行交互。

public class MyClass { 
    private int x; 
    public int getX(){ 
     return x; 
    } 
    public void setX(int value){ 
     x = value; 
    } 
} 
+0

「不能」是一個強詞。 – 2013-02-13 15:18:52

+0

你是說這是不正確的?如果是這樣,請舉例說明。 – 75inchpianist 2013-02-13 15:20:35

+0

你想讓我把這些代碼放在私人課程裏面,還是僅僅靠它本身? – user2068452 2013-02-13 16:01:55

0

在成功登錄後,只需將用戶數據添加到會話中,然後重定向。當您需要當前登錄的用戶名時,您不必再向數據庫創建另一個請求,因此速度更快,效率更高。

1

那麼,我該怎麼做才能訪問我在私人課堂裏放棄的變量。我嘗試在私有類之外釋放變量並在私有類中更新它,但是當我從其他類調用時仍然空白。

Reflection API用於訪問私有變量。如果你有一個類調用數據庫和它是defPU您就可以訪問它的私有字段(並將其設置爲null)如下:

Field defPUField = Database.class.getDeclaredField("defPU"); 
defPUField.setAccessible(true); 
Field modsField = Field.class. .getDeclaredField("modifiers"); 
modsField.setAccessible(true); 
modsField.setInt(defPUField, 10); 
defPUField.set(null, testVal); 

我建議你只是用dp4j來生成該代碼的反思你,幕後:

@com.dp4j.TestPrivates 
void aMethod(){ 
Database.defPU = null; 
}