代码之家  ›  专栏  ›  技术社区  ›  DavidC

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

  •  1
  • DavidC  · 技术社区  · 15 年前

    我正在翻阅这本书 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 回复  |  直到 15 年前
        1
  •  13
  •   user177800 user177800    14 年前

    lowerCamelCase() ,不是 UpperCamelCase() 大写() .

    第二;

    int side1;
    int side2;
    

    应该是

    private int side1;
    private int side2;
    

    最好是(如果你不修改的话)

    private final int side1;
    private final int side2;
    

    你应该把 side1 side2 在构造函数中而不是在setter中。

    area() 方法已声明 static

    另外,这本书在互联网时代已经很老了,有更好的初学者的书,涵盖“现代”Java更好。例如,如果你正在使用的书 Enumeration , Vector Hashtable

        2
  •  4
  •   Peter Kofler    15 年前

    显示的代码 不会 Testing 上课?

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

        3
  •  4
  •   laz    15 年前

    有没有其他代码没有在这里显示,这些代码将Area和setside定义为静态方法?如果是这样,并且类路径上的代码比这里显示的版本更高,这就是问题所在。正如Peter Kofler提到的,您正在显示的代码不会生成该警告。为了消除这些警告,你必须替换它们 r.Area() 具有 Rectangle.Area() r.setSides(10, 10) Rectangle.SetSides(10, 10) .

    尽管如此,这些方法是静态的是没有意义的。另外,请参阅fuzzy lollipop的注释,以了解正确的Java约定。

        4
  •  3
  •   Thorbjørn Ravn Andersen    15 年前

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