Java 如何处理可能不使用的类成员以优化性能、未初始化或初始化为某个默认值?

Java 如何处理可能不使用的类成员以优化性能、未初始化或初始化为某个默认值?,java,c++,oop,Java,C++,Oop,假设我有一个班级考试 Test是存储我管理的测试的类。testNum是测试的编号,描述是描述测试的可选字符串 由于描述是可选的,所以有时我会将其包含在测试对象中,有时我不会 在上面所示的构造函数中,如果描述没有传递给构造函数,那么将描述保持为未初始化状态或将其初始化为某个默认值(例如,构造函数中没有描述)是更好的做法吗 更重要的是,如果描述被初始化为默认值,会不会影响程序性能,例如占用不必要的内存或增加运行时间,或者影响可以忽略不计 我使用C++,如果它影响潜在的答案,但这一般可以回答OOP。<

假设我有一个班级考试

Test是存储我管理的测试的类。testNum是测试的编号,描述是描述测试的可选字符串

由于描述是可选的,所以有时我会将其包含在测试对象中,有时我不会

在上面所示的构造函数中,如果描述没有传递给构造函数,那么将描述保持为未初始化状态或将其初始化为某个默认值(例如,构造函数中没有描述)是更好的做法吗

更重要的是,如果描述被初始化为默认值,会不会影响程序性能,例如占用不必要的内存或增加运行时间,或者影响可以忽略不计

我使用C++,如果它影响潜在的答案,但这一般可以回答OOP。< /P>最佳实践 我认为OOP的一般智慧会说:

尽可能避免使用可选字段,因为它们可能表示对象模型中的弱点。 当存在可选字段时,宁愿将其初始化为默认值,也不要将其保持为未初始化状态-这是调试期间不必担心的一件随机事情。

在类似描述的情况下,我最初的反应是,你可能会逃脱要求,这听起来像是一个可选的领域,因为你不想强迫某人在思考其他事情时总是提出一个描述,即使从长远来看,如果每件事都有描述的话,生活可能会更轻松

性能影响 将类似于描述的值初始化为默认值将带来一些小的成本-确切的成本将取决于所设置的值以及目标平台的各个方面。在大多数情况下,成本可能可以忽略不计;判断成本是否有意义的最好方法是使用探查器或类似工具来分析您的程序在哪里花费了大部分时间:

程序员浪费大量时间考虑或担心其程序中非关键部分的速度,而在考虑调试和维护时,这些提高效率的尝试实际上会产生强烈的负面影响。我们应该忘记小效率,比如说97%的时间:过早优化是万恶之源。然而,我们不应该在这关键的3%上放弃我们的机会


如果在某些情况下没有描述,那么最好将其留空。请注意,将调用std::string的默认构造函数。初始化为“无描述”可能会导致动态分配,这可能会降低性能。对于Java而言,如果您自己不初始化对象字段,则这些字段将被初始化为null。如果我要声明一个默认构造函数,我通常会提供默认值,以避免在以后使用该类时出现null问题。在Java中,不能不初始化它,因为它会自动初始化为null。如果不希望未定义的描述为null,可以显式地将其初始化为空字符串,也就是说,因为它是可选的,正如您自己所说,您可以将其设置为可选的,并将值设置为空。无论您想要null、empty还是其他一些默认值都是完全基于意见的,因此我投票以主要基于意见的方式结束这个问题。正如斯图尔特·马克斯(Stuart Marks)在《可选-所有比克什德之母》中所述,应该尽量避免使用可选作为字段。给出的一个示例是在搜索方法中使用Optional作为返回类型,如果找不到目标,通常会返回null。
class Test{
        string testNum, description;
    public:
        Test(string num); // A constructor that only sets testNum = num
};