- •1. История создания и развития Java.
- •2.Основные версии и продукты Java.
- •3.Методология процедурно-ориентированного программирования и объектно-ориентированного программирования
- •4. Объекты.
- •5. Типы отношений между классами.
- •6.Достоинства и недостатки ооп.
- •7. Работа с операторами.
- •8. Типы данных.
- •9.Имена. Простые и составные имена. Элементы
- •10.Пакеты. Элементы пакета. Платформенная поддержка пакетов. Уникальность имен пакетов.
- •11. Область видимости имен.
- •12.Соглашения по именованию.
- •13. Объявление классов.
- •14. Преобразование типов.
- •15. Объектная модель в Java.
- •16. Интерфейсы.
- •17.Полиморфизм.
- •18. Массивы как тип данных в Java. Преобразование типов для массивов.
- •19. Клонирование.
- •20. Исключения.
- •21. Управление циклами.
- •22. Обработка пользовательских событий.
- •23. Апплеты.
13. Объявление классов.
Объявление класса состоит из заголовка и тела класса.
Заголовок класса: Вначале указываются модификаторы класса. Допустимым является public, либо его отсутствие - доступ по умолчанию. Класс может быть объявлен как final. В этом случае не допускается создание наследников такого класса. На своей ветке наследования он является последним. Класс String и классы-
обертки, например, являются final-классами. После списка модификаторов указывается ключевое слово class, а затем имя класса - корректный Java-идентификатор. Указанный идентификатор становится простым именем класса. Полное составное имя класса строится из полного составного имени пакета, в котором он объявлен (если это не безымянный пакет), и простого имени класса, разделенных точкой. Область видимости класса, где он может быть доступен по своему простому имени - его пакет.
Далее заголовок может содержать ключевое слово extends, после которого должно быть указано имя (простое или составное) доступного не-final класса. В этом случае объявляемый класс наследуется от указанного класса. Если выражение extends не применяется, то класс наследуется напрямую от Object. Выражение extends Object допускается и игнорируется.
Тело класса: Тело класса может содержать объявление элементов (members) класса:
• полей;
• методов;
• внутренних типов (классов и интерфейсов);
и остальных допустимых конструкций:
• конструкторов;
• инициализаторов;
• статических инициализаторов.
14. Преобразование типов.
Для простых типов расширение означает, что осуществляется переход от менее емкого типа к более емкому. Например, от типа byte (длина 1 байт) к типу int (длина 4 байта). Такие преобразования безопасны в том смысле, что новый тип всегда гарантированно вмещает в себя все данные, которые хранились в старом типе, и таким образом не происходит потери данных. Именно поэтому компилятор осуществляет его сам, незаметно для разработчика:
byte b=3;
int a=b;
В последней строке значение переменной b типа byte будет преобразовано к типу переменной a (то есть, int) автоматически, никаких специальных действий для этого предпринимать не нужно.
Следующие 19 преобразований являются расширяющими:
* от byte к short, int, long, float, double
* от short к int, long, float, double
* от char к int, long, float, double
* от int к long, float, double
* от long к float, double
* от float к double
Обратите внимание, что нельзя провести преобразование к типу char от типов меньшей или равной длины (byte, short), или, наоборот, к short от char без потери данных. Это связано с тем, что char, в отличие от остальных целочисленных типов, является беззнаковым.
Тем не менее, следует помнить, что даже при расширении данные все-таки могут быть в особых случаях искажены.
Следующие 23 преобразования являются сужающими:
* от byte к char
* от short к byte, char
* от char к byte, short
* от int к byte, short, char
* от long к byte, short, char, int
* от float к byte, short, char, int, long
* от double к byte, short, char, int, long, float
При сужении целочисленного типа к более узкому целочисленному все старшие биты, не попадающие в новый тип, просто отбрасываются. Не производится никакого округления или других действий для получения более корректного результата:
print((byte)383);
print((byte)384);
print((byte)-384);
Результатом будет:
127
-128
-128
