2014-01-06 1 views
2

Привет У меня есть следующий код. когда я использую переменные экземпляра я получаю выход следующим образом (Значения по умолчанию)Значения по умолчанию в java

int value: 0 
float value: 0.0 
String value: null 
Static int value: 0 

Но если я пытаюсь объявить локальную переменную и напечатать значение по умолчанию он дает ошибку, что переменная должна быть инициализирована. Может ли кто-нибудь объяснить мне причину, пожалуйста?

public class DefaultValues { 
    int a; 
    float b; 
    String c; 
    static int d; 
    public static void main(String[] args) {  
    int e;          // <---- 
    DefaultValues dv = new DefaultValues(); 
    System.out.println("int value: "+dv.a); 
    System.out.println("float value: "+dv.b); 
    System.out.println("String value: "+dv.c); 
    System.out.println("Static int value: "+d); 
    System.out.println("local int value: "+e); // <---- 
    } 
} 
+4

Локальные переменные не имеют значения по умолчанию. Они должны быть инициализированы до их использования. –

ответ

2

Только переменные экземпляра, статические переменные (класс) и компоненты массива инициализируются значениями по умолчанию.

Локальные переменные нельзя использовать, если они не инициализированы, поскольку они не назначены значениям по умолчанию.

+2

_are arrays_ Вы хотели сказать что-то еще? –

+0

Да ** Инициализатор массива создает массив и предоставляет начальные значения для всех его компонентов ** в соответствии с JLS. –

+0

О, теперь ваша точка зрения. Благодаря! –

1

От Java Language Specification 3.0, 4.12.5 Начальные значения переменных:

Локальная переменная (§14.4, §14.14) должен быть явно присвоено значение перед его использованием, либо инициализации (§14.4) или назначение (§ 15.26), таким образом, который может быть проверен компилятором, используя правила для определенного назначения (§16).

1

Возможно, у нас есть неинициализированные локальные вары, но компилятор не разрешит использовать, если мы их явно не проинтегрируем. Это правило языка Java. См. JLS 4.12.5. Начальные значения переменных http://docs.oracle.com/javase/specs/jls/se7/html/jls-4.html

• локальной переменной (§14.4, §14.14) должен быть явно присвоено значение перед его использованием, либо инициализации (§14.4) или назначение (§15.26), в способ, который может быть проверен с использованием правил для определенного назначения (§16).

1

Для членов класса (переменная) JVM поместит значения по умолчанию или инициализирует их значением по умолчанию, для локальных переменных, которые оно назначает вам и начальное значение перед доступом к переменной.

От Doc:

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

Вы можете проверить значения по умолчанию для разных типов данных в Primitive Data Types для получения дополнительной информации о значениях по умолчанию для членов класса.