Top.Mail.Ru

Перечень уроков по Java

22. Область определения и время существования переменных

Область определения задает видимость переменной и определяет время существования переменной.

Основное правило: переменные, объявленные внутри области определения, не видны - недоступны коду, который находится за пределами этой области. Это ведет к защите переменной от случайного изменения.

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

В Java область определения и время существования переменных определяется положением фигурных скобок {  }.

Основные определения и свойства:

  • Блок - область кода ограниченная фигурными скобками, например

{

int a;

int b;

...   

    

}   

  • Блок задает область определения переменных и объектов. При открытии каждого нового блока мы создаем новую область определения.
  • Java как и язык C++ допускает вложенные блоки - объявления блока внутри другого блока

{

int a;

int b;

   {

   int c;

   int d;

   ...   

   }

...   

}   

  • В отличие от C++ в Java нельзя объявлять переменные с одинаковыми именами в двух вложенных блоках, например

public static void main(String[] args) {

int i=1;

for(int i=10; i< 15; i++  ) //ошибка переменная i уже определена в методе main(String[])

{

}

}

  • Переменные, объявленные во внешнем блоке, будут видны коду во внутреннем блоке.

{

      int a = 1;

{

 int b;

 System.out.println(" a= "+a);  // будет выведено: a = 1

}

}  

 

  • Многие языки программирования имеют локальную и глобальную область определения. В java две основных области определения - это определяемая классом и определяемая методом.
  • Переменные создаются при входе в их область определения и уничтожаются при выходе из нее. Поэтому время существования переменной ограничено ее областью определения.
 
Время существования объектов

В Java объекты имеют другое время существования по сравнению с примитивными данными. Для работы  с объектами нам необходимо иметь ссылку на объект и сам объект. Объект создается оператором new. Вот пример. Пусть имеем класс точек Point:

public class Point {

 private int x;

 private int y;

 }

//Далее если  в блоке кода программы мы запишем

//блок

{

Point p;        //объявлена ссылочная переменная с именем p;

p = new Point();//здесь выполнены две операции:

                //с помощью оператора new создан объект

                //выполнено связывание объекта со ссылочной переменной

. . .

} // конец блока

Ссылка p будет уничтожена при выходе из блока. Объект  p продолжит оставаться в памяти, но будет недоступен, поскольку на него больше нет ссылки и в последующем будет автоматически уничтожен сборщиком мусора.