Java实例变量初始化方法

标签 java compilation initialization instance-variables

我对下面这段代码有点困惑:

public class Test{

  int x = giveH();
  int h = 29;

  public int giveH(){
     return h;
  }

  public static void main(String args[])
  {
      Test t = new Test();
      System.out.print(t.x + " ");
      System.out.print(t.h);          
  }
}

这里的输出是0 29,但是我想这一定是编译器错误,因为在方法giveH() 的时候变量h应该还没有初始化。那么,编译是从上到下逐行进行的吗?为什么这是有效的?为什么 x 的值是 0 而不是 29?

最佳答案

int 的默认值为 0(参见 here)。因为您在 h 之前初始化了 x,所以 giveH 将返回 int 的默认值(例如 0)。

如果你这样调换顺序

int h = 29;
int x = giveH();

输出将是

29 29

关于Java实例变量初始化方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33669037/

相关文章:

java - Tomcat 7 Maven 构建因 Jersey 而失败

c++ - 架构 x86_64 : Compiling problems 的 undefined symbol

java - 如何在运行时从 JTextArea 运行/编译 Java 代码?

c++ - 非常量引用的初始化

c# - 如何构建只读字典?

javascript - 根据 session ID 创建对象变量

java - 是否可以通过在 Apache Velocity 中定义模板来生成 Java 代码?

java - uniVocity 不会将第一列解析为 bean

c# - 包装函数的属性?

java - 无法应用插件 : Found java version 11 Minimum required is 1. 8. 尚不支持版本 11.0.0 及更高版本