Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Hello World将通过CheckStyle_Java_Checkstyle - Fatal编程技术网

Java Hello World将通过CheckStyle

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

所以我对使用checkstyle很陌生,对于我的简单HelloWorld java程序,我收到了很多我不理解的错误

我的代码:

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
    }
}