Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/332.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 一个人应该在构造函数中放入多少代码?_Java_Constructor - Fatal编程技术网

Java 一个人应该在构造函数中放入多少代码?

Java 一个人应该在构造函数中放入多少代码?,java,constructor,Java,Constructor,我在想在Java的构造函数中应该放多少代码?我的意思是,通常你会创建助手方法,在构造函数中调用,但有时会有一些较长的初始化过程,例如,对于一个从文件中读取的程序,或者用户界面,或者其他程序,在这些程序中,你不会只初始化实例变量,在这些实例变量中,构造函数可能会变长(如果你不使用helper方法)。我认为构造函数通常应该简短,不是吗?有例外吗?如果你遵循原则,每个类应该有一个改变的理由(即做一件事)。因此,构造函数通常不会读取文件,但您将有一个单独的类从文件中构建对象。完成对象初始化所需的最小值

我在想在Java的构造函数中应该放多少代码?我的意思是,通常你会创建助手方法,在构造函数中调用,但有时会有一些较长的初始化过程,例如,对于一个从文件中读取的程序,或者用户界面,或者其他程序,在这些程序中,你不会只初始化实例变量,在这些实例变量中,构造函数可能会变长(如果你不使用helper方法)。我认为构造函数通常应该简短,不是吗?有例外吗?

如果你遵循原则,每个类应该有一个改变的理由(即做一件事)。因此,构造函数通常不会读取文件,但您将有一个单独的类从文件中构建对象。

完成对象初始化所需的最小值

如果您可以将构造器的一部分(我的指导原则是5行左右)作为一块逻辑或一个特定的过程来讨论,那么为了清晰和组织的目的,最好将其拆分为一个单独的方法


但每个人都有自己的。构造函数应该足够长,但不再=)

如果要定义多个重载构造函数,请不要重复代码;相反,将功能整合到其中一个,以提高清晰度和易于维护。

正如Knuth所说,“过早优化是万恶之源。”


你应该给建筑工人投多少钱?你需要的一切。这就是“急切”的方法。当-只有当-性能成为一个问题时,你是否考虑优化它(对“懒惰”或“过度热切”的方法)。尽管另一个是C++,但是概念仍然非常相似。

构造函数应该创建对象的最简单、通用的实例。多普通?选择从类继承的每个实例或对象必须通过才能有效的测试用例-即使“有效”仅表示正常失败(编程生成的异常)

维基百科有一个很好的描述:


一个有效的对象是构造函数的目标,有效的对象不一定有用——这可以通过初始化方法来实现。

我的习惯做法是,如果构造函数只需要在对象上设置一些字段,那么它可以任意长。如果它变得太长,这意味着类设计无论如何都被破坏了,或者数据需要打包到一些更复杂的结构中


另一方面,如果在初始化类字段之前,输入数据需要一些更复杂的处理,我倾向于将处理后的数据交给构造函数,并将处理移到静态工厂方法。

您的类可能需要初始化到某个状态,然后才能使用它完成任何有用的工作

想想这个

public class CustomerRecord
{
    private Date dateOfBirth;

    public CustomerRecord()
    {
        dateOfBirth = new Date();
    }

    public int getYearOfBirth()
    {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(dateOfBirth);
        return calendar.get(Calendar.YEAR);
    }   
}
现在,如果不初始化dateOfBirth成员variable,则任何后续的getYearOfBirth()调用都将导致NullPointerException

因此,最简单的初始化可能涉及

  • 赋值
  • 调用助手函数
  • 要确保在稍后调用类的成员时该类的行为正确,只需这样做

    构造函数类似于应用程序安装向导,您只需在其中进行配置。如果实例已准备好对自身执行任何(可能的)操作,则构造函数运行良好


    性能通常不是问题;维修是!我不确定避免过早优化是否意味着避免过早维护优化…是的,我不认为这个问题与性能有关。。。这更多的是关于设计适当的代码,它是可维护的,并且易于其他人理解。是的,编写可维护代码的最好方法是直接编写(即渴望)。性能缓存往往会使代码变得非常复杂,如果性能不是一个问题,则会适得其反。另请参阅