2010-07-07 166 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