2010-07-07 101 views
1

我正在閱讀Just Java 2書,但顯然缺少一些基本的東西。這是兩個單獨的項目。我爲第二個生成了JAR,並將其添加到第一個構建路徑。打印正確的區域,但編譯器會生成這些警告。這些如何解決?如何解決「靜態方法___應該以靜態方式訪問」警告

// ----------------------------------------------------------- 
// Testing.java 
// ----------------------------------------------------------- 
public class Testing { 
    public static void main(String[] args) { 
     RectangleDFC r = new RectangleDFC(3, 4); 
     System.out.println(r.Area()); 
      // WARNING: The static method Area() from the type RectangleDFC 
      //   should be accessed in a static way 
     r.SetSides (10, 10); 
      // WARNING: The static method SetSides(int, int) from the type 
      //   RectangleDFC should be accessed in a static way 
     System.out.println(r.Area()); 
      // WARNING: The static method Area() from the type RectangleDFC 
      //   should be accessed in a static way 
    } 
} 
// ----------------------------------------------------------- 
// RectangleDFC.java 
// ----------------------------------------------------------- 
public class RectangleDFC { 
    int side1; 
    int side2; 
    RectangleDFC(int s1, int s2) { 
     SetSides(s1, s2); 
    } 
    public void SetSides(int s1, int s2) { 
     side1 = s1; 
     side2 = s2; 
    } 
    public int Area() { 
     return side1 * side2; 
    } 
} 

回答

13

首先; Java中的方法應該是lowerCamelCase(),而不是UpperCamelCase()。類名應該是UpperCamelCase()

秒;

int side1; 
int side2; 

應該

private int side1; 
private int side2; 

,最好(如果你沒有修改它們)

private final int side1; 
private final int side2; 

,你應該剛剛設置的構造,而不是制定者內部的side1side2

這麼說,我不認爲你正在執行您發佈的代碼,沒有理由這些錯誤應該與你貼,你可能鏈接到一個.jar文件與一些舊代碼的代碼發出的地方area()方法被宣佈爲static。此外,這本書在互聯網時代還很古老,有更好的初學者書籍,涵蓋了「現代」Java更好。例如,如果您正在使用的圖書使用的是Enumeration,VectorHashtable將其放入垃圾箱並獲得較新的圖書。

+0

+1用於搗毀這本書。我的同事喜歡「Effective Java」。 – 2010-07-07 20:29:19

+2

「有效Java」不適合初學者。嘗試「用Java思考」。我確信有一個問題...... – 2010-07-07 22:10:05

+1

「把它放在垃圾箱裏,拿到一本新書。」 tony9099 2013-08-30 14:55:41

3

指示時使用類名而不是實例名。

+0

我會說同樣的事情,除了'Area()'方法在他的代碼示例中不是靜態的...也許樣本是錯誤的? – 2010-07-07 19:33:10

+0

你是對的,但在他的例子中沒有階級名稱... – 2010-07-07 19:33:59

+0

@fuzzy lollipop,列出的代碼是否生成警告? – 2010-07-07 21:47:18

4

顯示的代碼不會生成警告。也許你更改了代碼並忘記更新Testing類路徑中的JAR?

是的,你一定要堅持模糊棒棒糖顯示的命名約定。

4

是否有一些額外的代碼,這裏沒有顯示Area和SetSides定義爲靜態方法?如果是這樣,並且類路徑上的代碼比您在此處顯示的版本更高,那就是問題所在。正如彼得·科夫勒提到你所顯示的代碼不會產生這種警告。爲了擺脫這些警告,您必須用Rectangle.Area()r.setSides(10, 10)以及Rectangle.SetSides(10, 10)替換r.Area()

這就是說,這些方法是靜態的沒有任何意義。此外,請參閱模糊棒棒糖對適當的Java約定的評論。

+1

很高興看到實際回答問題的答案(請參閱班級,而不是對象)。 – Chris 2011-10-07 14:44:36

相關問題