Що таке Java чи особливості мови. Мова програмування Java: з чого розпочати вивчення. Де застосовується Java

Мова програмування Javaє об'єктно-орієнтованою мовою програмування, створеною Джеймсом Гослінгом (James Gosling) та іншими інженерами в компанії Sun Microsystems. Він був розроблений в 1991 році, як частина проекту "Green Project", і офіційно оголошений 23 травня 1995 року в SunWorld, а випущений у листопаді. Java була спочатку розроблена як заміна C++ (хоча набір функцій більше схожа на Objective C) і відомий як Дуб (на честь дерева за межами офісу Гослінга). Докладніше про історію Java можна знайти в статті про платформу Java, яка включає мову, Java Virtual Machine, і Java API. Java є власністю компанії Sun Microsystems; Java є торговою маркою Sun Microsystems.

Існували чотири основні цілі при створенні мови Java:

  • Об'єктно-орієнтована мова.
  • Незалежний від цільової платформи (більш-менш).
  • Повинний містити об'єкти та бібліотеки для роботи в мережі.
  • Він призначений для виконання коду із віддалених джерел надійно.

Об'єктна орієнтація
Перша характеристика, об'єктно-орієнтований підхід ("ГО"), відноситься до методу програмування для чайників та дизайну мови. Основна ідея ГО полягає у розробці програмного забезпечення все це "речі" (тобто об'єкти), якими можна маніпулювати, а не дії, які потрібно виконувати. Це засноване на тому, що перші (речі) змінюються рідше і радикальніше, ніж дії, що робить такі об'єкти (насправді речі, що містять дані) більш стабільною основою для розробки програмного забезпечення. Метою є робити великі проекти програмного забезпечення легко керованими, таким чином, можна досягти підвищення якості та скорочення кількості невдалих проектів програмування для початківців.

Незалежність від платформи

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

Перша реалізація мови використовували віртуальну машину, що інтерпретує, для досягнення мобільності, і багато реалізації використовують такий підхід досі. Однак, ці реалізації створюють програми, які виконуються повільніше, ніж повністю скомпіловані програми, створені типовим компілятором С++ і трохи пізніше компіляторами мови Java, що з'явилися, тому мова страждає від набутої репутації "виробник повільних програм". У пізніших реалізаціях Java VM створює програми, які працюють набагато швидше, використовуючи кілька методів.

Перший метод - це просто компіляція безпосередньо в машинний код, як традиційний компілятор, пропускаючи етап перетворення програми на байт-код цілком. Цим досягається більша продуктивність, але з допомогою втрати мобільності і переносимості програм. Інший метод, "У процесі виконання" або "JIT", компілює байт-код Java в машинний код під час виконання програми. Більш складні віртуальні машини навіть використовували динамічні перекомпіляції, в яких VJM може аналізувати поведінку роботи програми та вибірково перекомпілювати та оптимізувати критичні частини програми. Обидві ці технології дозволяють програмі скористатися швидкістю машинного коду без втрати мобільності.

Портативність є технічно важкою метою для досягнення і успіх Java у досягненні цієї мети є предметом суперечок. Хоча насправді можна писати програми для платформи Java, які поводяться однаково на багатьох платформах, але все ж таки більша кількість доступних платформ не виконує програму як очікувалося, а видає невелику кількість помилок або невідповідностей, що призвело до появи пародії на відоме гасло компанії Sun "Написав один раз, працює скрізь" в інший "Написав один раз, налагоджував скрізь".

Незалежний від платформи Java, однак, став дуже успішним для серверів додатків, таких як веб-сервіси, сервлети або Enterprise Java Beans.

Безпечне виконання віддаленого коду

Платформа Java була однією з перших систем забезпечення широкої підтримки для виконання коду з віддалених джерел. Аплет може працювати в браузері користувача, в процесі виконання коду може завантажити маленький шматочок чужого коду з віддаленого HTTP-сервера і виконати. Віддалене виконання коду відбувається в дуже обмеженій "пісочниці", яка захищає користувача від некоректного чи шкідливого коду. Видавці таких програм можуть подати заявку на сертифікат, який вони могли б використовувати для цифрового підпису аплетів як "безпечний", що дає їм дозвіл, щоб вирватися з "пісочниці" і отримати доступ до локальної файлової системи та мережі, звичайно, імовірно, цей процес відбувається під контролем користувача.

На думку більшості людей, Java технологія досить добре підходить для всіх цих цілей. Мова, однак, не без вад.

Java зазвичай більш високого рівня, ніж аналогічні мови (такі як C++), що означає, що мови Java не вистачає функцій, таких як апаратні або для роботи з конкретними типами даних або, наприклад, низькорівневі покажчики на довільні осередки пам'яті. Хоча ці функції часто зловживають або використовуються програмістами неправильно, вони також є потужними інструментами. Однак, технологія Java включає Java Native Interface (JNI), спосіб виклику машинного коду з коду Java. З JNI можна використати ці можливості.

Деякі програмісти також скаржаться відсутність множинного успадкування, потужний інструмент кількох об'єктно-орієнтованих мов програмування, наприклад, С++. Мова Java відокремлює успадкування типу та реалізації, що дозволяє успадкування кількох визначень типу через інтерфейси, але тільки одиничне успадкування типу даних за допомогою ієрархії класів. Це дозволяє використовувати більшість переваг множинного успадкування, уникаючи при цьому багато з його небезпек. Крім того, за допомогою конкретних класів, абстрактних класів, а також інтерфейсів, програміст на мові Java має можливість вибору повної, часткової або нульової реалізації для типу об'єкта, він сам визначає, що забезпечує максимальну корисність у розробці додатків.

Є люди, які вважають, що для певних проектів об'єктно-орієнтований підхід робить роботу складнішою, а для інших простішою. Ця скарга не є унікальною для мови Java, тому що вона поширюється на інші об'єктно-орієнтовані мови.

Приклад програми "привіт світ" мовою Java:

Public class HelloWorld ( public static void main(String args) ( System.out.println("Hello world!"); ) )

Керівні інструкції:
Цикли
while (Boolean expression) (statement(s)) do (statement(s)) while (Boolean expression); for (initialisation ; termination condition ; incrementing expr) ( statement(s) )
Умовні уператори
if (Boolean expression) (statement(s)) if (Boolean expression) (statement(s)) else (statement(s))
Вибір
if (Boolean expression) (statement(s)) else if (Boolean expression) (statement(s)) else if (Boolean expression) (statement(s)) else (statement(s)) switch (integer expression) (case constant integer expr: statement(s) break;... default: statement(s) break;
Вилов помилок
try (statement(s)) catch (exception type) (statement(s)) catch (exception type) (statement(s)) finally (statement(s))
Базові типи даних

Символи можна зберігати в 16-біт Unicode кодування. Такий символ може містити всі звичайні символи, але також включає набори символів для багатьох інших мов, крім англійської, у тому числі грецьку, кирилицю, китайську, арабську і т.д. Java програми можуть використовувати всі ці символи, хоча більшість редакторів не мають вбудованої підтримки для наборів символів, які відрізняються від звичайних символів ASCII. Масиви та рядки не є примітивними типами: вони є об'єктами.

Мова Java була створена в 1995 році, і за 22 роки свого існування підкорила серця мільйонів програмістів. Як йому це вдалося? Чому за цей час не з'явилося жодної гідної заміни? Щоб розібратися в цьому, поговоримо про особливості мови Java.

Компанія Sun Microsystems під час випуску мови заклала 5 парадигм потенційного успіху:

  1. простота, об'єктна орієнтованість та зрозумілість;
  2. надійність та безпека;
  3. переносимість та незалежність від платформи;
  4. висока продуктивність;
  5. интрепретируемость, поточність і динамічність.

Розглянемо кожну їх докладніше.

Простота

Синтаксис мови був успадкований від C++. Сьогодні на тлі Python, Groove чи Go його важко назвати простим, проте тоді еволюційний вигляд дозволив привернути увагу Сі-розробників.

Стандартна програма “Hello World” виглядає так:

public static void main(String args)
{
System.out.println("Hello World");
}

Така форма конструкцій не збільшує швидкість набору, проте читати, розуміти та відтворювати його просто.

Надійність

Надійність забезпечується двома принципами:

  • ООП. Ієрархія успадкування збільшує читаність коду та знижує кількість невимушених помилок.
  • Сувора типізація. Розробнику доводиться виконувати більший обсяг роботи, але дані інтерпретується однозначно.

Крім того, спочатку в Java передбачалася заборона прямого доступу до пам'яті, що також підвищувало б надійність. Але розробники залишили кілька лазівок, наприклад, бекдор sun.misc.Unsafe, які цю заборону обходять.

Безпека

Крім збереження загальної форми конструкцій, Java в порівнянні з C++ формально втратив дві потенційні небезпеки: покажчиків і множинного успадкування. Насправді обидві функції збережені, але представлені інакше: замість покажчиків використовуються значення, а множинному успадкування беруть участь не класи, а інтерфейси. Тим не менш, така особливість java програмування майже виключає можливу шкоду від неуважності розробника.

Зручність

Дослівно концепція Java звучить як: "Write once, run anywhere". Тобто виконуваність коду залежить від використовуваної операційної системи чи встановленого ПЗ. Досягається це завдяки транслюванню в байт-код віртуальною машиною JVM.

Доречно знадобилася ця особливість java на android. Різноманітність виробників, моделей телефонів, характеристик - все це могло б негативно вплинути на роботу додатків, якби не існування такого універсального інструменту.

Продуктивність

Особливість ява, пов'язана з транслюванням у байт-код, позитивно позначається і на продуктивності кінцевих продуктів. За швидкістю виконання однотипні програми на java поступаються в 1,5-2 рази програмам на C/C++, у своїй перевершують JavaScript, Ruby, Python.

Розвинена екосистема

За 22 роки життя мова обросла десятками IDE та фреймворків, сотнями спільнот та форумів, тисячами бібліотек та плагінів. Все це сприятливо позначається на порозі входження у професію, затребуваність і якість вироблених за допомогою java продуктів.

Безумовно, кожна популярна мова програмування унікальна, кожен має свої недоліки та переваги. Особливості Java немає революційного характеру, вони незначні, але водночас фундаментальні. Саме те, що відрізняє гарну мову від найкращого.

Програмування – це написання вихідного коду програми однією мовою програмування. Існує безліч різних мов програмування, завдяки яким створюються різноманітні програми, що вирішують певне коло завдань. Мова програмування – це набір зарезервованих слів, з яких пишеться вихідний код програми. Комп'ютерні системи не в змозі (поки що) розуміти людську мову і особливо людську логіку (особливо жіночу), тому всі програми пишуться мовами програмування, які згодом перекладаються мовою комп'ютера або в машинний код. Системи, що переводять вихідний код програми в машинний код, дуже складні та їх, як правило, створюють не один десяток місяців і не один десяток програмістів. Такі системи називаються інтегрованими середовищами програмування програм або інструментальними засобами.

Система програмування є величезним продуманим візуальним середовищем, де можна писати вихідний код програми, переводити його в машинний код, тестувати, налагоджувати і багато іншого. Додатково існують програми, які дозволяють робити перераховані вище дії за допомогою командного рядка.

Ви, мабуть, неодноразово чули термін «програма написана під Windows чи під Linux, Unix». Справа в тому, що середовища програмування при перекладі мови програмування в машинний код можуть бути двох видів – компілятори та інтерпретатори. Компіляція або інтерпретація програми визначає спосіб подальшого виконання програми на пристрої. Програми написані мовою Java завжди працюють з урахуванням інтерпретації, тоді як програми написані С/С++ – компіляції. У чому різниця цих двох способів?

Компілятор після написання вихідного коду на момент компіляції читає відразу весь вихідний код програми і перетворює на машинний код. Після чого програма існує як одне ціле і може виконуватися тільки в тій операційній системі, в якій вона була написана. Тому програми, написані під Windows, що неспроможні функціонувати серед Linux і навпаки. Інтерпретатор здійснює покрокове або строкове виконання програми щоразу, коли вона виконується. Під час інтерпретації створюється код, що не виконується, а віртуальний, який згодом виконується віртуальною Java машиною. Тому на будь-якій платформі – Windows або Linux, Java-програми можуть однаково виконуватися за наявності в системі віртуальної Java машини, яка ще зветься Системи часу виконання.

Об'єктно-орієнтоване програмування

Об'єктно-орієнтоване програмування будується на основі об'єктів, що певною мірою аналогічно з нашим світом. Якщо озирнутися навколо себе, то обов'язково можна знайти те, що допоможе яскравіше розібратися в моделі такого програмування. Наприклад, я зараз сиджу за столом і друкую цей розділ на комп'ютері, який складається з монітора, системного блоку, клавіатури, миші, колонок тощо. Усі ці частини є об'єктами, у тому числі складається комп'ютер. Знаючи це дуже легко сформулювати якусь узагальнену модель роботи всього комп'ютера. Якщо не розбиратися в тонкощах програмних та апаратних властивостей комп'ютера, можна сказати, що об'єкт Системний блок робить певні дії, які показує об'єкт Монітор. У свою чергу, об'єкт Клавіатура може коригувати або зовсім задавати дії для об'єкта Системний блок, які впливають на роботу об'єкта Монітор. Цей процес дуже добре характеризує всю систему об'єктно-орієнтованого програмування.

Уявіть собі потужний програмний продукт, що містить сотні тисяч рядків коду. Вся програма виконується рядково, рядок за рядком і, в принципі, кожен з наступних рядків коду обов'язково буде пов'язаний з попереднім рядком коду. Якщо не використовувати об'єктно-орієнтоване програмування, і коли потрібно змінити цей програмний код, скажімо за потреби поліпшення якихось елементів, то доведеться зробити велику кількість роботи з усім вихідним кодом цієї програми.

В об'єктно-орієнтованому програмуванні все набагато простіше, повернемося наприклад комп'ютерної системи. Допустимо, вас уже не влаштовує сімнадцяти дюймовий монітор. Ви можете спокійно обміняти його на двадцяти дюймовий монітор, звичайно ж, за наявності певних матеріальних засобів. Сам процес обміну не спричинить величезних проблем, хіба що драйвер доведеться змінити, та витерти пил з-під старого монітора і все. Приблизно на такому принципі роботи і будується об'єктно-орієнтоване програмування, де певна частина коду може представляти клас однорідних об'єктів, які легко модернізувати або замінювати.

Об'єктно-орієнтоване програмування дуже легко і ясно відображає суть вирішуваної проблеми і що найголовніше, дає можливість без шкоди для всієї програми прибирати непотрібні об'єкти, замінюючи ці об'єкти на новіші. Відповідно, загальна читабельність вихідного коду всієї програми стає набагато простішою. Істотно і те, що той самий код можна використовувати в абсолютно різних програмах.

Класи

Стрижнем всіх програм Java є класи, у яких грунтується объектно-ориентированное програмування. Ви по суті вже знаєте, що таке класи, але поки що про це не здогадуєтеся. У попередньому розділі ми говорили про об'єкти, ставлячи приклад пристрою всього комп'ютера. Кожен об'єкт, з якого зібрано комп'ютер, є представником свого класу. Наприклад, клас Моніторів об'єднує всі монітори незалежно від їх типів, розмірів та можливостей, а один якийсь конкретний монітор, що стоїть на вашому столі, є об'єктом класу моніторів.

Такий підхід дозволяє дуже легко моделювати різноманітні процеси у програмуванні, полегшуючи вирішення поставлених завдань. Наприклад, є чотири об'єкти чотирьох різних класів: монітор, системний блок, клавіатура та колонки. Щоб відтворити звуковий файл необхідно за допомогою клавіатури дати команду системному блоку, саме дію по дачі команди ви будете спостерігати візуально на моніторі і, в результаті, колонки відтворять звуковий файл. Тобто будь-який об'єкт є частиною певного класу і містить у собі всі наявні у цього класу засоби та можливості. Об'єктів одного класу може бути стільки, скільки це необхідно для вирішення поставленого завдання.

Методи

Коли наводився приклад відтворення звукового файлу, було згадано про надання команди чи повідомлення, з урахуванням якого й виконувались певні дії. Завдання виконання дій вирішується з допомогою методів, які має кожен об'єкт. Методи – це набір команд, з допомогою яких можна робити ті чи інші дії з об'єктом.

Кожен об'єкт має своє призначення та покликаний вирішувати певне коло завдань за допомогою методів. Яка користь була б, наприклад, в об'єкті Клавіатура, якщо не можна було натискати на клавіші, отримуючи при цьому можливість віддавати команди? Об'єкт Клавіатура має кілька клавіш, за допомогою яких користувач отримує контроль над пристроєм введення і може віддавати необхідні команди. Обробка таких команд відбувається за допомогою методів.

Наприклад, ви натискаєте клавішу Esc для скасування будь-яких дій і тим самим даєте команду методу, закріпленому за цією клавішею, який на програмному рівні вирішує це завдання. Відразу виникає питання про кількість методів об'єкта Клавіатура, але тут може бути різна реалізація – як від визначення методів для кожної з клавіш (що, взагалі-то, нерозумно), так і до створення одного методу, який стежитиме за загальним станом клавіатури. Тобто цей метод стежить за тим, чи була натиснута клавіша, а потім залежно від того, яка з клавіш задіяна, вирішує, що йому робити.

Отже, бачимо, кожен з об'єктів може мати у своєму розпорядженні набір методів на вирішення різних завдань. А оскільки кожен об'єкт є об'єктом певного класу, то виходить, що клас містить набір методів, якими користуються різні об'єкти одного класу. У мові Java всі створені вами методи повинні належати чи бути частиною якогось конкретного класу.

Синтаксис та семантика мови Java

Для того щоб говорити та читати будь-якою іноземною мовою, необхідно вивчити алфавіт та граматику цієї мови. Подібна умова спостерігається і при вивченні мов програмування, з тією різницею, як мені здається, що цей процес дещо легший. Але перш ніж починати писати вихідний код програми, необхідно спочатку вирішити поставлене перед вами завдання у будь-якому зручному для себе вигляді.

Давайте створимо якийсь клас, що відповідає, наприклад, за телефон, який буде мати всього два методи: включає і вимикає цей телефон. Оскільки ми зараз не знаємо синтаксис мови Java, то напишемо клас Телефон абстрактною мовою.

Клас Телефон
{
Метод Включити()
{
// Операції з увімкнення телефону
}
Метод Вимкнути()
{
// Операції з вимкнення телефону
}
}

Приблизно так може бути клас Телефон. Зверніть увагу, що фігурні дужки позначають відповідно початок і кінець тіла класу, способу, або будь-якої послідовності даних. Тобто дужки вказують на належність до методу чи класу. На кожну дужку, що відкриває, обов'язково повинна бути дужка, що закриває. Щоб не заплутатися, їх зазвичай ставлять на одному рівні в коді.

А тепер давайте запишемо той самий клас тільки вже мовою Java.

Class Telefon
{
void on()
{
// Тіло методу on()
}
void off()
{
// Тіло методу off()
}
}

Ключове слово class у мові Java оголошує клас, далі йде назва самого класу. У нашому випадку це телефон. Відразу кілька слів щодо регістру запису. Майже у всіх мовах програмування важливо зберігати запис назв у тому регістрі, в якому він був зроблений. Якщо ви написали Телефон, то вже таке написання, як телефон або TELefoN, видасть помилку при компіляції. Як спочатку написали, так і треба писати далі.

Зарезервовані або ключові слова записуються у своєму певному регістрі, і ви не можете їх використовувати, даючи їх назви методам, класам, об'єктам тощо. Прогалини між словами немає значення, оскільки компілятор їх просто ігнорує, але читабельності коду вони важливі.

У тілі класу Telefon є два методи: on() – що включає телефон і метод off() – телефон, що вимикає. Обидва методи мають свої тіла і в них, за ідеєю, має бути якийсь вихідний код, який описує необхідні дії обох методів. Для нас зараз не має значення, як відбувається реалізація цих методів, головне – це синтаксис мови Java.

Обидва методи мають круглі дужки on(), всередині яких можуть бути записані параметри, наприклад on(int time) або on(int time, int time1). За допомогою параметрів відбувається своєрідний зв'язок методів із зовнішнім світом. Говорять, що метод on(int time) приймає параметр time. Для чого це потрібно? Наприклад, ви хочете, щоб телефон увімкнувся у певний час. Тоді ціле значення у параметрі time буде передано в тіло методу і на основі отриманих даних відбудеться включення телефону. Якщо дужки порожні, метод не приймає жодних параметрів.

Коментарі

У класі Telefon у тілах обох методів є запис після двох слешів: //. Такий запис означає коментарі, які будуть ігноруватися компілятором, але потрібні для читабельності коду. Чим більше інформації ви закоментуєте під час написання програми, тим більше у вас буде шансів пригадати через рік, над чим же весь цей час працювали.

Коментарі в Java можуть бути трьох видів, це:

//, /*…*/ та /**…*/

Коментарі, записані за допомогою оператора // повинні розташовуватися в одному рядку:

// Один рядок
!!! Помилка! На другий рядок переносити не можна!
// Перший рядок
// Другий рядок
// …
// Останній рядок

Коментарі, що використовують оператори /*…*/ можуть розташовуватися на кількох рядках. На початку вашого коментаря поставте /*, а наприкінці, коли закінчите коментувати код, поставте оператор */. Останній вид коментаря /**…*/ використовується при документуванні коду і може розташовуватися на будь-якій кількості рядків.

Типи даних Java

Щоб задати довільне значення, Java існують типи даних. У класі Telefon ми створили два методи. Обидва методи не мали параметрів, але коли наводився приклад методу on(int time) з параметром time, йшлося про передачу значення метод. Це значення вказувало на час, за допомогою якого нібито повинен увімкнутися телефон. Специфікатор int якраз і визначає тип значення time. У Java 2 МЕ шість типів даних.

Byte - мале ціле значення від -128 до 128;
short – коротке ціле значення діапазоні від –32768 до 32767;
int - містить будь-яке ціле значення від -2147483648 до 2147483647;
long - дуже велике ціле значення, від -922337203685475808 до 9223372036854775807;
char – це символьна константа у форматі Unicode. Діапазон цього формату від 0 до 65536, що дорівнює 256 символам. Будь-який символ цього типу повинен записуватися в одинарних лапках, наприклад: G;
boolean – логічний тип, має лише два значення: false – брехня і true – істина. Цей тип часто використовується в циклах, про які трохи пізніше. Сенс дуже простий – якщо у вас у кишені є гроші, імовірно це true, а якщо ні, то false. Таким чином, якщо гроші є – йдемо в магазин за хлібом чи пивом (потрібне підкреслити), якщо немає грошей – залишаємось вдома. Тобто це така логічна величина, яка сприяє вибору подальших дій вашої програми.

Щоб оголосити якесь необхідне значення, використовується запис:

Int time;
long BigTime;
char word;

Оператор точка з комою необхідний після записів і ставиться наприкінці рядка. Можна поєднати кілька однакових за типом оголошень через кому:

Mt time, time1, time2;

Тепер давайте удосконалимо наш клас Telefon, додавши до нього кілька значень. Методи on() і off() нам більше не потрібні, додамо нові методи, які справді можуть вирішувати певні завдання.

Class Telefon
{
//S – площа дисплея
//w – ширина дисплея
//h - Висота дисплея
int w, h, S;
//метод, що обчислює площу дисплея
vord Area()
{
S = w * h;
}
}

Отже, ми маємо три змінні S, w і h, які відповідають, відповідно, за площу, ширину та висоту дисплея в пікселях. Метод Area() обчислює площу екрана телефону в пікселях. Операція марна, але дуже показова і проста в розумінні. Тіло методу Area() набуло себе і має вигляд S = w * h. У цьому методі ми просто перемножуємо ширину на висоту і присвоюємо або, як ще кажуть, зберігаємо результат у змінній S. Ця змінна міститиме значення площі дисплея даного телефону.

Зараз ми підійшли впритул до операторів мови Java, за допомогою яких можна здійснювати всілякі операції. Оператори мови Java, як і інших мов програмування мають свої призначення. Так існують арифметичні оператори, оператори інкременту та декременту, логічні оператори та оператори відносини. Давайте розглянь кожен із вищезазначених операторів.

Арифметичні оператори

Усі арифметичні оператори дуже прості та аналогічні операторам множення «*», поділу «/», додавання «+» та віднімання «–», що використовуються в математиці. Існує оператор розподілу по модулю «%» і трохи заплутана на перший погляд ситуація з оператором дорівнює «=». Оператор одно в мовах програмування називається оператором присвоєння:

Тут ви змінній х надаєте значення 3. А оператор "рівно" у мовах програмування відповідає запису двох підряд операторів "рівно": "==". Розглянемо з прикладу, що можуть робити різні арифметичні оператори.

Int x, y, z;
x = 5;
y = 3;
z = 0;
z = x + y;

В даному випадку z матиме значення вже суми x та y, тобто 8.

Змінна х мала значення 5, але після такого запису попереднє значення втрачається і записується добуток z*x (8*5), що дорівнює 40. Тепер, якщо ми продовжимо далі наш код, то змінні матимуть такий вигляд:

// x = 40;
// y = 3;
// z = 8;

Оператори складання та віднімання мають ті ж призначення що і в математиці. Негативні числа так само споріднені.

Оператори декременту "--" та інкременту "++" дуже специфічні, але дуже прості. У програмуванні часто зустрічаються моменти, коли потрібно збільшити чи зменшити значення одиницю. Часто це зустрічається у циклах. Операція інкременту збільшує змінну на одиницю.

Int x = 5;
x++;
// Тут х вже дорівнює 6

Операція декременту зменшує змінну на одиницю.

Int x = 5;
x--;
// х дорівнює 4

Операції інкременту та декременту можуть бути пост і префіксними:

Int x = 5;
int y = 0;
y = x++;

В останньому рядку коду спочатку значення x надається y, це значення 5, і тільки потім змінна х збільшується на одиницю. Виходить що:

Префіксний інкремент має вигляд:

Int x = 3;
int y = 0;
y = ++x;

І в цьому випадку, спочатку змінна х збільшується на один, а потім надає вже збільшене значення y.

Оператори відносини

Оператори відносини дозволяють перевірити рівність обох частин висловлювання. Є оператор рівності "==", оператори менше "<» и больше «>", менше або дорівнює "<=» и больше или равно «>=», а також оператор заперечення «!=».
9 == 10;

Цей вираз не вірний, дев'ять не дорівнює десяти, тому його значення цього виразу дорівнює false.

Тут, навпаки, оператор заперечення свідчить про нерівність висловлювання, і значення дорівнюватиме true. Оператори більше, менше, більше або однаково і менше або однакові відповідним операторам з математики.

Логічні оператори

Існує два логічні оператори. Оператор "І", що позначається значками "&&" та оператор "АБО", позначений у вигляді двох прямих слешів "||". Наприклад, є вираз:

А*В && В*С;

У тому випадку, якщо обидві частини виразу істинні, значення виразу вважається істинним. Якщо одна з частин неправильна, то значення виразу буде помилковим.
На противагу оператору «&&» є оператор «||», який недаремно має назву «АБО».

А*В || В*С;

Якщо кожна з частин виразу істинна, то й усі вирази вважаються істинними. Обидва оператори можна комбінувати в одному виразі, наприклад:

A*B || B*C && C*D || B*A;

За допомогою цього виразу я вас ввів, як мені здається, у скруту, чи не так? Справа в тому, що в Java, як і в математиці, існує пріоритет або так звана ієрархія операторів, за допомогою якої визначається який з операторів головніше, а, отже, і перевіряється першим. Розглянемо за допомогою списку пріоритет усіх операторів мови Java:

, ., (),
!, ~, ++, – –, + (унарний), – (унарний), new,
*, /, %,
+, –,
<<, >>, >>>,
<, <=, >, >=,
= =, !=,
&, ^, |,
&&,
||,
?:,
=, +=, –=, *=, /=, %=, |=, ^=, <<=, >>=, >>>=.

Асоціативність операторів у списку слідує зліва направо та зверху вниз. Тобто все, що знаходиться ліворуч і вище – старше за званням і найголовніше.

Java – ЯП від компанії Sun microsystems. Спочатку розроблявся як мову для програмування електронних пристроїв, але пізніше став використовуватися для написання програм серверного ПЗ. Програми на Java – кросплатформні, тобто здатні працювати на будь-яких операційних системах.

Основи програмування мовою Java

Java як мова з підтримкою об'єктного орієнтування відповідає основним принципам ООП:

  • успадкування;
  • поліморфізм;
  • інкапсуляція.

У центрі «Джава», як і в інших ООЯ, - об'єкт та клас з конструкторами та властивостями. Починати навчання мови програмування Java краще не з офіційних ресурсів, а з посібників для новачків. У таких манулах докладно описуються можливості, надаються приклади коду. У книгах на кшталт "Мова програмування Java для початківців" докладно пояснюються основні принципи та особливості названої мови.

Особливості

Код мовою програмування Java транслюється в байт-код, потім виконується на віртуальній машині JVM. Перетворення на байт-код здійснюється на Javac, Jikes, Espresso, GCJ. Існують такі компілятори, які транслюють мову «Сі» Java байт-код. Таким чином, програма на «Сі» може працювати на будь-яких платформах.

Синтаксис «Джава» характеризується таким:

  1. Імена класів повинні починатися з великої літери. Якщо назва складається з кількох слів, друге має починатися з верхнього регістру.
  2. Якщо для формування методу використовується кілька слів, то друге повинно починатися з великої літери.
  3. Обробка починається з методу main() – він є частиною кожної програми.

Типи

Мова програмування Java має 8 типових типів. Вони представлені нижче.

  • Boolean - логічний тип, що приймає всього два значення true і false.
  • Byte - найменший цілий тип розміром 1 байт. Він використовується при роботі з файлами або необробленими двійковими даними. Має діапазон від –128 до 127.
  • Short має діапазон від -32 768 до 32 767, використовується для представлення чисел. Розмір змінних цього типу - 2 байти.
  • Int теж позначає числа, але його розмір - 4 байти. Він частіше за інших використовується для роботи з цілими даними, а byte і short іноді підвищуються до int.
  • Long використовуються для великих цілих чисел. Можливі значення знаходяться в діапазоні від -9223372036854775808 до 9223372036854775807.
  • Float та double застосовуються для позначення дробових. Їхня різниця в тому, що float зручний, коли не потрібна висока точність у дробовій частині числа.
  • Double виводить на екран усі знаки після роздільника «.», а float – лише перші.
  • String найбільш використовуваний примітивний тип, за допомогою якого задаються рядки.

Класи та об'єкти

Важливу роль у книзі "Вивчення мови програмування Java для початківців" займають класи та об'єкти.

Клас визначає шаблон для об'єкта, у нього обов'язково є атрибути та методи. Для його створення використовують ключове слово Class. Якщо він створюється в окремому файлі, то ім'я класу та файлу мають бути однаковими. Сама ж назва складається з двох частин: імені та розширення. Java.

У «Джаві» можна створювати підклас, який успадковуватиме методи батьківського. Для цього використовується слово extends:

  • class ім'я_класу extends ім'я_суперкласу ();

Конструктор є складником будь-якого класу, навіть якщо це не поставлено явно. У такому разі компілятор створює його самостійно:

  • public class Class( public Class()( ) public Class(String name)( ))

Ім'я конструктора збігається з ім'ям класу, за умовчанням у нього є лише один параметр:

  • public Puppy(String name)

Object створюється із класу за допомогою оператора new():

  • Point р = New Point()

Він отримує всі методи та властивості класу, за допомогою яких взаємодіє з іншими об'єктами. Один об'єкт можна використовувати кілька разів під різними змінними.

    Point р = New Point()

    class TwoPoints (

    public static void main(String args) (

    Point p1 = new Point();

    Point p2 = New Point();

    Об'єктні змінні та об'єкти - зовсім різні сутності. Object variables є посиланнями. Вони можуть вказувати на будь-які змінні непримітивного типу. На відміну від C++ їхнє типове перетворення жорстко регламентовано.

    Поля та методи

    Поля – це всі змінні, пов'язані з класом чи об'єктом. За замовчуванням вони локальні і не можуть використовуватися в інших класах. Для доступу до полів використовується оператор «.»:

    • classname.variable

    Можна встановити статичні поля за допомогою ключового слова static. Такі поля є єдиним способом зберігати глобальні змінні. Це з тим, що у «Джава» просто немає global variables.

    Реалізовано можливість імпорту змінних для отримання доступу з інших пакетів:

    • import static classname;

    Метод - підпрограма тих класів, у яких оголошено. Описується тому ж рівні, як і змінні. Задається як функції і може мати будь-який тип, у тому числі void:

    • class Point (int х, у;

      void init(int a, int b) (

    У прикладі вище клас Point має integer x та y, метод init(). Доступ до методів, як і змінних, здійснюється шляхом використання оператора «.»:

    • Point.init();

    Властивість init нічого не повертає, тому має тип void.

    Змінні

    У самовчителі мови програмування Java окреме місце посідають змінні. У всіх змінних є певний тип, він визначає необхідне місце для зберігання значень, діапазон можливих значень, список операцій. Перш ніж маніпулювати значеннями, змінні оголошуються.

    Одночасно може бути оголошено кілька змінних. Для їх перерахування використовується кома:

    • int a, b, c;

    Ініціалізація здійснюється після або під час оголошення:

    int a = 10, b = 10;

    Існує кілька типів:

    • local variables (локальні);
    • instance variables (змінні екземпляри);
    • static variables (статичні).

    Local variables оголошують у методах та конструкторах, вони створюються під час запуску останніх та знищуються після завершення. Їх заборонено вказувати access modifiers і керувати рівнем доступності. Вони не видно поза оголошеним блоком. У Java змінні немає початкового значення, тому воно обов'язково присвоюється перед першим використанням.

    Встановлення variables повинні бути оголошені всередині класу. Вони використовуються як методи, але отримати доступ до них можна тільки після створення об'єкта. Змінна руйнується, коли знищується об'єкт. У екземплярних змінних, на відміну від локальних, є значення за замовчуванням:

    • числа – 0;
    • логіка – false;
    • Посилання - null.

    Static variables називаються змінними класу. Їхні імена починаються із символу у верхньому регістрі, конкретизуються модифікатором static. Вони використовуються як константи, відповідно до них додається один специфікатор зі списку:

    • final;
    • private;
    • public.

    Запускаються на початку програми, знищуються після зупинки виконання. Так само, як змінні екземпляра, мають стандартні значення, які надаються порожнім змінним. У чисел - значення 0, булеві змінні мають значення false, посилання об'єкт спочатку мають null. Статичні змінні викликаються у такому вигляді:

    • ClassName.VariableName.

    Складальник сміття

    У самовчителі "Мова програмування Java для новачків" розділ автоматичного збирача сміття є найцікавішим.

    У Java, на відміну від мови "Сі", неможливо ручне видалення об'єкта з пам'яті. Для цього реалізований метод автоматичного видалення – збирач сміття. При традиційному видаленні через null відбувається лише усунення посилання об'єкт, а сам об'єкт видаляється. Існують методи примусового збирання сміття, хоча вони не рекомендовані для використання у звичайній роботі.

    Модуль автоматичного видалення об'єктів, що не використовуються, працює у фоновому режимі, запускається при неактивності програми. Для очищення об'єктів із пам'яті програма зупиняється, після звільнення пам'яті перервана операція відновлюється.

    Модифікатори

    Розрізняють різні типи модифікаторів. Крім тих, що визначають спосіб доступу, існує модифікатори методів, змінних, класу. Методи, оголошені як private, доступні лише у оголошеному класі. Такі змінні не можуть використовуватись в інших класах та функціях. Public відкриває доступ до будь-якого класу. Якщо потрібно отримати Public class з іншого пакета, його слід попередньо імпортувати.

    Модифікатор protected схожий на дію на public - відкриває доступ до полів класу. В обох випадках змінні можуть використовуватись в інших класах. Але паблік-модифікатор доступний абсолютно для всіх, а протектед-модифікатор - тільки для класів, що успадковуються.

    Модифікатор, який застосовується під час створення методів, - static. Це означає, що створений метод існує незалежно від екземплярів класу. Модифікатор Final не керує доступом, а вказує на неможливість подальшого маніпулювання значення об'єкта. Він забороняє зміну того елемента, якого вказаний.

    Final для полів унеможливлює зміну першого значення змінної:

      public static void mthod(String args) (

      final int Name = 1;

      int Name = 2; // видасть помилку

    Змінні із модифікатором final є константами. Їх прийнято писати лише великими літерами. CamelStyle та інші способи не працюють.

    Final для методів вказує заборону зміну методу в наследуемом класі:

      final void myMethod() (

      System.out.printIn("Hello world");

    Final для класів означає, що не можна створити спадкоємців класу:

      final public class Class (

    Abstract – модифікатор створення абстрактних класів. Будь-який абстрактний клас та абстрактні методи призначені для подальшого розширення в інших класах та блоках. Модифікатор transient вказує на віртуальну машину не обробляти задану змінну. В цьому випадку та просто не збережеться. Наприклад, transient int Name = 100 не збережеться, а int b збережеться.

    Платформи та версії

    Існуючі сімейства мови програмування Java:

    • Standard Edition.
    • Enterprise Edition.
    • Micro Edition.
    • Card.

    1. SE - є основним, широко використовується для створення власних додатків для індивідуального використання.
    2. EE – набір специфікацій для розробки ПЗ рівня підприємства. Містить більше можливостей, ніж SE, тому використовують у комерційних масштабах на великих і середніх підприємствах.
    3. ME – призначені для пристроїв з обмеженою потужністю та пам'яттю, у них, як правило, малий розмір дисплея. Такими пристроями є смартфони та КПК, ресивери цифрового телебачення.
    4. Card - призначена для пристроїв з вкрай обмеженими обчислювальними ресурсами, наприклад, як смарт-картки, sim-картки, банкомати. Для цього було змінено байт-код, вимоги до платформи, що становить бібліотек.

    Застосування

    Програми мовою програмування Java, зазвичай, повільніші і займають більше оперативної пам'яті. Порівняльний аналіз мов Java та «Сі» показав, що «Сі» трохи продуктивніше. Після численних змін та оптимізації віртуальної машини Java покращив свої показники.

    Активно використовується для програм під Android. Програма компілюється у нестандартний байт-код, виконується на віртуальній машині ART. Для компіляції використовується Android Studio. Це IDE від компанії «Гугл» є офіційним для розробки під ОС Android.

    Microsoft розробила власну реалізацію віртуальної машини Java MSJVM. Вона мала такі відмінності, які ламали основну концепцію кросплатформенності - була відсутня підтримка деяких технологій і методів, були нестандартні розширення, що працюють лише на платформі Windows. Microsoft випустив мову J#, синтаксис і робота загалом якого дуже нагадує Java. Він не відповідав офіційній специфікації і в результаті був виключений із стандартного інструментарію розробника Microsoft Visual Studio.

    Мова програмування Java та середовище

    Розробка програмного забезпечення здійснюється в таких IDE:

    1. NetBeans IDE.
    2. Eclipse IDE.
    3. IntelliJ IDEA.
    4. JDeveloper.
    5. Java для iOS.
    6. Geany.

    JDK поширюється компанією Oracle як набір розробника на мові Java. Включає компілятори, стандартні бібліотеки, утиліти, виконавчу систему. Сучасні інтегровані середовища розробки спираються саме на JDK.

    Зручно писати код мовою програмування Java серед Netbeans і Eclipse IDE. Це вільні інтегровані середовища для розробки, вони підходять під усі платформи Джава. Також використовуються для програмування Python, PHP, JavaScript, C++.

    IntelliJ IDE від компанії Jetbrains поширюється у двох варіантах: безкоштовному та комерційному. Підтримує написання коду багатьма мовами програмування, існують сторонні плагіни від розробників, у яких реалізовано ще більше ЯП.

    JDeveloper – ще одна розробка від компанії Oracle. Повністю написано на Java, тому працює на всіх операційних системах.

Перш ніж перейти до навчання, почнемо з введення в java-програмування, розберемося, що це за така мова програмування. Трохи історії. Мова Java розроблена компанією Sun Microsystems, творцем якого був Джеймс Гослінг, і випущений в 1995 році як основні компоненти компанії Sun Microsystems - Java платформ (Java 1.0).

На 2017 рік останньою версією Java Standard Edition є 8 (J2SE). З розвитком Java, та її широкою популярністю, кілька конфігурацій були побудовані для різних типів платформ. Наприклад: J2EE – додатки для підприємств, J2ME – для мобільних додатків.

Sun Microsystems перейменувала колишню версію J2 і запровадила нові: Java SE, Java EE та Java ME. Введення в програмування Java різних версій підтверджувало відомий слоган компанії «».

Історія створення мови Java

Історія створення мови Java починається у червні 1991 року, коли Джеймс Гослінг створив проект для використання в одному зі своїх численних сет-топ проектів. Мова, що росла поза офісом Гослінгу, як дуб, Oak- первісна назва Java до 1995 року, після надалі історія Java тривала під ім'ям Green, а пізніше був перейменований як Java.

Але офіційною датою створення мови Java вважається 23 травня 1995, після випуску компанією Sun першої реалізації Java 1.0. Вона гарантувала « Напиши один раз, запускай скрізь», Забезпечуючи недорогою вартістю на популярних платформах.

13 листопада 2006 року Sun випустила більшу частину як вільне та відкрите програмне забезпечення відповідно до умов GNU General Public License (GPL).

Після 8 травня 2007 року доля Java склалася інакше. Компанія завершила процес, роблячи все, щоб вихідний код був безкоштовним і відкритим, крім невеликої частини коду, на який компанія не мала авторських прав.

Переваги Java як мови програмування

Об'єктно-орієнтований: Java все є об'єктом. Доповнення може бути легко розширено, оскільки він ґрунтується на об'єктній моделі.

Платформонезалежний: на відміну від багатьох інших мов, включаючи C і C++, Java, коли був створений, він не компілювався у платформі конкретної машини, а незалежному від платформи байт-коду. Цей байт код поширюється через інтернет і інтерпретується Java Virtual Machine (JVM), на якій він в даний час працює.

Простий: процеси вивчення та введення в мову програмування Java залишаються простими. Якщо Ви розумієте основні концепції об'єктно-орієнтованого програмування, він буде простий для Вас в освоєнні.

Безпечним: методи автентифікації засновані на шифруванні з відкритим ключем.

Архітектурно-нейтральним: компілятор генерує архітектурно-нейтральні об'єкти формату файлу, що робить скомпільований код виконуваним на багатьох процесорах, з наявністю системи Java Runtime.

Портативний: архітектурно-нейтральний і не має залежності від реалізації аспектів специфікацій - все це робить портативним Java. Компілятор Java написаний на ANSI C з чистою переносимістю, який є підмножиною POSIX.

Міцний: виконує зусилля, щоб усунути помилки в різних ситуаціях, наголошуючи в основному на час компіляції, перевірку помилок і перевірку під час виконання.

Багатопотоковий: функції багатопоточності, можна писати програми, які можуть виконувати безліч завдань одночасно. Введення в мову Java цієї конструктивної особливості дозволяє розробникам створювати налагоджені інтерактивні програми.

Інтерпретований: Java байт-код перекладається на льоту в машинні інструкції та ніде не зберігається. Роблячи процес більш швидким та аналітичним, оскільки зв'язування відбувається як додаткове з невеликою вагою процесу.

Високопродуктивний: введення Just-In-Time компілятора, дозволило отримати високу продуктивність.

Поширений: призначений для розподіленого середовища Інтернету

Динамічний: програмування на Java вважається більш динамічним, ніж на C або C++, оскільки він призначений для адаптації до змінних умов. Програми можуть виконувати велику кількість під час обробки інформації, яка може бути використана для перевірки та дозволу доступу до об'єктів на час виконання.

Після невеликого вступу, огляду переваг та історії Java, приступимо до нашого навчання.

Інструменти, які знадобляться

Для виконання прикладів, розглянутих у цьому підручнику Вам потрібен комп'ютер Pentium 200 МГц з мінімальною оперативною пам'яттю 64 Мб (рекомендується оперативна пам'ять 128 Мб).

Вам також знадобиться таке програмне забезпечення:

  • Linux 7.1, Windows 95/98/2000/7/8 та вище або інша операційна система.
  • JDK 5 та вище.
  • Блокнот або будь-який інший текстовий редактор.

Самовчитель забезпечить необхідними навичками для створення GUI, мережевих та веб-додатків.

Ознайомившись з особливостями історії появи та перевагами Java, Ви закінчили урок введення мови програмування. Наступний урок вестиме Вас до вивчення мови та документації. Проінструктує Вас про те, як встановити та підготувати середовище для розробки програм.