如果我要做的事情如下:
public class Game
{
private boolean RUNNING = true;
Game()
{
}
public static void main(String[] args)
{
Game game = new Game();
}
}
RUNNING = true
会在什么时间点?
编辑:为清楚起见,程序运行的哪一点设置为true。例如:构造函数之前,构造函数之后等等。
答案 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
}
}
我希望这种直觉能回答你的问题..........