Какой цели это служит?
Просто считайте пример в книге, где автор сделал так.
int numOfGuesses=0;
Автоматическое присвоение нуля применяется только к членам, но не к локальным переменным. Если это локальная переменная и опущено = 0
, то эта переменная не имеет никакого значения, даже нулевого. Попытка использовать значение до того, как оно будет присвоено, приведет к ошибке компиляции. Например, этот код пытается использовать неинициализированную локальную переменную:
public class Program
{
public static void main(String[] args)
{
int numOfGuesses; // local variable
System.out.println(numOfGuesses);
}
}
и выдает ошибку компиляции:
Program.java:6: variable numOfGuesses might not have been initialized
System.out.println(numOfGuesses);
В то время как этот код, использующий член, работает и выводит ноль:
public class Program
{
int numOfGuesses; // member variable
public void run()
{
System.out.println(numOfGuesses);
}
public static void main(String[] args)
{
new Program().run();
}
}
Для членов я склоняюсь к явному присвоению нуля, если мой код использует тот факт, что начальное значение равно нулю, и опускаю присвоение, если мой код не использует начальное значение (например, если значение присваивается в конструкторе или где-то еще). Результат одинаков в любом случае, так что это просто вопрос стиля.
Компиляция и среда выполнения Java отличаются.
При запуске программы все классы загружаются с помощью загрузчиков классов, и они делают следующее:
Это делается, когда класс используется впервые . Их порядок выполнения определяется их порядком в коде.
запускать статические блоки
static
// здесь что-то делать
}
инициализировать статические переменные
public static int number;
Это будет инициализирован нулем 0;
Следующая группа выполненных инициализаций - это когда создает объект . Их порядок выполнения определяется их порядком в коде.
запустить нестатический блок
// здесь что-то сделать
}
инициализировать нестатические (экземпляр) переменные
public int instance_number ;
И это когда и почему существует инициализация по умолчанию!
Это неверно для методов, потому что у них нет аналогичного механизма, как у классов.
Таким образом, в основном это означает, что у вас будет для инициализации ЯВНО каждой переменной метода. введите здесь код
Это более ясно; некоторым нравится. Обратите внимание, что это относится только к полям - необходимо инициализировать локальные переменные; по умолчанию нет.