如何解决“静态方法___应该以静态方式访问”警告

时间:2010-07-07 19:27:14

标签: java class static warnings

我正在阅读这本书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;
    }
}

4 个答案:

答案 0 :(得分:13)

首先关闭; Java中的方法应该是lowerCamelCase(),而不是UpperCamelCase()。类名应为UpperCamelCase()

第二

int side1;
int side2;

应该是

private int side1;
private int side2;

并且最好(如果你不修改它们)

private final int side1;
private final int side2;

你应该在构造函数中设置side1side2而不是setter。

那就是说,我认为你没有执行你发布的代码,没有理由用你发布的代码发出这些错误,你可能会链接到一个.jar文件,其中有一些旧的代码{ {1}}方法声明为area()

这本书在互联网时代已经相当陈旧,有更好的初学者书籍更好地涵盖了“现代”Java。例如,如果您使用的图书正在使用staticEnumerationVector将其放入垃圾箱并获得较新的图书。

答案 1 :(得分:4)

显示的代码不会生成警告。也许您更改了代码并忘记在Testing类的类路径中更新JAR?

是的,你肯定应该遵守模糊棒棒糖所示的命名约定。

答案 2 :(得分:4)

是否还有一些您未在此处显示的区域和SetSides定义为静态方法的代码?如果是这样,并且类路径上的代码比您在此处显示的版本更高,那就是问题所在。正如Peter Kofler提到的那样,您显示的代码不会产生警告。要删除警告,您必须将r.Area()替换为Rectangle.Area(),将r.setSides(10, 10)替换为Rectangle.SetSides(10, 10)

这就是说这些方法是静态的没有意义。另外,请参阅模糊棒棒糖对适当Java约定的注释。

答案 3 :(得分:3)

指示时使用类名而不是实例名。