2015-06-09 5 views
-1

Почему int face; не инициализирован в этом коде? И когда я должен использовать или не использовать инициализацию?Когда мы должны использовать/не использовать инициализацию в Java?

import java.util.Random; 

public class RandomIntegers 
{ 
    public static void main(String[] args) 
    { 
     Random randomNumbers = new Random(3); 
     int face; 

     for(int counter = 1; counter <=20; counter++) 
     { 

      face = 1 + randomNumbers.nextInt(6); 

      System.out.printf("%d ", face); 

      if(counter % 5 ==0) 
       System.out.println(); 
     } 
    } 
} 
+0

Стоит отметить, что инициализация полей экземпляров, хотя по существу, не является операцией (нет логического изменения для кода, а не для инициализации), используемого (и, возможно, все же), результатом чего является другой, более крупный скомпилированный код. – jdv

ответ

1

На самом деле, это интересный вопрос.

Компилятор видит, что face используется только в цикле for. Поэтому, если введен цикл for (который будет в этом случае), face всегда будет инициализироваться там, где он используется.

Если вы используете face вне цикла, вы получаете сообщение об ошибке, поскольку компилятор считает, что цикл, возможно, не был выполнен (хотя в вашем случае это всегда есть).

-2

Не всегда необходимо назначать значение при объявлении поля. Поля, объявленные, но не инициализированные, будут установлены на разумный по умолчанию компилятор. Вообще говоря, это значение по умолчанию будет равно нулю или нулевому, в зависимости от типа данных. Однако, полагаясь на такие значения по умолчанию, обычно считается плохой стиль программирования - вы всегда должны инициализировать переменные для удобочитаемости и избегать путаницы/ошибок.

int инициализируется значением 0 по умолчанию.

С учетом этого вы должны знать, что локальные переменные несколько отличаются; компилятор никогда не присваивает значение по умолчанию неинициализированной локальной переменной. Если вы не можете инициализировать свою локальную переменную там, где она объявлена, не забудьте присвоить ей значение, прежде чем пытаться его использовать. Доступ к неинициализированной локальной переменной приведет к ошибке времени компиляции.

Oracle документация: https://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html

+1

«Поля, объявленные, но не инициализированные, будут установлены разумным по умолчанию компилятором» ... это не всегда так. Локальные переменные и поля экземпляров, объявленные «final», не получают начальное значение JVM и должны быть инициализированы перед использованием. См .: http://stackoverflow.com/questions/415687/why-are-local-variables-not-initialized-in-java – scottb

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