Программирование на JAVA

Навигация

Лекция 1. Что такое Java? История создания

Лекция 2. Основы объектно-ориентированного программирования

Лекция 3. Лексика языка

Лекция 4. Типы данных

Лекция 5. Имена. Пакеты

Лекция 6. Объявление классов

Лекция 7. Преобразование типов

Лекция 8. Объектная модель в Java

Лекция 9. Массивы

Лекция 10. Операторы и структура кода. Исключения

Лекция 11. Пакет java.awt

Лекция 12. Потоки выполнения. Синхронизация

Лекция 13. Пакет java.lang

Лекция 14. Пакет java.util

Лекция 15. Пакет java.io

Лекция 16. Введение в сетевые протоколы

Реклама :





Область видимости элементов классов или интерфейсов — это все тело типа, в котором они объявлены. Если обращение к этим эле­ментам происходит из другого типа, необходимо воспользоваться со­ставным именем. Имя может быть составлено из простого или состав­ного имени типа, имени объектной переменной или ключевых слов super или this, после чего через точку указывается простое имя эле­мента.

Аргументы метода, конструктора или обработчика ошибок видны только внутри этих конструкций и не могут быть доступы извне.

Область видимости локальных переменных начинается с момента их инициализации и до конца блока, в котором они объявлены. В отличие от полей типов, локальные переменные не имеют значений по умолчанию и должны инициализироваться явно.

int х;

for (int i=0; К10; i++) { int t=5+i;

}

// здесь переменная t уже недоступна, // так как блок, в котором она была объявлена, // уже завершен, а переменная х еще недоступна, // так как пока не была инициализирована

Определенные проблемы возникают, когда происходит перекрытие областей видимости и возникает конфликт имен различных конструкций языка.

"Затеняющее" объявление (Shadowing)

Самыми распространенными случаями возникновения конфликта имен являются выражение, импортирующее пакет, и объявление локальных переменных, или параметров методов, конструкторов, обработчиков ошибок. Импорт пакета подробно рассматривался в этой главе. Если им­портированный и текущий пакеты содержат одноименные типы, то их об­ласти пересекаются. Как уже говорилось, предпочтение отдается типу из текущего пакета. Также рассказывалось о том, как эту проблему решать.

Перейдем к проблеме перекрытия имен полей класса и локальных пе­ременных. Пример:

class Human { int age; //возраст int getAgeO { return age;

}

void setAge(int age) { age=age; // ???

}

}

В классе Human (человек) объявлено поле age (возраст). Удобно оп­ределить также метод setAge(), который должен устанавливать новое зна­чение возраста для человека. Вполне логично сделать у метода setAge() °Дин входной аргумент, который также будет называть age (ведь в качест-Ве этого аргумента будет передаваться новое значение возраста). Получа­ется, что в реализации метода setAge() нужно написать age=age, в пер­вом случае подразумевая поле класса, во втором - параметр метода