Java初始值?

时间:2013-05-26 18:04:26

标签: java class constructor

如果我要做的事情如下:

public class Game
{
    private boolean RUNNING = true;

    Game()
    {
    }

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

RUNNING = true会在什么时间点?

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

5 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分: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()

答案 2 :(得分:0)

private boolean RUNNING = true;
Game() {
}

完全相同
private boolean RUNNING;
Game() {
    RUNNING = true;
}

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

答案 3 :(得分:0)

使用new运算符调用构造函数时,在执行构造函数内部的代码之前,会初始化类的所有非静态成员。您可以使用调试器并进入该调用,并查看它的第一个位置。加载类并首次访问时会初始化静态成员(有关静态成员的详细信息,请参阅此question)。

答案 4 :(得分: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
            }
   }

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