В Java, почему можно было бы инициализировать международную переменную с 0, когда он будет присвоен 0 только по умолчанию при объявлении?

Какой цели это служит?

Просто считайте пример в книге, где автор сделал так.

int numOfGuesses=0;
10
задан ucMedia 21 April 2018 в 17:26
поделиться

3 ответа

Автоматическое присвоение нуля применяется только к членам, но не к локальным переменным. Если это локальная переменная и опущено = 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();
    }
}

Для членов я склоняюсь к явному присвоению нуля, если мой код использует тот факт, что начальное значение равно нулю, и опускаю присвоение, если мой код не использует начальное значение (например, если значение присваивается в конструкторе или где-то еще). Результат одинаков в любом случае, так что это просто вопрос стиля.

21
ответ дан 3 December 2019 в 15:35
поделиться

Компиляция и среда выполнения Java отличаются.

При запуске программы все классы загружаются с помощью загрузчиков классов, и они делают следующее:

Это делается, когда класс используется впервые . Их порядок выполнения определяется их порядком в коде.

  • запускать статические блоки

     static 
     // здесь что-то делать 
    } 
     
  • инициализировать статические переменные

    public static int number;

Это будет инициализирован нулем 0;


Следующая группа выполненных инициализаций - это когда создает объект . Их порядок выполнения определяется их порядком в коде.

  • запустить нестатический блок

     
     // здесь что-то сделать 
    } 
     
  • инициализировать нестатические (экземпляр) переменные

    public int instance_number ;


И это когда и почему существует инициализация по умолчанию! Это неверно для методов, потому что у них нет аналогичного механизма, как у классов. Таким образом, в основном это означает, что у вас будет для инициализации ЯВНО каждой переменной метода. введите здесь код

3
ответ дан 3 December 2019 в 15:35
поделиться

Это более ясно; некоторым нравится. Обратите внимание, что это относится только к полям - необходимо инициализировать локальные переменные; по умолчанию нет.

4
ответ дан 3 December 2019 в 15:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: