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

54.Створення класів користувача обробки виняткових ситуацій

Як вже зазначалося раніше , допускається створення власних класів винятків. для

цього досить створити свій клас , успадкувавши його від будь-якого класу є

дочірнім по відношенню до ajav.lang.Throwable . ( Або від самого Throwable )

Приклад .

  public class UserException extends Exception {

  public UserException () {

   super ();

  }

  public UserException ( String descry ) {

super ( descr ) ;

}

 }

відповідно збуджуватися дане виключення буде наступним чином :

  throw new UserException ( " Додатковий опис " ) ;

Розглянемо інший приклад. У мові С існує конструкція assert , яка часто

використовується для цілей налагодження. Розглянемо як в JAVA можна відтворити подібну конструкцію за допомогою механізму винятків.

public class AssertionException extends RuntimeException {

public AssertionException () {

super ( " Asertion Exception " ) ;

}

  public AssertionException ( String descr ) {

super ( descr ) ;

}

}

public class Assertion {

 public static Boolean ASSERTION_ON = true ;

 private Assertion () { } ;

public static void assert ( boolean flag )

throws AssertionException {

if ( ASSERTION_ON && flag ) {

 throw new AssertionException ( ) }}

public static void assert ( boolean flag , Sring msg )

throws AssertionException {

if ( ASSERTION_ON && flag ) {

 throw new AssertionException ( msg ) } }}

Основна ідея використання даного класу полягає в тому , що б в критичних ділянках програми вбудувати перевірку деяких граничних умов і , в разі їх невиконання порушувати виняткову сітуацію.Напрімер

Assertion.assert ( x <= xMinValue , " X too large " ) ; У даному випадку , якщо величина змінної x буде менше якогось мінімуму буде збуджена виняткова ситуація AssertionException . Т.к. це необроблюваних

виняток , то використання блоку try {} catch ( ) не є обов'язковим. Однак , якщо ми все таки опрацюємо цю виняткову ситуацію , то можемо видати ( наприклад на консоль , або в лог -файл) повідомлення про помилку.

try {

 ...

 / / Виклик коду використовує Assertion

 ...

} cacth ( AssertionException ae ) {

 System.err.println ( ae ) ;}

55.Поняття потокв в Java

Мова Java є однією з небагатьох мов програмування, які містять засоби

підтримки потоків. У мові Java потоки зазвичай використовуються для того,

щоб аплети могли виконувати якісь дії в той час, як web-браузер продовжує

свою роботу, проте потоки можна застосувати в будь-якій програмі при

необхідності паралельного виконання декількох завдань. Так, наприклад, при створенні колективом програмістів великого і складного програмного продукту, як правило, окремі модулі програми розробляються паралельно окремими програмістами або групами програмістів. В цьому випадку процес розробки кожного модуля програми можна представити як окремий потік. Реалізація використання потоків в програмах може виконуватися двома способами:

•розширенням класу Thread;

•реалізацією інтерфейсу Runnable.

При першому способі необхідно оголосити новий клас, який розширює клас Thread (пакет java.lang), наприклад:

public class Greatrace extends Thread При цьому стають доступними всі методи даного класу. Новий клас, який розширює Thread, повинен перевизначити метод метод run(), який є вхідною точкою для нового потоку. Також новий клас має викликати метод start() для

запуску нового потоку. Зазвичай, коли необхідно, щоб даний клас був розширенням деякого іншого класу і в нім необхідно реалізувати потоки, попередній підхід не можна

застосувати, оскільки, як вже вказувалося, в мові Java немає множинного

наслідування. Для вирішення цієї проблеми для даного класу потрібно реалізувати інтерфейс Runnable, наприклад:

public class Greatrace extends Applet implements Runnable Інтерфейс Runnable має тільки один метод public void run(), який є невизначений. Коли створюється клас, що реалізовує інтерфейс Runnable, він повинен визначити метод run(). Саме в цьому методі міститься код, який виконує фактичну роботу, покладену на конкретний потік.Створити потік можна за допомогою одного з наступних конструкторів: public Thread()—створюється новий потік, який буде запускати потоки за допомогою виклику методу run() поточного об'єкту Thread. public Thread(String name)—даний конструктор аналогічний попередньому, але створює новий потік з заданим іменем name.

public Thread(Runnable target)—даний конструктор створює новий потік, де в target вказується екземпляр класу, який реалізує інтерфейс Runnable. Він буде визначати де почнеться виконання потоку (буде викликатися метод run() вказаного цільового об'єкту).

public Thread(Runnable target, String name)—конструктор аналогічний попередньому, але задає ім’я нового потоку через name.

В наступних конструкторах:

public Thread(ThreadGroup group, String name)

public Thread(ThreadGroup group, Runnable target)

public Thread(ThreadGroup group, Runnable target, String name)

параметр group - призначений для переміщення нового об’єкту Thread в дерево об'єктів даного класу. Якщо опустити даний параметр або привласнити йому значення null, новий об'єкт класу Threadстане членом поточної групи потоків Threadgroup. Метод public String toString() повертає рядкове представлення потоку, включаючи ім’я потоку, пріоритет і ім’я групи. Наступні методи дозволяють отримати ім’я потоку або встановити ім’я потоку:

public final String getName()

public final void setName(String name)

Запуск потоку виконує метод:

public void start() throws IllegalThreadStateException виключення спрацьовує, якщо робиться спроба запуску вже запущеного потоку. Для зупинки потоку рекомендується потоку, що зупиняється, привласнити значення null, наприклад:

Thread mythread;

myThread.start(); // Запуск потоку

myThread = null; // Зупинка або завершення потоку

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

з груп програмістів доведеться чекати закінчення роботи над модулем іншої групи. Для такого узгодження дій використовується метод: public final void join() throws InterruptedException

Методу join можна також передати значення тайм-ауту, використовуючи його

варіанти:

public final syncronized void join(long millis) throws InterruptedException

public final syncronized void join(long millis, int nanos)

throws InterruptedException.

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