2015-09-16 2 views
0

В Java, если мы объявляем примитивную переменную (не локальную), такую ​​как int, float и т. Д., И не инициализируем их, тогда они инициализируются значениями по умолчанию. Можем ли мы добиться чего-то подобного для ссылочных переменных? Например, если у меня есть класс сотрудника, который содержит две переменные int и в другом классе, если я создал только ссылку класса employee, возможно ли, что переменные int инициализируются нулем?Присвоить значение по умолчанию ссылочной переменной

+2

Можете привести пример кода? Терминология, которую вы используете, довольно неточна, настолько, что трудно ответить на ваш вопрос. –

+0

Я вижу там может быть недоразумение между ссылкой и объектом. В основном ссылки и объекты разные. ссылки содержат объект того же или подтипа. ссылки получают пространство в стеке, а объект получает место в куче. И я хотел бы направить вас к Google, чтобы собрать больше информации об этом. –

+0

Будьте уверены, вы не будете читать мусор, случайные данные в программе java. сначала все сначала обнуляется. – ZhongYu

ответ

2

В Java, если мы объявляем примитивную переменную (не локальную), такую ​​как int, float и т. Д. И не инициализируем их, тогда они инициализируются значениями по умолчанию.

Нет, они этого не делают. Поля do, оба поля экземпляра и поля класса, но не переменные.

Можем ли мы добиться чего-то подобного для ссылочных переменных?

Поля ввода совпадают. Значение, которое они инициализируют, составляет null.

Например, если у меня есть класс сотрудника, который содержит две переменные int и в другом классе, если я создал только ссылку класса employee, возможно ли, что переменные int инициализируются нулем?

Если по «создал ссылку» вы имеете в виду, что вы создали Employee экземпляр, то все поля в этом случае будут инициализированы по умолчанию, если Employee конструктор не дает им другое значение.

0

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

public class Main { 
    boolean flag; 
    void foo(){ 
     System.out.println(flag); 
    } 
} 

компилирует и foo() метод напечатает false, а что-то вроде этого

public class Main2 { 
    void foo(){ 
     boolean flag; 
     System.out.println(flag); 
    } 
} 

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

Что вы можете сделать, это проектирование свой класс таким образом, что, когда инициализируется класс, значение assigne его переменных экземпляра, что-то вроде

public class Main { 
    boolean flag; 
    { 
     flag=true; 
    } 
    void foo(){ 
     System.out.println(flag); 
    } 
} 
0

Поля инициализируются в null, если они из какой-то «тип» (кроме примитивных типов), в любом случае, если вы укажете значения по умолчанию в своем конструкторе по умолчанию для этого класса, в частности, вы можете переопределить значения по умолчанию для null.

final class Employee { 
    private String firstName; 
    private String lastName; 

    // You can have more constructors here 

    public Employee() { 
    firstName = "Default Value for First Name"; 
    lastName = "Default Value for Last Name"; 
    } 

    // Getters, Setters 
} 
Смежные вопросы