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 продолжит оставаться в памяти, но будет недоступен, поскольку на него больше нет ссылки и в последующем будет автоматически уничтожен сборщиком мусора.

 

 

 

 

 

 

 

 

Добавить комментарий
  • Комментарии не найдены
 
Our website is protected by DMC Firewall!