Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/378.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:像这样在main中调用构造函数有什么好处吗?_Java_Constructor_Main - Fatal编程技术网

Java:像这样在main中调用构造函数有什么好处吗?

Java:像这样在main中调用构造函数有什么好处吗?,java,constructor,main,Java,Constructor,Main,在《Sams自学Java》一书中,作者经常在构造函数中编写一组代码,将主块放在其外部,然后在主块内部调用构造函数。这样做,而不是像某些人那样在主块中编写代码,有什么好处吗 例如: import java.io.*; import java.util.*; class Configurator { Configurator() { try { // load the properties file File configFile = new File("

在《Sams自学Java》一书中,作者经常在构造函数中编写一组代码,将主块放在其外部,然后在主块内部调用构造函数。这样做,而不是像某些人那样在主块中编写代码,有什么好处吗

例如:

import java.io.*;
import java.util.*;

class Configurator {

Configurator() {
    try {
        // load the properties file
        File configFile = new File("program.properties");
        FileInputStream inStream = new
        FileInputStream(configFile);
        Properties config = new Properties();
        config.load(inStream);
        // create a new property
        Date current = new Date();
        config.setProperty("runtime", current.toString());
        // save the properties file
        FileOutputStream outStream = new
        FileOutputStream(configFile);
        config.store(outStream, "Properties settings");
        inStream.close();
        config.list(System.out);
    } catch (IOException ioe) {
        System.out.println("IO error " + ioe.getMessage());
    }
}

public static void main(String[] arguments) {
    Configurator con = new Configurator();
}

}那本书因相当糟糕而臭名昭著。但是在该构造函数中有大量的代码,构造函数被定义为“构造”对象,例如设置对象的值等。不要执行太多任务,而是在类中创建构造函数可以调用的方法。

就构造函数的质量而言,还有其他答案/评论解释了为什么这是个坏主意。关于将所有代码具体地放在构造函数中而不是直接放在
main
中,它在自动化测试和可移植性方面有好处


将所有代码移到构造函数中可以让自动测试框架比测试
main
更容易地测试这些代码。此外,通过将整个应用程序放置在一个没有main的类中,您可以将其提取并在其他应用程序中使用。

例如,main是一个静态方法,它只需要静态变量,因此编写大量代码是不好的。

对于这个小玩具程序,确实没有优势。但是对于大多数其他程序来说,主要方法应该非常小,大多数代码工作应该在实例域中完成,而不是在静态域中。这可能是作者对使用
static
的厌恶。一旦需要多个方法处理同一数据,就必须声明类数据成员。如果不创建对象实例,则所有内容都需要声明为
静态
(如果忘记了,请给出一个令人困惑的错误)。在构造函数中完成所有这些工作,吞并异常,而不是关闭流,这是一种糟糕的做法。我也不会读那本书。不幸的是,我从1997年开始学习Java。所以我已经很久没有读Java入门书籍了。Bruce Eckel告诉我用Java思考是个好主意。是的,把“实际函数”放在构造函数中通常是个坏主意,而不是(在本例中)把它放在
main
doit
实例方法中。对于“玩具”程序来说没有什么大不了的,但是将代码放入构造函数也没有什么实际意义。当然,没有什么可以阻止另一个应用程序调用您的
main
@HotLicks true,这更多的是关于偏好而不是功能。
main
的接口是固定的,所以我总是喜欢将应用程序和
main
分开。