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