Створення, компіляція і виконання java програм - підручник програмування на java
Ключовий момент: ви зберігаєте вихідний код Java програми в файл з розширенням .java і компілюєте його в файл з розширенням .class. Файл .class виконується віртуальною машиною Java.
Перед тим як програма може бути виконана, її необхідно створити і скомпілювати. Якщо ваша у вашій програмі виникли помилки компіляції, вам необхідно змінити програму, щоб виправити їх, а потім перекомпілювати її. Якщо у вашій програмі виникли помилки виконання, або вона не призводить до правильного результату, вам необхідно змінити програму, перекомпіліровать її і запустити знову. Цей процес і є створенням (розробкою) програми.

Увага. файл з вихідним кодом повинен мати розширення .java і мати в точності таке ж ім'я, як і ім'я публічного (public) класу. Наприклад, файл з вихідним кодом:
повинен називатися Welcome.java. оскільки ім'я public класу - Welcome.
Компілятор Java перетворює файл з вихідним кодом Java в файл з байткод Java. Наступна команда компілює Welcome.java:
Якщо немає синтаксичних помилок, компілятор генерує файл байкода з розширенням .class. Отже, наведена вище команда генерує файл з назвою Welcome.class.
Щоб мати можливість компілювати і запускати програми, ви повинні встановити JDK. Як це зробити описано в інструкціях:
Мова Java - це високорівнева мова програмування, але байткод Java - це низькорівневий мову. Байткод схожий на машинні інструкції, але нейтральний до архітектури (не залежить від архітектури) і може запускатися на будь-якій платформі, яка має віртуальну машину Java - Java Virtual Machine (JVM). На відміну від фізичної машини, віртуальна машина - це програма, яка інтерпретує байткод Java. Це одне з головних переваг Java: байткод Java може працювати на різних апаратних платформах і операційних системах. Вихідний код Java компілюється в байткод Java, а байткод Java інтерпретується віртуальною машиною Java. Ваш код Java може використовувати код бібліотеки Java. JVM виконує ваш рік разом з кодом з бібліотеки.
Виконати Java програму - це значить запустити байткод програми. Ви можете виконати байткод на будь-якій платформі з JVM, яка є інтерпретатором. Вона (віртуальна машина Java) переводить окремі інструкції байткода в цільової машинний мовної код. Це робиться послідовно - одна інструкція за раз, а не вся програм за один присід. Кожен крок негайно виконується, відразу після перекладу.
Наступна команда виконує байткод для програми, яка приведена вище:
На скріншоті нижче показаний процес компіляції і запуску:

Увага. не використовуйте розширення .class в команді, коли запускаєте програму. Використовуйте ІмяКласса для запуску програми. Якщо ви в командному рядку використовуєте ІмяКласса.class, то система буде намагатися працювати з файлом ІмяКласса.class.class.
Довідка. коли виконується Java програма, JVM починає з завантаження байткода класу в пам'ять, використовуючи програму під назвою завантажувач класів (class loader). Якщо ваша програма використовує інші класи, завантажувач класів динамічно завантажує їх перед тим, як вони знадобляться. Після завантаження класу, JVM використовує програму під назвою контролер байткода (bytecode verifier) для перевірки правильності байткода і перевірки, що байткод чи не порушує обмежень безпеки Java. Java забезпечує сувору захист, щоб переконатися, що файли класів Java не підроблені і не шкодять вашому комп'ютеру.
Педагогічна примітка. ваш інструктор може вимагати від вас використовувати пакети для організації програм. Наприклад, всі програми з цієї частини можна помістити в пакет chapter2. Подробиці про пакетах і просторі імен будуть розглянуті далі. Також подивіться розділ «Чому NetBeans завжди використовує package».
Типові помилки компіляції і запуску Java програм
Команда javac не знайдено
Якщо при запуску javac. тобто при спробі компіляції Java програми ви отримуєте помилку:
Це означає, що JDK не встановлено. Або встановлений, але не налаштовані змінні оточення. Способи виправлення очевидні:
- встановити JDK
- налаштувати змінні оточення
Якщо JDK встановлений, то можна обійтися без додавання змінної оточення. Для цього використовуйте абсолютний шлях до виконуваного файлу javac:
Помилка Class names are only accepted if annotation processing is explicitly requested
Якщо спробувати скомпілювати програму в такий спосіб:
то виникне помилка:
Причина помилки в тому - що ви забули вказати розширення файлу .java.
Не вдалося записати (error while writing)
Компіляція закінчується помилкою:
Причина помилки в тому, що у компілятора (javac) недостатньо прав на запис в той каталог, куди він намагається зберегти новий файл .class. Щоб помилка зникла: надайте компілятору додаткові права (запустіть від імені адміністратора), або зберігайте в папку, на яку у поточного користувача є права записи.
Помилка «class is public, should be declared in a file named»
який закінчується приблизною такою помилкою
означає, що ви неправильно назвали клас в вихідному коді програми. Ім'я класу має збігатися з ім'ям файлу. В даному випадку файл називається Welcome.java. а клас всередині програми названий Welcomee
Error: Could not find or load main class
Якщо спробувати запустити програму в такий спосіб:
то виникне помилка
Причина її в тому, що не потрібно було додавати до назви файлу розширення .class. Віртуальна машина автоматично додає розширення і в наведеному прикладі вона шукає файл Welcome.class.class
Помилка Error: Could not find or load main class при запуску Java програми по абсолютному шляху
Ця помилка можливо при запуску Java програми по абсолютному шляху:
Помилка виникає як в Windows, так і в Linux:
Якщо в терміналі ви перебуваєте в тій же директорії, що і файл, який ви запускаєте, то не потрібно вказувати абсолютний шлях. Наприклад, потрібно запускати так:

Якщо ж ви перебуваєте в іншій теці, то потрібно використовувати опцію -cp. після якої вказати шлях до каталогу, де розміщена програма, що запускається. А далі вказати файл, що запускається без розширення .class.
Як видно з скріншоту, командний рядок знаходиться в папці C: \ WINDOWS \ system32. Файл, який нам потрібно запустити, знаходиться в папці C: \ (корінь диска). Ми вказуємо після ключа -cp папку C: \. а потім пишемо ім'я файлу програми без розширення - Welcome.
Аналогічно потрібно поступати в Linux. Приклад команди:
Помилка Main method not found in class
Якщо при запуску ви зіткнулися з помилкою:
Це означає, що ви не вказали метод main. або написали слово неправильно (наприклад, Main замість main).
Особливості компіляції і запуску Java програм в Windows
Команда "javac" не є внутрішньою або зовнішньою командою, що виконується програмою або пакетним файлом
Ця помилка розглянута трохи вище. Для установки і налаштування змінних оточення в Windows зверніться до інструкції «Установка Java (JDK) в Windows».
Проблема з кодуванням в Java програмах в командному рядку Windows
Якщо ви написали програму, яка виводить кирилицю в консоль:
А як результат отримали крякозябламі:
Значить кодування, в якій виводить рядки ваша програма, відрізняється від кодування командного рядка Windows.
Є кілька способів виправити цю проблему. До речі, якщо для запуску консольних програм Java ви використовуєте NetBeans. то він виводить рядки в правильному кодуванні. У Linux ця проблема також відсутня. Якщо вам потрібно поміняти кодування на час, то ви можете виконати наступні команди:
Перевір себе:
- Яке розширення мають файли з вихідним кодом Java, і яке розширення у файлів з байткод Java?
- Що приймає на вході і що видає на виході Java компілятор?
- Якою командою компілюється програма Java?
- Якою командою запускається програма Java?
- Що таке JVM?
- Чи може Java бути запущена на будь-якій машині. Що необхідно для запуску Java на комп'ютері?