java - 对实例变量的初始化感到困惑

标签 java scjp ocpjp

我正在准备 SCJP 考试,在做一些模拟测试时我遇到了这个:

它询问以下输出是什么:

class TestClass
{
   int i = getInt();
   int k = 20;
   public int getInt() {  return k+1;  }
   public static void main(String[] args)
   {
      TestClass t = new TestClass();
      System.out.println(t.i+"  "+t.k);
   }
}

我认为它会是 21 20,因为 t.i 会调用 getInt,然后递增 k 得到 21。

然而,答案是1 20。我不明白为什么它会是 1,任何人都可以对此有所了解吗?

最佳答案

变量从上到下初始化。

是这样的:

  1. 最初 ik 都有(默认)值 0
  2. getInt() 计算出的值(当时是0 + 1)赋值给i
  3. 20 分配给 k
  4. 1 20 被打印出来。

良好的阅读:

关于java - 对实例变量的初始化感到困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8218093/

相关文章:

java - 我应该写 OCJP 16 还是 1.7?

java - 编写一个简单的 cron 作业来运行 Java 类

java - 使用另一个实例属性的实例属性的匿名内部类声明

java - NDK - 从 ARGB_8888 位图中处理没有 Alpha 的 RGB 值

scjp - 树集子集

Java 比较器接口(interface)

java - 带扩展名的 ResourceBundle 完全限定名称

java - 如何将方法中的值存储到数组中?

java - 具有嵌套集合的 REST API 数据库