首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >类的变量初始化

类的变量初始化
EN

Stack Overflow用户
提问于 2015-01-13 02:11:27
回答 2查看 58关注 0票数 0

我对类的变量初始化有疑问。当通常使用变量声明类并初始化(即使它们是最终的)时,我会通过构造函数来实现。

例如:

代码语言:javascript
复制
class Example {
    private int a, b;
   
    public Example () {
        a = 5;
        b = 10;
    }

    // Methods
}

但是您也可以在声明之后立即启动。

例如:

代码语言:javascript
复制
class Example {
    private int a = 5, b = 10;
   
    // Methods
}

初始化变量的最佳方法是什么?有什么关系?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-01-13 02:15:36

第一种方法初始化的变量将在运行init<>方法时获得它们的值。第二种方法初始化的变量将在执行构造函数时获得它们的值。对于像这样的简单用例,没有有效的区别,但是如果有多个构造函数或对象生命周期中发生的“有趣的”事情,这可能很重要。没有永远-更好的方法。

(如何获得不同行为的一个例子是,如果超类的构造函数(必须在子类之前运行)使用反射来基于实例字段变量进行操作的话。这不是一件很常见的事情,但这是我所说的“有趣”的一个例子。)

票数 -1
EN

Stack Overflow用户

发布于 2015-01-13 02:32:14

代码语言:javascript
复制
class Foo {
   String username = "user";
   String password = null;
}

在功能上等价于

代码语言:javascript
复制
class Foo {
    String username, password;
    Foo() { 
        username = "user";
        passowrd = null; 
    }
}

但是,考虑到在以后的某个时候需要添加另一个构造函数的情况:

代码语言:javascript
复制
public Foo(String password) {
    this.password = password;
}

现在,调用new Foo("mypasswd")的人冒着username未初始化的风险。如果您在声明成员变量时初始化它们,那么不管类的实例是如何创建的(反序列化除外,这是一个单独的故事!)如果在默认构造函数中初始化它们,那么所有其他构造函数都需要显式调用它,或者负责初始化变量本身。

在声明变量时,最好总是给所有变量某种初始值,以减少意外和不可预测行为的可能性。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27913938

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档