2013-05-26 4 views
1

Если бы я сделать что-то такое, как:Начальные значения Java?

public class Game 
{ 
    private boolean RUNNING = true; 

    Game() 
    { 
    } 

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

В какой момент времени будет RUNNING = true?

изменить: для ясности, в какой момент в программе будет установлено значение true. ex: перед конструктором, после конструктора и т. д.

+8

все время? ... –

+0

Это хороший вопрос. Когда вы создаете объект, есть определенный порядок, как вещи инициализируются. Извините, это не просто «все время». –

+0

Это то, о чем я просил. Приказ, я имею в виду. – Lemmons

ответ

4

Он будет установлен в true перед конструктором. Вы можете использовать его в конструкторе как true.

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

точно так же, как

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

На самом деле, comiler будет двигаться инициализацию в начале конструктора. Затем значение будет задано при создании экземпляра объекта этого класса.

0

Когда конструктор вызывается с использованием оператора new, все нестатические члены класса инициализируются перед выполнением кода внутри конструктора. Вы можете использовать отладчик и вступить в этот вызов и посмотреть, где он идет первым. Статические элементы инициализируются при загрузке класса и в первый раз доступны (см. Этот question для получения более подробной информации о статических членах).

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() 
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 
      } 
    } 

Я надеюсь, что эта интуиция отвечает на ваш вопрос ..........

Смежные вопросы