这听起来可能很傻,但我想知道,当我们在一个类中声明一个类属性时,该类属性是否必须在构造函数中,或者我们只在我们要初始化它时才将它放在构造函数中?
例如,我可以这样做吗?
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/