【问题标题】:Default initialization in javajava中的默认初始化
【发布时间】:2013-03-01 19:20:20
【问题描述】:

我对 Java 中的变量初始化感到困惑。据我了解,类变量默认初始化,而局部变量默认不初始化。但是,如果我使用 new 关键字在方法内创建一个数组,则默认情况下它会被初始化。所有对象都是这样吗?不管是类变量还是局部变量,使用new关键字初始化一个对象吗?

【问题讨论】:

  • 你试过看看会发生什么吗?
  • 是的,我尝试了其他对象,这似乎就是发生的事情,这就是我问这个问题的原因

标签: java initialization


【解决方案1】:

来自Java Language Specification

每个类变量、实例变量或数组组件在创建时都会使用默认值进行初始化(第 15.9 节、第 15.10 节):

  • 对于byte类型,默认值为0,即 (字节)0.

  • 对于short类型,默认值为0,即(short)0的值。

  • 对于int类型,默认值为0,即0。

  • 对于long类型,默认值为0,即0L。

  • 对于float类型,默认值为正零,即0.0f。

  • 对于double类型,默认值为正零,即0.0d。

  • 对于char类型,默认值为空字符,即'\u0000'。

  • 对于布尔类型,默认值为false。

  • 对于所有引用类型(第 4.3 节),默认值为 null

【讨论】:

  • +1 用于实际列出所有原始类型,我太懒了 =)。
  • 谢谢 我知道初始化时的初始化值是什么。我只是不确定在什么情况下对象是默认初始化的。
【解决方案2】:

经过进一步调查,基元只有在成员变量时才会初始化为默认值,局部变量如果没有初始化就会抛出编译错误。

如果您创建一个基元数组,默认情况下它们都将被初始化(对于本地数组和成员数组都是如此),您将需要实例化一个对象数组。

【讨论】:

  • 我不确定这一点。当我在方法中声明原语时,默认情况下它不会被初始化。如果我尝试在没有初始化的情况下使用它,我会收到编译错误。
  • 是的,编译器会为未初始化的本地原语输出“此变量可能尚未初始化”消息
  • @JeffHawthorne 真的吗?我面前没有一个 java 编译器来测试这个,但我认为原语在声明时总是会被赋予默认值,无论在哪里。
  • @BM 我对此做了一些额外的测试,我所说的一切都是正确的,除了我没有意识到使用未初始化的局部变量时的编译错误。编辑了我的答案。
  • @KevinDiTraglia 我不确定这是警告还是错误(其中一些因 IDE 不同而异),但当我尝试只执行 int i; 时,我在方法中发生了这种情况。或类似的东西
【解决方案3】:

所有对象都是这样吗?是否使用 new 关键字初始化一个 对象不管是类变量还是局部变量?

当您使用new 关键字时。这意味着您已经初始化您的对象。不管它是在方法级别还是实例级别声明的。

public void method(){
Object obj1;// not initialized
Object obj2 = new Object();//initialized
}

【讨论】:

  • 感谢您的澄清。这就是我一直在寻找的。​​span>
猜你喜欢
  • 2013-10-08
  • 1970-01-01
  • 1970-01-01
  • 2014-12-29
  • 2012-11-29
  • 2011-03-26
  • 2020-02-08
  • 1970-01-01
相关资源
最近更新 更多