Java 如何解决;静态方法“应以静态方式访问”;警告
我正在翻阅这本书,但显然遗漏了一些基本的东西。这是两个独立的项目。我为第二个生成了一个JAR,并将其添加到第一个的构建路径中。将打印正确的区域,但编译器会生成这些警告。如何解决这些问题Java 如何解决;静态方法“应以静态方式访问”;警告,java,class,static,warnings,Java,Class,Static,Warnings,我正在翻阅这本书,但显然遗漏了一些基本的东西。这是两个独立的项目。我为第二个生成了一个JAR,并将其添加到第一个的构建路径中。将打印正确的区域,但编译器会生成这些警告。如何解决这些问题 // ----------------------------------------------------------- // Testing.java // ----------------------------------------------------------- public class Te
// -----------------------------------------------------------
// 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;
}
}
指示时使用类名而不是实例名。指示时使用类名而不是实例名。首先;Java中的方法应该是
lowerCamelCase()
,而不是UpperCamelCase()
。类名应为大写()
第二
int side1;
int side2;
应该是
private int side1;
private int side2;
最好是(如果您不修改它们)
您应该在构造函数中设置side1
和side2
,而不是setter
也就是说,我不认为您正在执行发布的代码,没有理由在发布的代码中发出这些错误,您可能正在使用一些旧代码链接到一个.jar文件,其中声明了area()
方法static
另外,这本书在互联网时代已经很老了,有很多更好的入门书更好地介绍了“现代”Java。例如,如果您正在使用的书正在使用枚举
,向量
或哈希表
,请将其放入垃圾箱,然后获得一本更新的书。首先;Java中的方法应该是lowerCamelCase()
,而不是UpperCamelCase()
。类名应为大写()
第二
int side1;
int side2;
应该是
private int side1;
private int side2;
最好是(如果您不修改它们)
您应该在构造函数中设置side1
和side2
,而不是setter
也就是说,我不认为您正在执行发布的代码,没有理由在发布的代码中发出这些错误,您可能正在使用一些旧代码链接到一个.jar文件,其中声明了area()
方法static
另外,这本书在互联网时代已经很老了,有很多更好的入门书更好地介绍了“现代”Java。例如,如果您正在使用的书籍正在使用枚举
,向量
或哈希表
将其放入垃圾箱并获取较新的书籍。显示的代码不会生成警告。也许您更改了代码,忘记了更新Testing
类的类路径中的JAR
是的,您肯定应该遵守模糊棒棒糖所示的命名约定。显示的代码不会生成警告。也许您更改了代码,忘记了更新Testing
类的类路径中的JAR
是的,您肯定应该遵守fuzzy lollipop所示的命名约定。这里是否有其他代码没有显示,其中Area和SetSide定义为静态方法?如果是这样,并且类路径上的代码比这里显示的版本高,这就是问题所在。正如Peter Kofler提到的,您正在显示的代码不会生成该警告。要消除警告,您必须将r.Area()
替换为Rectangle.Area()
,将r.setside(10,10)
替换为Rectangle.setside(10,10)
尽管如此,这些方法是静态的是没有意义的。另外,请参阅fuzzy lollipop的注释以了解正确的Java约定。这里是否有一些其他代码没有显示,这些代码将Area和SetSide定义为静态方法?如果是这样,并且类路径上的代码比这里显示的版本高,这就是问题所在。正如Peter Kofler提到的,您正在显示的代码不会生成该警告。要消除警告,您必须将r.Area()
替换为Rectangle.Area()
,将r.setside(10,10)
替换为Rectangle.setside(10,10)
尽管如此,这些方法是静态的是没有意义的。另外,请参阅fuzzy lollipop的评论,了解适当的Java约定。我也会这么说,只是Area()
方法在他的代码示例中不是静态的。。。可能样本是错误的?@fuzzy lollipop,列出的代码是否产生了所指示的警告?不,它不会,简单的眼球分析应该会揭示这一点。@fuzzy,准确地说,你甚至在回答中注意到了自己,所以所包含的源代码不是给出警告的地方引用的源代码。警告的正确操作如我所述。不是针对发布的代码,这是我们必须继续的,问题是.jar没有运行发布的代码,这似乎是海报想要执行的代码。我想说同样的事情,除了区域()
方法在他的代码示例中不是静态的。。。可能样本是错误的?@fuzzy lollipop,列出的代码是否产生了所指示的警告?不,它不会,简单的眼球分析应该会揭示这一点。@fuzzy,准确地说,你甚至在回答中注意到了自己,所以所包含的源代码不是给出警告的地方引用的源代码。警告的正确操作正如我所说的。不是针对发布的代码,这是我们必须继续做的,问题是.jar没有运行发布的代码,这似乎是海报想要执行的代码。+1用于破坏这本书。我的同事喜欢“高效Java”。“高效Java”不适合初学者。试试“用Java思考”。我肯定有一个问题…“把它扔进垃圾桶,买一本更新的书。”