Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Шпори JAVA.docx
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
178.34 Кб
Скачать

23.Заборонені приведення.

До заборонених перетворень відносяться: переходи від будь-якого посилального типу до примітивного, від примітивного - до посилального(крім перетворень до рядка). Тип boolean - не можна привести ні до якого іншого типу, крім boolean (за винятком приведення до рядка). Також, неможливо привести один до одного типи, що знаходяться не на одній, а на сусідніх гілках дерева успадкування.

Спроба здійснити заборонене перетворення викличе помилку компіляції.

24.Застосування приведення типів.

Приведення типів може застосовуватись в таких випадках:

• присвоєння значень змінним (assignment). Не всі переходи допустимі при такому

перетворенні - обмеження обрані таким чином, щоб не могла виникнути помилкова ситуація.

• виклик методу. Це перетворення застосовується до аргументів викликаного методу

або конструктора. Допускаються майже ті ж переходи, що і для присвоєння значень.

Таке приведення ніколи не породжує помилок. Також приведення здійснюється

при поверненні значення з методу.

• явне приведення. У цьому випадку явно вказується, до якого типу потрібно привести

початкове значення. Допускаються всі види перетворень крім привидів до рядка і заборонених. Може виникати помилка часу виконання програми.

• оператор конкатенації виробляє перетворення до рядка своїх аргументів.

• числове розширення (numeric promotion). Числові операції можуть зажадати

зміни типу аргументу. Це перетворення має особливу назву - promotion, так як вибір цільового типу може залежати не тільки від вихідного значення, але і від другого аргументу операції .

25.Статичні елементи.

При створенні об'єктів, з одного боку, кожен об'єкт має свої власні незалежні поля даних, з іншого - всі об'єкти одного класу використовують одні й ті ж методи. Методи класу створюються і розміщуються в пам’яті комп'ютера всього один раз - при створенні класу, так як немає ніякого сенсу тримати в пам'яті копії методів для кожного об'єкта, оскільки у всіх об'єктів методи однакові. А оскільки набори значень полів у кожного об'єкта свої, поля об'єктів не повинні бути загальними. Однак існує ряд ситуацій, коли необхідно, щоб всі представники одного класу включали в себе будь-яке однакове значення. Для цих цілей служать статичні елементи класу.

Статичний елемент класу може розглядатися як глобальна змінна або функція, доступна тільки в межах області класу. Для визначення статичних полів і методів використовується ключове слово static.

Статичний елемент даних розділяється всіма представниками даного класу. Тобто існує тільки один екземпляр змінної незалежно від числа створених представників. Пам'ять під статичний елемент виділяється, навіть якщо не існує жодних представників класу.

Визначення статичних полів класу відбувається не так, як для звичайних полів. Звичайні поля оголошуються (компілятору повідомляється ім'я і тип поля) і визначаються (компілятор виділяє пам'ять для зберігання поля) за допомогою одного оператора. Для статичних полів ці дві дії виконуються двома різними операторами: оголошення поля знаходиться всередині класу, а визначення, як правило, розташовується поза класу і часто являє собою визначення глобальної змінної. Якби визначення статичного поля класу знаходилося всередині класу (як у ранніх версіях C++), то це порушило б принцип, відповідно до якого визначення класу не повинно бути пов'язано з виділенням пам'яті. Помістивши визначення статичного поля поза класом, ми забезпечили одноразове виділення пам'яті під це поле, до того як програма буде запущена на виконання, і статичне поле в цьому випадку буде доступним всьому класу.

Працюючи зі статичними полями, легко зробити помилки, які компілятор не в силах буде розпізнати. Якщо ви оголосите статичне поле класу, але забудете його визначити, то компілятор не видасть попереджуючого повідомлення. Крім статичних полів, клас може мати і статичні функції. Доступ до статичних функцій може бути здійснений просто через ім'я класу, без створення представника класу, тобто статичні елементи-функції класу не асоціюються з окремими представниками класу. Іншими словами, при виклику їм не передається покажчик this. З цього випливає, що:

• статична функція-елемент може викликатися незалежно від того, існує чи ні якої-небудь представник класу;

• статична функція-елемент може звертатися тільки до статичних елементів даних класу і викликати тільки інші статичні функції-елементи класу;

• статична функція-елемент не може оголошуватися як virtual.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]