Основи 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
integer Цілочисельний Звичайне ціле число -2147483647, 83910343
floating point Число з “плаваючою точкою” Дробове число до 7 знаків після крапки 3.14159
double ­— Дробове число з подвійною точністю 2.718281828459
character Символ Один символ (наприклад, літера чи цифра) '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(); //Булеве значення

та інші відповідні методи для інших типів даних.

Що далі?

Ця сторінка містить дуже багато матеріалу для тих, хто не знайомий з програмуванням. Зараз, після теорії, я дуже рекомендую закріпити практикою (це справді важливо), а потім перейти до вивчення наступних тем. Успіхів!


Copyleft 🄯 2020–2024 Михайло Стецюк <yaBobJonez@gmail.com>.
Сайт має ліцензію Creative Commons License.
Дякую рідній школі та вчителям!