Основи Java
Спочатку, трохи теорії про саму мову. Java — це високорівнева статична сильно-типізована об’єктно-орієнтована платформенно-незалежна напів-компільована мова програмування. Звучить складно та багатослівно, хіба не так? Що ж, розберімось!
- Високорівнева означає, що Java має багато абстракцій, що робить її значно простішою, контрастно з низькорівневими мовами.
- Статична вказує на те, що кожна змінна має один і лише один визначений тип (далі про це).
- Сильно-типізована значить, що при неоднозначних діях (наприклад, якщо поділити на 0) будуть помилки.
- Об’єктно-орієнтована — про це ви дізнаєтесь пізніше, це досить обширна тема.
- Платформенно-незалежна означає, що код, написанний один раз, буде однаково працювати на усіх пристроях, де є JRE.
- Напів-компільована — складно пояснити коротко, але це значить, що комп’ютер виконує код лише після його значного спрощення.
Кожна Java програма має мати обов’язково хоча б один файл з розширенням .java, в якому є “точка входу” — функція main()
(у класі, найчастіше Main
), яка зазвичай виглядає повністю так:
public class Main {
public static void main(String[] args){
//Тут Ваш код
}
}
Те, що позначено //
— це коментар, тобто в ньому можна писати будь-що: Java проігнорує це. Коментарі корисні для пояснення певних шматків коду. Виглядають вони ось так:
//Це однорядковий коментар
/* А це багато-
рядковий
коментар */
Далі перейдемо до більш цікавого: введення та виведення даних та їхні типи. Багато мов програмування, як і Java, виокремлюють 3 основні потоки даних: stdin
(тобто standard in(put) — введення), stdout
(standard out(put) — виведення) та stderr
(standard err(or) — для помилок). Потік введення можна лише читати, а у виведення та помилок лише можна писати. Однак, перед тим, як працювати з даними (та потоками), треба знати основні типи даних.
Типи даних
Тип | Назва | Опис | Приклад |
---|---|---|---|
boolean | Булевий (логічний) | Як лампа, має 2 стани: true або false | false |
byte | Байт | Ціле число від -128 до 127 | -5 , 12 |
short | — | Ціле число від -32 768 до 32 767 | -17839 , 33028 |
int eger | Цілочисельний | Звичайне ціле число | -2147483647 , 83910343 |
float ing point | Число з “плаваючою точкою” | Дробове число до 7 знаків після крапки | 3.14159 |
double | — | Дробове число з подвійною точністю | 2.718281828459 |
char acter | Символ | Один символ (наприклад, літера чи цифра) | 'h' , '7' |
String | Рядок | Будь-який текст | "Enchanté!" , "Доброго вечора!" |
Так, типів досить багато, і навіть існують ще два: масиви та об’єкти, однак про це згодом. Хоча, найчастіше використовують лише boolean
, int
, double
, String
та іноді char
.
Виведення
Тепер повертаємось до виведення. Потік stdout
забезпечений операційною системою (клас System), а ми хочемо “надрукувати” текст у ньому, тобто для того, щоб вивести щось (поки лише типи прості типи), необхідно використати функцію System.out.println()
:
System.out.println("Привіт");
System.out.println(2.5);
System.out.println(true);
Кожна із цих команд закінчується на “ln” — переходом на новий рядок; відповідно, просто print()
виведе на цьому ж рядку. Важливо: кожна така команда повинна закінчуватись крапкою з комою! А якщо нам потрібно вивести декілька значень одночасно? Недоцільно повторювати цю команду, а краще об’єднати значення за допомогою плюса. У Java ‘+’ має декілька значень залежно від контексту: з текстом він сполучає частини, а з числами — просто додає. Порівняйте:
System.out.print("Оцінка: " + 4 + " / ");
System.out.println(4 + 4);
Оцінка: 4 / 8
Числові оператори
Безперечно, існують й інші математичні операції з числами:
+
— додати-
— відняти*
— помножити/
— поділити%
— знайти остачу від ділення (англ. modulo), наприклад, 17 % 5 це 2
Але Ви вже знаєте з математики, що існує степінь та корінь, то ж як їх обчислити у Java? Насправді, спеціальних операторів для цього немає, однак є функції. print()
, яку ми використовували раніше — це функція, але системного виводу. Клас Math
містить не тільки математичні функції, а й деякі константи (постійні значення), наприклад:
Math.abs(-5); //Абсолютне значення, тобто модуль. Результат: 5
Math.round(4.4); //Округлення. Результат: 4
Math.ceil(3.2); //Округлення вгору. Результат: 4
Math.floor(6.99); //Округлення вниз. Результат: 6
Math.max(7, 8); //Більше число. Результат: 8
Math.min(10, 2); //Менше число. Результат: 2
Math.pow(2, 3); //Піднесення до степеня. Результат: 8
Math.sqrt(16); //Квадратний корінь. Результат: 4
Безумовно це не усі функції, але основні, що можуть знадобитись. Зауважте, що ці команди не виведуть нічого самі по собі, а “повернуть” результат — тобто, щоб вивести, потрібно писати їх всередині System.out.println()
.
Змінні
Перед тим, як ознайомитись із введенням, нам знадобляться змінні. Змінна — це як коробочка, у якій можна зберігати одну конкретну річ. У математиці змінні позначають лише однією літерою латинського алфавіту: a, b, c, k, m, n, x, y, z тощо. У Java змінна може мати назву аж із цілого речення, хоча дуже незручно так її називати. Головне, слідувати таким правилам:
- лише літери латинського алфавіту (великі й малі), цифри, нижне підкреслювання і знак долара
- не може починатись із цифри (інакше Java подумає, що це просто число)
- без пропусків
- є деякі зарезервовані назви, які не можна використовувати: такі як
int
,if
,true
,for
тощо - змінні чутливі до регістру (тобто
hello
,Hello
іHELLO
це різні змінні)
Ось декілька прикладів коректних назв змінних: zminna
, table10
, $money
, yakas_smishnaNazva
, a
. На початку сторінки згадувалось, що Java є статичною мовою, тобто кожна змінна має один визначений тип. Отже, щоб створити певну змінну та присвоїти їй якесь значення, необхідно написати тип, назву, знак “дорівнює”, значення.
int a = 2;
String b = "cat";
boolean efgh4567 = true;
Також можна створити змінну без початкового значення, не вказуючи його:
int pomidoriv;
String text;
float r;
Щоб змінити значення змінної, не потрібно повторно вказувати тип, а лише присвоїти нове значення:
pomidoriv = 25;
text = "Одного разу під Полтавою...";
r = 8;
Далі, щоб отримати значення змінної, достатньо використати її ім’я. Ось приклад з виведенням:
System.out.println(text);
System.out.println(Math.sqrt(pomidoriv));
System.out.println("She likes her " + b);
Для зручності існують ще деякі оператори присвоєння, а також ін/декременти.
Цей оператор | це те ж, що й |
---|---|
a += b | a = a + b |
a -= b | a = a - b |
a *= b | a = a * b |
a /= b | a = a / b |
a %= b | a = a % b |
Інкремент та декремент — це короткі числові оператори, що додають та віднімають 1 до або від значення відповідно:
Цей виріз | відповідний такому |
---|---|
res = a++; | res = a; a += 1; |
res = a–; | res = a; a -= 1; |
res = ++a; | a += 1; res = a; |
res = –a; | a -= 1; res = a; |
Введення
Останнє із базового, що залишилось вивчити, це — введення даних. Раніше сказано, що є потік введення — stdin
. Для читання із нього потрібен “сканер”. Достатньо створити його об’єкт (детальніше про об’єкти Ви дізнаєтесь значно пізніше) один раз, щоб читати скільки потрібно разів: Scanner miySkaner = new Scanner(System.in);
. Далі, для отримання даних, у цьому об’єкті існують деякі корисні методи (функції):
Scanner sc = new Scanner(System.in);
String riadok = sc.nextLine(); //nextLine() просить користувача ввести будь-що у межах одного рядка.
String slovo = sc.next(); //Одне слово (до пропуску)
int chyslo = sc.nextInt(); //Ціле число
boolean bulevy = sc.nextBoolean(); //Булеве значення
та інші відповідні методи для інших типів даних.
Що далі?
Ця сторінка містить дуже багато матеріалу для тих, хто не знайомий з програмуванням. Зараз, після теорії, я дуже рекомендую закріпити практикою (це справді важливо), а потім перейти до вивчення наступних тем. Успіхів!