
- •1. Історія створення Java.
- •2. Історія розвитку Java
- •3.Опишіть поняття “об’єкт”
- •4. Опишіть поняття “клас”
- •5. Опишіть типи відношень між класами
- •6. Переваги і недоліки об’єкто-зорієнтованого програмування
- •7. Опишіть правила побудови ідентифікаторів мови Java, наведіть приклади
- •8. Поняття літералів. Приклади
- •9. Оператори та операції в мові Java
- •11. Типи даних у мові Java
- •12. Клас Object
- •13. Клас String
- •14. Клас Class
- •15. Імена в Java
- •16. Пакети в Java
- •17. Область видимості імен
- •18.Об’ява класів у Java
- •19.Приведення типів у Java
- •21.Приведення посилальних типів даних.
- •22.Приведення до рядка.
- •23.Заборонені приведення.
- •24.Застосування приведення типів.
- •25.Статичні елементи.
- •26. Ключові слова this і super.
- •27. Ключове слово abstract.
- •28. Поняття інтерфейсів.
- •29. Поліморфізм.
- •30. Масиви в Java.
- •31. Приведення типів для масивів.
- •32. Клонування масивів.
- •33. Керування ходом виконання програми.
- •34. Нормальне і перерване виконання операторів.
- •35. Блоки і локальні змінні.
- •36. Порожній оператор.
- •38. Синтаксис оператора if.
- •39. Синтаксис оператора switch.
- •40. Керування циклами.
- •41.Синтаксис оператора while
- •42.Ситаксис оператора do
- •43.Синтаксис оператора for
- •44.Оператори break I continue
- •45.Іменовані блоки
- •46. Оператор return
- •47. Оператор synchronized
- •48. Помилки при роботі програми. Виняткові ситуації
- •48. Помилки при роботі програми. Виняткові ситуації
- •49.Причини виникнення помилок
- •50.Обробки виняткових ситуацій
- •51.Конструкція try-catch-finally
- •52.Використання оператора throw
- •53.Виняткові ситуації, які перевіряються і які не перевіряються
- •54.Створення класів користувача обробки виняткових ситуацій
- •55.Поняття потокв в Java
- •56.Базові класи для роботи з потоками
- •57.Класс Thread
- •58. Інтерфейс Runnable
- •60. Потоки-демони
- •61.Синхронізація роботи потоків.
- •62.Класи обгортки для примітивних типів.
- •63.Клас Math.
- •66.Клас Calendar.
- •67.Клас TimeZone.
- •68. Колекції java
- •69.Інтерфейс Collection.
- •70.Інтерфейс Set.
- •71.Інтерфейс List.
- •72.Інтерфейс Map.
- •73.Інтерфейс SortedSet.
- •74.Інтерфейс SortedMap.
- •75.Інтерфейс Iterator.
- •76.Конкретні класи колекцій.
- •77.Клас Properties.
- •78. Інтерфейс Comparator.
- •79.Клас BitSet.
- •80.Клас Random.
- •81.Система введення/виведення. Потоки даних.
- •82.Класи реалізації потоків даних.
- •84. Робота із файловою системою.
- •59. Робота із пріоритетами потоків
84. Робота із файловою системою.
Взаємодія з файлової системою здійснюється через клас File з пакету java.io. Директорія розглядається як особливий файл.
Методи описують властивості файлу:
exists ( ) - визначає , чи існує реально файл;
isDirectory ( ) - чи є файл директорією ;
isFile ( ) - чи є файл звичайним файлом ( для деяких системних файлів результат буде false ) ;
length ( ) - розмір файлу;
isHidden ( ) - прихований чи файл;
lastModified ( ) - час останньої модифікації в мілісекундах минули з 1 січня 1970 ;
list ( ) , listFile ( ) - отримання вмісту директорії ( у вигляді імен або об'єктів типу File) .
Методи list ( ) і listFile ( ) можуть використовувати фільтр файлів - об'єкт реалізує інтерфейс FileFilter (або FilenameFilter ) . Більш менш звичний фільтр файлів можна реалізувати за допомогою регулярних виразів.
Методи роботи з файловою системою:
listRoots () - статичний метод, який повертає масив кореневих пристроїв (розділів);
createNewFile () - створення нового файлу, якщо він не існує;
delete () - видалення файлу;
mkdir (), mkdirs () - створення директорії;
renameTo () - перейменування файлу;
getFreeSpace () - розмір вільного місця на розділі в байтах;
getTotalSpace () - загальний розмір розділу;
getUsableSpace () - розмір доступного місця на розділі для поточної віртуалной машині
59. Робота із пріоритетами потоків
Розглянемо , як в Java потокам можна призначати пріоритети. Для цього в класі Thread
існують методи getPriority ( ) і setPriority ( ) , а також оголошені три константи:
Інтерфейс Runnable Стор. 5 з 24
MIN_PRIORITY
MAX_PRIORITY
NORM_PRIORITY
З назви очевидно, що їх значення описують мінімальне , максимально і нормальне ( за замовчуванням ) значення пріоритету.
Розглянемо наступний приклад:
public class ThreadTest implements Runnable {
public void run () {
double calc ;
for ( int i = 0 ; i < 50000 ; i + +) {
calc = Math.sin ( i * i ) ;
if ( i % 10 000 == 0 ) {
System.out.println ( getName ( ) + " counts " + i/10000 ) ;}}}
public String getName () {
return Thread.currentThread ( ) . getName ();}
public static void main ( String s []) {
/ / Підготовка потоків
Thread t [] = new Thread [ 3 ] ;
for ( int i = 0 ; i < t.length ; i + +) {
t [ i ] = new Thread ( new ThreadTest ( ) , " Thread" + i ) ;
}
/ / Запуск потоків
for ( int i = 0 ; i < t.length ; i + +) {
t [ i ] . start ();
System.out.println ( t [ i ] . GetName ( ) + " started " ) ;
}}}
У прикладі використовується кілька нових методів класу Thread:
• getName ( )
Зверніть увагу , що конструктору класу Thread передається два параметри . До
реалізації Runnable додається рядок . Це ім'я потоку , яке використовується тільки
для спрощення його ідентифікації . Імена декількох потоків можуть збігатися. Якщо
його не поставити , то Java генерує просту рядок виду " Thread -" і номер потоку
(обчислюється простим лічильником ) Саме це ім'я повертається методом getName ( ) .
Його можна змінити за допомогою методу setName ( ) .
Програмування на Java
Стор. 6 з 24 Базові класи для роботи з потоками
Rendered by www.RenderX.com • currentThread ( )
Цей статичний метод дозволяє в будь-якому місці коду отримати посилання на об'єкт
класу Thread , який представляє поточний потік виконання.
Можна бачити , що всі три потоки були запущені один за іншим , і почали проводити
обчислення. Видно також , що потоки виконуються без певного порядку , випадковим чином. Тим не менш, в середньому вони рухаються з однією швидкістю , ніхто не відстає і не догоняет.Введем в програму роботу з пріоритетам , розставимо різні значення для різних потоків і подивимося , як це позначиться на виконанні . Змінюється тільки метод main ( )
public static void main ( String s []) {
/ / Підготовка потоків
Thread t [] = new Thread [ 3 ] ;
for ( int i = 0 ; i < t.length ; i + +) {
t [ i ] = new Thread ( new ThreadTest ( ) , " Thread" + i ) ;
t [ i ] . setPriority ( Thread.MIN_PRIORITY +
( Thread.MAX_PRIORITY - Thread.MIN_PRIORITY ) / t.length * i ) ;
}
/ / Запуск потоків
for ( int i = 0 ; i < t.length ; i + +) {
t [ i ] . start ();
System.out.println ( t [ i ] . GetName ( ) + " started " ) ;
}
}
Формула обчислення пріоритетів дозволяє рівномірно розподілити всі допустимі значення для всіх запускаються потоки . Насправді , константа мінімального пріоритету має значення 1 , максимального - 10 , нормального - 5 . Так що в простих програмах можна явно користуватися цими величинами і вказувати в якості, наприклад , зниженого пріоритету значення 3 .
Результатом роботи буде :
Thread 0 startedThread 1 startedThread 2 startedThread 2 counts 0 ...
Потоки , як і раніше , стартують послідовно . Але потім відразу видно , що чим вище
пріоритет , тим швидше відпрацьовує потік . Проте дуже показово , що потік
з мінімальним пріоритетом ( Thread 0 ) проте отримав можливість виконати
одну дію раніше, ніж відпрацював потік з вищим пріоритетом ( Thread 1 ) . це
говорить про те , що пріоритети не роблять систему однопоточному , що виконує
одноразово лише один потік з найвищим пріоритетом . Навпаки , пріоритети
дозволяють одночасно працювати над кількома завданнями з урахуванням їх важливості.
Якщо збільшити параметри методу ( виконувати 500.000 обчислень , а не 50.000 , і виводити
повідомлення кожне 1000 обчислення , а не 10.000 ) , то можна буде наочно побачити , що
всі три потоки мають можливість виконувати свої дії одночасно , просто більш
високий пріоритет дозволяє виконувати їх частіше.