簡體   English   中英

Java 將類的變量與類的另一個實例混淆

[英]Java confuses variables of a class with another instance of a class

我正在創建一個讓生物互相爭斗的程序。 我有一個名為 Creature 的類,它分別采用整數輸入來表示攻擊、速度和健康。 每當我嘗試創建 Creature 類的新實例,並嘗試使用方法引用它時,它都認為我在談論該類的最新實例。

Creature c = new Creature(1,2,3);
c.getStats();

這會打印出攻擊:1 速度:2 健康:3

但是,如果我創建一個新的生物...

Creature c = new Creature(1,2,3);
c.getStats();
Creature b = new Creature(9,9,9);
c.getStats();

如您所見,我兩次引用同一個生物。 但是,我得到了不同的結果。 即使我特別聲明我正在談論的生物是 c,它也會改為使用 Creature 類的最新實例。 我相信正在發生的事情是 Java 正在替換 c 的變量。 我能做些什么來解決這個問題?

您的問題顯然出在您實例化(創建)名為b的第二個Creature對象的代碼行上。 由於您沒有發布Creature的構造函數,我猜在構造函數中您分配了傳遞給靜態變量的值。 每個類的每個應用程序域都有一個靜態變量。

所以這就是為什么你會得到不同的結果。 無論您調用哪個對象,靜態變量都會發生變化。 因此,第二次調用構造函數將覆蓋您剛剛分配給靜態變量的值。

現在你可以嘗試創建另一個Creature並調用

c.getStats()

再次,你會看到不同的結果。

要解決這個問題,您需要進入Creature類並查找存儲生物統計數據的變量。 應該有一個詞“ static ”。 你應該刪除它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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