java - 是否有必要在构造函数中指定每个 Java 类的属性?

标签 java constructor

这听起来可能很傻,但我想知道,当我们在一个类中声明一个类属性时,该类属性是否必须在构造函数中,或者我们只在我们要初始化它时才将它放在构造函数中?

例如,我可以这样做吗?

Public class A {
    private int n;
    private string name;
    
    public A(int n) { 
        this.n = n;
    }
}

请注意,我没有在构造函数中放置类属性“name”,这会导致系统抛出异常吗?如果是这样,如果我在 A 类下创建的以下方法之一中使用“名称”,它会抛出 NoPointerException 吗?

最佳答案

关于不在构造函数中为字段赋值:是的,你可以这样做,但通常应该尽量避免 null如果有 null尤其是值字段将您的对象实例置于无效或未定义状态。

如果您只是使用“getter”返回字段:getName(): String那么它就不会抛出 NullPointerException :只有当你例如试着调用String使用 name 的方法.如果其中一个参数的计算结果为 null,您调用的方法也可能会抛出异常。 .

如果您决定返回 name虽然它可能仍然是 null那么你应该返回一个 Optional<String>相反。

如果你标记字段final那么您确实需要分配它,但这也意味着您之后不能更改引用。如果你想强制分配,那么你可以 annotate using @NonNull or similar .

关于java - 是否有必要在构造函数中指定每个 Java 类的属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68956124/

相关文章:

java - 调用 JButton 中的 main 方法

java - 为什么构造函数不能是最终的、静态的或抽象的?

C++ 初始化继承的模板基类

java - 在java中创建动态xml

java - 如何将 Cobertura 集成到 Teamcity 6.5 构建中并获取代码覆盖率历史记录?

java - 用整数填充(树)集的最短方法?

constructor - 在 Dart 中,您可以从构造函数中调用另一个构造函数吗

java - 处理大量 POJO 的最佳方式

java - 为什么是 Class.newInstance() "evil"?

python - 从元组列表的列表构造稀疏矩阵