【问题标题】:why and how instance variable get initialized without getting initialized by constructor in Java?为什么以及如何初始化实例变量而不被Java中的构造函数初始化?
【发布时间】:2023-03-03 15:43:01
【问题描述】:
public class Test{
int i;
Test(){
    System.out.println(i);
}
public static void main(String[] args){
    Test obj=new Test();
    }
}

输出=0

P.S:我对 Java 很幼稚,所以这个问题可能很愚蠢。我期待着您的支持。谢谢

【问题讨论】:

  • Java 就是这样定义的。阅读 JLR——Java 语言参考——了解详细信息。
  • int的默认值为0
  • 当你将一个int声明为“字段”(类变量)时,它会自动初始化值为“0”,但当属于其他方法时,为“null”
  • @Abdelhak 实例变量属于对象,静态变量属于类。在上述情况下,变量 i 属于谁,因为没有对象并且 i 不是静态变量。
  • 你确定这个程序有输出吗?我没想到会这样。

标签: java object instance-variables


【解决方案1】:

未初始化的静态/实例字段将被编译器设置为默认值。

下表为数据类型的默认值:

+--------------------------+----------------------------+
|        Data Type         | Default Value (for fields) |
+--------------------------+----------------------------+
| byte                     | 0                          |
| short                    | 0                          |
| int                      | 0                          |
| long                     | 0L                         |
| float                    | 0.0f                       |
| double                   | 0.0d                       |
| char                     | '\u0000'                   |
| String (or any object)   | null                       |
| boolean                  | false                      |
+--------------------------+----------------------------+

更多信息可以查看文档here

【讨论】:

    【解决方案2】:

    看,每个Instance-Variable or Class-Variable 初始化为default value

    如果实例变量是一些引用类型,那么它将是 总是由null分配它的默认值

    因此,在您的情况下,int 是原始类型,其 default 值为 0(zero),这就是您在输出中得到 0 的原因。

    【讨论】:

      猜你喜欢
      • 2015-04-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多