- •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 ) , то можна буде наочно побачити , що
всі три потоки мають можливість виконувати свої дії одночасно , просто більш
високий пріоритет дозволяє виконувати їх частіше.
