Java Hello World将通过CheckStyle
所以我对使用checkstyle很陌生,对于我的简单HelloWorld java程序,我收到了很多我不理解的错误 我的代码:Java Hello World将通过CheckStyle,java,checkstyle,Java,Checkstyle,所以我对使用checkstyle很陌生,对于我的简单HelloWorld java程序,我收到了很多我不理解的错误 我的代码: package <package_name>; /** * A simple class to compile. */ public class HelloWorld { /** * @param args standard main parameters */ public static void main(String[] arg
package <package_name>;
/**
* A simple class to compile.
*/
public class HelloWorld {
/**
* @param args standard main parameters
*/
public static void main(String[] args) {
System.out.println("hello world");
}
}
为什么会发生这种情况?我是否需要为我的
main
类创建一个私有构造函数并将默认参数设置为最终参数?对于像主类这样的实用程序类,最好创建一个私有构造函数,以免java编译器自己编写默认的无参数构造函数main()
Java总是在将参数发送到方法之前复制参数。这里的最后一个关键字只意味着在方法内部不能重新分配变量。(请注意,如果您有最后一个对象,如案例中的String[]
,您仍然可以更改该对象的属性)。第1个问题已得到解答,并已记录在案。简而言之,您没有向HelloWorld
类提供任何实例成员,那么为什么允许它们创建实例呢?这就是为什么建议创建一个private
构造函数
第二期-声明。简短回答-在方法算法执行期间更改参数值可能会造成混淆,应避免。这就是为什么建议声明它们
final
您可能需要创建至少一个私有构造函数,添加以下内容:
/**
* Private default constructor
*/
private HelloWorld () {
}
这应该可以解决问题。这里的原因是因为Java编译器“认为”您想要创建一个实用程序类,因为它只看到公共静态方法。在这种情况下,最好使用私有默认构造函数
对于这个“Hello World”示例,这样做很好。但是在RL代码中,您希望从HelloWorld
类创建一个实例,然后向其中添加一个“业务”方法(包含逻辑的方法)
编辑:第10行中的警告是一个很好的警告,因为对参数使用final
通常意味着您无法更改参数的值:
public class Foo {
public Foo () {
}
public void doBar (final Bar bar) {
// Won't work:
bar = null;
// Will work!
bar.callMe();
}
}
public class Bar {
public Bar {
}
public void callMe () {
// Do something
}
}
现在只需删除final
,它就会编译,但会向您抛出一个警告,提示您更改了一个参数。这会导致意外的副作用,即(稍后在较大的项目中)某个方法“某处”更改了某些参数
试想一下:+20万行代码(没有注释!)和参数没有final
。。。一个完美的混乱
被接受的答案的海报上写着,只是这里有更多的细节和一个很好的理由
public class Foo {
public Foo () {
}
public void doBar (final Bar bar) {
// Won't work:
bar = null;
// Will work!
bar.callMe();
}
}
public class Bar {
public Bar {
}
public void callMe () {
// Do something
}
}