2016-12-18 5 views
-1

Я не уверен в определении декларации и инициализации. И когда устанавливается Инициализация значений по умолчанию.Java: создание объекта за 3 шага (декларация, распределение/инициализация, присвоение)

1) Например Декларация объектного скалистой (класс Dog):

Dog rocky; 

Это создает только запись в стеке и нет ссылки?

.

2) Создание экземпляра собаки:

new Dog(); 

Распределение памяти в Heap, Значения по умолчанию Инициализация (переменная legs к 0), создать Reference.

Если у меня нет конструктора: компилятор создает конструктор по умолчанию. Он пуст? Конструктор и Значения по умолчанию инициализации должны быть разными коленкор и один из возможных Instance Initializer (следующий Instance Initializer Блок и Конструктора).

.

3) Назначение: положить ссылочное значение в стек?

rocky = new Dog(); 

Я прав?

Благодаря

Пример:

class Dog 
{ 
    int legs; 

    Dog() 
     { 
      System.out.println("constructor invoked"); 
     } 
} 

public class Foo 
{ 
    public static void main(String[] args) 
     { 
      Dog rocky; 

      new Dog(); 

      rocky = new Dog(); 
     } 
} 

ответ

0

Следующая выделяет память для указателя на Dog объекта:

Dog rocky; 

Следующая выделяет память для Dog объекта:

new Dog(); 

И следующий выделяет память для Dog указателя и Dog объект и устанавливает значение указателя на ячейку памяти вновь созданного Dog объекта:

Dog rocky = new Dog(); 

-

Компилятор пишет инициализация по умолчанию в каждый сконструированный вами конструктор. Если вы его не определяете, компилятор создает значение по умолчанию. Пример:

int legs = 4; 

будут преобразованы в

int legs; 
public Dog() { 
    legs = 4; 
} 

по умолчанию inizialisations В первые заявления в конструкторе.

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

  • Нет связанных вопросов^_^