1

如果我要执行以下操作:

public class Game
{
    private boolean RUNNING = true;

    Game()
    {
    }

    public static void main(String[] args)
    {
        Game game = new Game();
    }
}

会在什么时间点RUNNING = true

编辑:为清楚起见,将在程序运行的哪个点设置为 true。例如:构造函数之前,构造函数之后等。

4

5 回答 5

4

它将在构造函数之前设置为 true。您可以在构造函数中将其用作true.

于 2013-05-26T18:06:40.660 回答
1

这段代码解释了自己:

public class SuperClass
{
    String superField = getString("superField");

    public SuperClass()
    {
        System.out.println("SuperClass()");
    }

    public static String getString(String fieldName)
    {
        System.out.println(fieldName + " is set");
        return "";
    }

    public static void main(String[] args)
    {
        new ChildClass();
    }
}

class ChildClass extends SuperClass
{
    String childField = getString("childField");

    public ChildClass()
    {
        System.out.println("ChildClass()");
    }
}

输出:

superField is set
SuperClass()
childField is set
ChildClass()
于 2013-05-26T18:19:05.363 回答
0
private boolean RUNNING = true;
Game() {
}

完全一样

private boolean RUNNING;
Game() {
    RUNNING = true;
}

实际上,编译器会将初始化移动到构造函数的开头。然后在实例化该类的对象时设置该值。

于 2013-05-26T18:11:31.720 回答
0

当使用new运算符调用构造函数时,类的所有非静态成员都会在执行构造函数内的代码之前初始化。您可以使用调试器并单步执行该调用,看看它先去哪里。静态成员在加载类和第一次访问时被初始化(有关静态成员的更多详细信息,请参阅此问题)。

于 2013-05-26T18:12:47.100 回答
0

当您尝试使用未手动初始化的局部变量时,您将收到编译时错误。

public static void main(String args[]){
               int a;
              System.out.pritnln(a); //error
      }

但实例变量并非如此。这本身表明它们甚至在构造函数之前就可以使用了。

   public class Example{
            private int a;
            public Example(){
                   System.out.println(a);   //No error
            }
            public int getA(){
                   return a;           //No error
            }
   }

我希望这种直觉能回答你的问题............

于 2013-05-26T18:53:18.943 回答