Призначення, особливості і переваги Eclipse

Eclipse - це розширювана IDE (інтегроване середовище розробки). IDE - зручно організований набір інструментів, необхідних для роботи над програмним проектом.

Eclipse - універсальна платформа, яка може використовуватися для розробки додатків на будь-якій мові програмування (наприклад, можна використовувати мова Python після установки підключення Pydev (), але спочатку «рідним» для Eclipse є Java (на якій, до речі, сам Eclipse і написаний).

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

Що ви дійсно знаєте?

Узагальнена неоднозначність типів метапрограмм на основі типів з конкретним синтаксисом об'єкта. Аня Елен Багге, Мартін Бравенбоер, Карл Трюгве Калльберг, Коен Муілвейк і Еелко Виссер. Адаптивне повторне використання коду по аспектам, клонування і перейменування. Вивчення Інтернету надає інформацію новачкам і представляє основи програмування та Інтернету.

  • Каца, Мартіна Бравенбоера і Ельке Віссера.
  • Мікшування джерела і байт-коду.
  • Мартін Бравенбоер, Роб Вермаас, Юрген Віндж і Еелко Виссер.
  • Мартін Бравенбоер і Ельке Виссер.
  • Конкретний синтаксис для об'єктів.
  • Впровадження мови і його асиміляція без обмежень.
  • Загальне розуміння Інтернету та Всесвітньої павутини.
  • Добре знання мови розмітки гіпертексту.
  • Певний досвід програмування.
Це невеликий, легкий мову.

Найбільш важливими особливостями Eclipse є:

  1. Кросплатформеність. Eclipse виконується на всіх поширених платформах: Windows, Linux і MacOS X. Ще важливіше те, що його функції однакові на кожній з цих платформ.
  2. Універсальність і розширюваність. В Eclipse реалізована можливість використання різних інструментів, розроблених сторонніми програмістами.
  3. Відкритість і безкоштовність. Eclipse є OpenSource-проектом (тобто його вихідні коди доступні будь-якому бажаючому і хто завгодно може приєднатися до розробки цього інструменту). Eclipse має активна спільнота, постійно працює над поліпшенням програми і розширенням її можливостей.

Робоче середовище Eclipse

Перше, що ви бачите при запуску Eclipse - діалогове вікно, що дозволяє вибрати місце, де буде розташовуватися робочий простір. Робочий простір - каталог, в якому буде зберігатися ваша робота.

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

Після вибору робочого простору, на екрані з'явиться початкова сторінка, З пропозиціями подивитися підручники, приклади і т.д. Виберіть Workbench і ви перейдете у вікно робочого середовища (Workbench), в якому і буде проходити ваша подальша робота.

Основними складовими робочого середовища є уявлення (views), редактори (editors) і проекції або перспективи (perspectives).

Типи даних Java

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

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

подання - це невеликий розділ всередині робочого середовища, який служить для навігації по деякій категорії об'єктів (такий, як ресурси або пакети), відкриття редакторів, відображення властивостей активних редакторів. Наприклад, уявлення Navigator показує проекти та інші ресурси, а уявлення Bookmarks відображає всі закладки в Workbench разом з іменами файлів, з якими ці закладки пов'язані. На малюнку зображений правий верхній кут робочого середовища з активним уявлення Outline.

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

Оголошення змінної як константи

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

Всі зміни, зроблені в уявленнях, негайно зберігаються.

Інший тип візуальних компонентів Workbench - редактори, Які використовуються для перегляду і редагування деякого ресурсу (наприклад, програмного коду). При виборі ресурсу з'являється відповідний редактор. Наприклад, відкрийте будь-який текстовий документ (з расшіреніем.txt) командою File -\u003e Open File ... і ви побачите вбудований редактор простого неформатіруемого тексту. Якщо що-небудь набрати в цьому редакторі, на його вкладці, де написано назву файлу, з'явиться зірочка. Вона означає, що редактор містить не збережені зміни. Вони збережуться, якщо натиснути Ctrl + S або вибрати команду File -\u003e Save.

Використання кінцевого ключового слова з об'єктами

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

Існує безліч корисних уявлень, які додаються у вікно робочого середовища командою Window -\u003e Show View. Однак замість того, щоб додавати їх по одному, зручніше буває перемикати проекцію (perspective). проекція (або перспектива) - це набір уявлень і редакторів, спеціально підібраний для виконання певної задачі. Після запуску в Eclipse відкривається перспектива Java, настроєна власне на написання програми. Для налагодження програми часто використовується проекція Debug. Переключити проекцію можна командою Window -\u003e Open Perspective. Назва поточної проекції відображається в правому верхньому куті робочого середовища (див. Малюнок).

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

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

Перша програма на Java

Перш ніж приступити до програмування, необхідно створити проект, в якому Eclipse буде зберігати всі ресурси, пов'язані з вашої програми.

Для створення проекту виконайте команду File -\u003e New -\u003e Project. У вікні виберіть Java Project і натисніть «Далі». Вкажіть ім'я свого проекту. Зверніть увагу, що в директорії, зазначеної вами як робочий простір, буде створена папка з ім'ям вашого проекту (якщо, звичайно, не змінити налаштування в цьому вікні, чого для першого разу ми робити не будемо). Натисніть кнопку «Готово».

Основи основ синтаксису Java

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

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

Тепер в поданні PackageExplorer в лівій частині робочого середовища присутній ваш проект. У будь-який момент його можна видалити, клацнувши по його назві правою кнопкою миші і вибравши Delete. Після цього Eclipse запитає, знищити чи заодно папку з файлами проекту (при необхідності можна і знищити).

Якщо ви не видалили проект, до нього можна додати файли і папки за допомогою команд контекстного меню New -\u003e File і New -\u003e Folder відповідно. Якщо проект великий, то йому необхідна структура вкладених папок. Але в разі Java-проекту все трохи інакше. Справа в тому, що фрагменти Java-програми згруповані в пакети, А для кожного пакета створюється окрема папка. Пакет створюється командою New -\u003e Package. Для пакета теж треба придумати ім'я. В результаті в папці проекту буде створена нова папка з цим ім'ям. Можете перевірити.

Мітка - це ім'я, за яким слід одна з двох точок, що визначає початок інструкції. Мінлива \u003d? інструкція 1: інструкція 2. Якщо умова істинно, це інструкція 1 після виконання точки опитування; якщо воно помилкове, це інструкція 2 після виконання двох точок. Умова має бути в круглих дужках.

Ідентифікатори в Java

Таким чином: число дорівнює 1, якщо умова істинна, до 2, якщо умова помилкова. Також можливо зміцнити тернарние умови. Однак не рекомендується занадто систематично використовувати цю умову, яке занадто мало читаємо. Мовні дизайнери шукають способи полегшення створення та обслуговування коду. Зазвичай використовується метод полягає в структуруванні мови за допомогою «процедур», які є блоками коду, які виконують конкретну дію за даними програми. Ці процедури можуть бути згруповані в бібліотеки, які можуть використовуватися іншими програмістами.

Переглядати ресурси проекту може бути зручніше за допомогою уявлення Navigator. Відкрийте його командою Window -\u003e Show View. Ви побачите, що крім директорій проекту і пакета Eclipse створив два допоміжних файла.classpath і.project. Вони легко відкриються в редакторі, але особливого інтересу для нас вони зараз не представляють.

Програма на Java завжди складається з одного або декількох класів. Створити клас можна командою New -\u003e Class в контекстному меню уявлення Navigator (або Package Explorer, не має значення). При створенні класу необхідно вибрати пакет, до якого він буде ставитися (виберіть тільки що створений вами пакет) і придумати йому ім'я. Імена класів прийнято починати з великої літери. Якщо не дотриматися це правило хорошого тону, Eclipse видасть попередження, але нічого страшного не станеться.

Це ефективно, але має недолік в поділі коду і даних і чутливості до крайових ефектів. Мови об'єктів - це групувати дані і код в одну і ту ж сутність об'єкта. Це зібрання кодів даних називається «інкапсуляція». Деякі визначення класів.

- Вираз Lambda

Клас: це форма, яка дозволяє виробляти об'єкти. Об'єкт: це конкретна і корисна реалізація класу. В об'єктному жаргоні він називається «екземпляром» класу. Це процедури, які виконують дії, які можуть виконуватися над об'єктом. Повідомлення: Це виклик методу об'єкта.

Для наших цілей корисно поставити галочку в розділі «Які методи ви хочете створити в своєму класі?» навпроти опції public static void main (String args). В результаті в тілі класу буде згенеровано метод (функція) main (). Java вимагає, щоб хоча б в одному з класів програми існував метод з таким заголовком. Саме він і буде виконаний при старті програми.

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

Умовний оператор if

Методи визначають поведінку об'єктів прямокутника. Синтаксис для оголошення методу.

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

В результаті наших дій в папці пакета буде створений файл з ім'ям нашого класу і расшіреніем.java. Eclipse відкриє редактор коду, в якому відобразиться вміст цього файлу. Воно буде приблизно таким (імена пакета і класу, звичайно, можуть відрізнятися):

package mainPack; public class MyClass (/ ** * @param args * / public static void main (String args) ())

Команди, що становлять тіло функції, можна написати замість автоматично згенерованого коментаря // TODO Auto-generated method stub. Ми напишемо тільки одну команду, яка буде виводити на екран класичну рядок «Hello, world!»:

Робоче середовище Eclipse

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

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

System.out.println ( "Hello, world!");

Залишилося програму запустити. Для цього виконаємо команду Run -\u003e Run і отримаємо діалогове вікно з нетривіальними настройками запуску. У лівій частині цього вікна треба вибрати Java Application ( програма Java). Трохи подумавши, Eclipse знайде наш клас, що містить метод main () і запропонує почати запуск програми саме з нього (в правій частині вікна на вкладці Main повинні з'явитися назви нашого проекту і нашого класу). Крім цього увазі програміста пропонується ще кілька закладок. Наприклад, на другий з них - Arguments - пропонується ввести параметри командного рядка (Якщо програма розрахована на виклик з командного рядка з параметрами). Для нашої простої програми нічого додатково вказувати не потрібно. Просто натисніть кнопку Run.

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

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

В результаті роботи програми здійснюється виведення даних в так звану консоль. В операційній системі MS DOS консоллю служив весь екран монітора. Eclipse же відкриває нам уявлення Console, в якому (якщо все зроблено правильно) і відобразиться рядок "Hello, world!" - результат виведення нашої програми.

Тепер для повторного запуску програми (наприклад, якщо ми вирішили внести в неї якісь зміни або треба показати викладачеві), можна піти легшим шляхом - виконати команду Run -\u003e Run Last Launched (ще раз запустити попередній додаток) або просто натиснути Ctrl + F11.

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

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

Основи синтаксису мови Java

визначення

Операнд - величина, що бере участь в операції.

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

Оператори break і continue

Це методи, призначені для роботи з класом, а не з екземплярами. Щоб отримати доступ до статичного методу ззовні класу, ви повинні префікс імені методу з ім'ям класу або ім'ям екземпляра класу. Для поліпшення зручності читання коду рекомендується префікс імені методу з ім'ям класу. Надалі ми будемо використовувати цей запис.

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

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

Змінна - іменована область пам'яті ЕОМ, в якій програма може зберігати дані певного типу (звані значенням змінної) І звертатися до цих даних, використовуючи ім'я змінної.

Поняття програми та алгоритму (повторення)

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


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

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

Приступаючи до написання програми НЕОБХІДНО ВІДРАЗУ ЗРОЗУМІТИ:

  1. Для чого взагалі потрібна ця програма (що вона робить, в загальних рисах)?
  2. Які у цієї програми вхідні дані (і звідки вони беруться)?
  3. Які у цієї програми вихідні дані (і куди їх відправити)?
  4. Яким чином вхідні дані повинні бути перетворені в вихідні (алгоритм)? Це найскладніша частина роздумів програміста, але поки немає відповіді на три попередніх питання, приступати до неї не має сенсу.

При написанні простий програми необхідно:

  1. Отримати вхідні дані.
  2. Реалізувати алгоритм перетворення вхідних даних у вихідні.
  3. Видати результат роботи програми (вихідні дані): вивести на екран, передати по мережі і т.п.

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

Тому завжди починайте виконання вправ з визначення вхідних і вихідних даних. Якщо в цьому питанні є труднощі - зверніться до викладача.

Література по темі:

Основні конструкції алгоритму (повторення)

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

Отже, алгоритм - це послідовність дій по перетворенню вхідних даних у вихідні.

Алгоритм може бути записаний трьома основними способами:

Окремі кроки алгоритму (незалежно від того, яким чином він записаний) зв'язуються один з одним за допомогою трьох стандартних конструкцій, які реалізовані абсолютно у всіх мовах програмування:

    Послідовне виконання. Кроки виконуються один за одним.

    Розгалуження. Залежно від виконання деякого умови (в розглянутому прикладі це x\u003e y?) Виконується та чи інша гілка програми.

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

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

Перша діаграма виглядає зрозуміліше, але в разі, коли вивести треба не 5 чисел, а 100, діаграма (і програма, що відповідає цьому алгоритму) збільшиться в 20 разів, а в програмі, що відповідає другому алгоритму, зміниться тільки одне місце: 10 поміняється на 100 . Саме тому повторювані дії оформляють у вигляді циклів, хоча в багатьох випадках без них можна і обійтися.

Запам'ятайте: алгоритм повинен будуватися тільки з трьох названих конструкцій!

Література по темі:

1. Шкільний підручник інформатики.

Основи основ синтаксису Java

  1. Мова Java розрізняє великі та малі літери. Це означає, що імена всіх функцій і ключові слова слід записувати в точності так, як вони значаться в прикладах і довідниках.
  2. Кожна команда (оператор) в мові Java повинна закінчуватися крапкою з комою.
  3. Програма на Java складається з одного або декількох класів. Абсолютно вся функціональна частина програми (тобто те, що вона робить) повинна бути поміщена в методи тих чи інших класів. (Клас і метод, як поняття об'єктно-орієнтованого програмування, будуть розглядатися в третьому занятті. Там же буде розглянуто синтаксис класів. У перших вправах використовуйте класи, які за замовчуванням генерує Eclipse.)
  4. Класи групуються в пакети.
  5. Хоча б в одному з класів повинен існувати метод main (), в точності такий, як в розглянутому нами прикладі. (На перших порах розбиратися або намагатися запам'ятати правильне написання цього методу необов'язково - Eclipse все згенерує сам, якщо поставити потрібну галочку.) Саме цей метод і буде виконуватися першим.

У найпростішому випадку програма може складатися з одного (або навіть жодного) пакета, одного класу всередині пакету і єдиного методу main () всередині класу. Команди програми будуть записуватися між рядком

public static void main (String args) (

і закриває фігурної дужки), що позначає закінчення тіла методу. Цього підходу і слід дотримуватися при виконанні простих вправ.

Коментарі

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

  1. Ставляться дві косі риси //. З цього моменту і до кінця рядка можна писати все, що завгодно - Java буде вважати це коментарем.
  2. На початку коментаря ставляться символи / *, а в кінці - * /. В цьому випадку коментар може займати яке завгодно кількість рядків.
  3. особливо виділяються коментарі для документування, Які містяться між маркерами / ** і * /. Про їх використанні буде розказано пізніше.

Правила запису литералов

про різні форми запису литералов

Цілі числа (цілочисельні літерали) в Java можна записувати звичайним чином в десяткового формі: 12345, +4, -11.

Крім цього, можна записувати цілі числа в вісімковій формі, починаючи з нуля (0777, -056) і в шістнадцятковій формі, починаючи з нуля і латинської літери x (0xFFFF, 0x14, 0xA1BC).

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

Дійсне число можна записати в формі з плаваючою крапкою, Наприклад: 5.4e19, 17E-11, -123e + 4. Та частина числа, яка стоїть до букви e називається мантиссой, а частина, яка стоїть після букви e - порядком. Запис означає наступне: треба звести 10 в ступінь порядку і помножити на мантиссу. Іноді дійсно зручніше записати 1e-9, ніж 0.000000001.

Поодинокі символи записуються в апострофа, наприклад, "a", "D", "@".

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

Керуюча послідовність також полягає в апострофи.

У першому рядку таблиці йдеться, що будь-який символ можна задати за допомогою його коду (з десятковою маються на кодуванням від 0 до 255), записавши цей код в вісімковій системі числення. Наприклад, буква "ж" в кодуванні CP1251 запишеться керуючої послідовністю "\\ 346"

При необхідності можна вказати код будь-якого символу в кодуванні Unicode - після зворотної риси і латинської літери u - чотирма шестнадцатерічнимі символами. Наприклад, "\\ u0055" - це буква U.

Рядки символів записуються в лапках. Відкриває і закриває лапки повинні знаходитися в одному рядку програмного коду.

Для рядків визначена операція зчеплення +, яка дозволяє зібрати кілька рядків в одну ( "приписуючи" їх один до одного).

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

"Це дуже довга строкова константа, записана" + "На двох рядках вихідного тексту"

Керуючі символи і коди записуються всередині рядка точно також зі зворотним межею (але без апострофів).

Логічні літерали - це true (істина) і false (брехня).

ідентифікатори

про правила хорошого стилю

При програмуванні постійно виникає необхідність придумувати ідентифікатори для іменування об'єктів.

Ідентифікатор може складатися з букв, цифр, знаку підкреслення _ і знака долара $ (останній використовувати не рекомендується, Java користується ним для своїх потреб). Ідентифікатор не може починатися з цифри. В якості ідентифікаторів не можуть використовуватися ключові слова Java (а також літерали true, false і null).

Як було зазначено вище, мова Java розрізняє прості і малі літери. Це означає, що myAge, myage і MyAge - імена абсолютно різних об'єктів. Будьте уважні: помилка в регістрі - вельми поширений випадок!

Імена класів починаються з великої літери, якщо ім'я складається з декількох слів, то кожне слово починається з великої літери. Наприклад: MyClass, Book.

Імена методів і змінних починаються з малої (маленьких букв); якщо в імені міститься кілька слів, то кожне наступне слово починається з великої літери. Наприклад, myVar, x, y, newBigCounter.

Імена констант записуються повністю прописними літерами; якщо ім'я містить кілька слів, між ними ставиться знак підкреслення. Наприклад, PI, COUNT_OF_MONTHS.

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

типи даних

про типи даних Java

Для зберігання цілих чисел в Java найчастіше використовується тип int.

Взагалі в мові Java існує чотири цілочисельних типу: byte, short, int, long. Вони розрізняються об'ємом пам'яті, яка буде виділена під змінну і, відповідно, діапазоном значень, які можна в цій змінній зберігати. Найчастіше використовуваний тип int займає в пам'яті 4 байта і придатний для зберігання чисел від -2147483648 до 2147483647. Тип byte витрачає найменше пам'яті і підходить для роботи з невеликими числами (від -128 до 127). Типи short і long займають 2 і 8 байт відповідно.

Для дійсних чисел підходить тип double.

Дійсні (речові) числа (або числа з плаваючою точкою) представлені двома типами: float і double. Тип float займає 4 байта пам'яті і не дає великій мірі точності при роботі з дуже великими або дуже маленькими числами. Його рекомендують використовувати в разі, коли дрібна частина потрібна, але висока точність не потрібно (наприклад, для вимірювання відстаней в метрах, але з урахуванням сантиметрів і міліметрів або вимірювання цін в рублях з урахуванням копійок). При необхідності більш точних обчислень рекомендується оперувати з величинами типу double (наприклад, така змінна може зберігати величину синуса кута).

Дійсні літерали, такі як 5.3, 8.0, 2 e-3, Java вважає відносяться до типу double. Якщо вони повинні використовуватися в програмі як величини типу float, необхідно закінчувати їх на букву f: 5.3f, 8.0f, 2 e-3f.

Для зберігання одиночних символів використовується тип char. Java вважає його різновидом цілочисельних типів (оскільки кожен символ задається своїм кодом в кодуванні Unicode), так що до char застосовні всі операції з цілими числами.

Логічні величини (що приймають істинне або помилкове значення) представлені типом boolean.

Таким чином, в Java визначено вісім простих типів, особливості яких представлені в таблиці:

оголошення змінних

У мові Java (як і в багатьох інших мовах) потрібно описати перед її використанням. Описати змінну - значить дати їй ім'я і визначити її тип.

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

Приклади оголошення змінних:

int x; // Оголошення цілочисельний змінної x double a, b; // Оголошення двох дійсних змінних a і b char letter \u003d "Z"; // Оголошення символьної змінної letter, ініціалізація початковим значенням "Z" boolean b1 \u003d true, b2, b3 \u003d false; // Оголошення трьох логічних змінних, перша з них буде мати значення true, остання - false

Ocновние операції мови

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

математичні операції

Операції порівняння, результатом є значення логічного типу: true (істина) або false (брехня)

Логічні операції

про операції Java

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

операції зсуву

(Працюють з двійкового поданням першого операнда)

бітові операції

(Працюють з двійкового поданням операндів)

операція ?:

Операція ?: тернарного, тобто має три операнда. Перший операнд - умова, вираз логічного типу. Другий і третій операнди - вираження будь-якого іншого типу. Операція працює наступним чином: якщо умова одно true, вона повертає в якості результату свій другий операнд, а якщо false, то третій.

Наприклад, вираз (5\u003e 3)? 7 + 1: 2 * 2 буде мати значення 8, а вираз (5 \u003d\u003d 3)? 7 + 1: 2 * 2 - значення 4. Ця запис виглядає не дуже наочно, але програмісти часто використовують її для скорочення свого коду. Так, замість послідовності команд:

if (x\u003e 0) y \u003d 45 + a * 2; // оператор if розглядається нижче else y \u003d 45 - b * 3;

можна написати:

Y \u003d 45 + ((x\u003e 0)? A * 2: -b * 3);

оператор присвоювання

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

Значення зв'язується зі змінною за допомогою присвоювання. У мові Java він записується простим знаком рівності:

Мінлива \u003d вираз;

Зліва від оператора присвоювання завжди вказується змінна. справа має відповідати змінної по типу. Воно може являти собою просто (наприклад, число або символ):

X \u003d 7; // змінної x присвоюється значення 7 letter \u003d "Q"; // змінної letter присвоюється значення "Q"

У загальному випадку вираз - це те, що може бути обчислено (наприклад, результат математичної операції або результат, що повертається деяким методом):

A \u003d 7.5 + 2.4; // змінної a присвоюється 9.9 як результат обчислень

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

B \u003d a + 1;

змінна b прийме значення 10.9.

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

X \u003d x + 4;

Ця команда збільшує поточне значення цілочисельний змінної x на 4.

А такі команди записані неправильно і працювати не будуть:

5 \u003d x + 7; // зліва повинна стояти змінна x + 3 \u003d 14; // зліва повинна стояти просто одна змінна x \u003d 4.5; // змінна x може приймати тільки цілочисельні значення

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

про приведення типів

Коли змінної одного типу присвоюється величина іншого типу, відбувається використовується приведення (перетворення) типів. Для числових типів (byte, short, int, long, float, double, char) воно відбувається автоматично, якщо тип змінною змінної може "вмістити" значення іншого типу.

Наприклад, якщо змінної типу int привласнити значення типу byte, автоматично відбудеться перетворення типу byte в тип int. Аналогічно тип float може бути приведений до типу double і т.п.

При спробі привласнити змінної менш точного типу (наприклад, byte) значення більш точного типу (наприклад, int) компілятор видасть повідомлення про помилку.

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

long j \u003d (long) 1.0; // використовуємо оператор приведення типу до long, j \u003d 1 char ch \u003d (char) 1001; // використовуємо оператор приведення типу до char, ch \u003d "d" byte b2 \u003d (byte) (100); // використовуємо оператор приведення типу від int до byte, b2 \u003d 100 byte b3 \u003d (byte) (100 * 2); //увага! відбувається розподіл по модулю, b3 \u003d -56

Помилка розбіжності типів часто виникає стосовно дійсним ЛІТЕРАЛЬ. Наприклад, не можна виконати присвоювання a \u003d 7.5 + 2.4; , Якщо змінна a має тип float, оскільки літерали 7.5 і 2.4 вважаються які належать до типу double. Щоб не було помилки, необхідно використовувати приведення типів:

A \u003d (float) (7.5 + 2.4);

або вказати, що літерали також відносяться до типу float:

A \u003d 7.5f + 2.4f; // це теж правильна команда

Практично для кожної бінарної операції існує своя різновид оператора присвоювання. Наприклад, для операції додавання + існує унарний оператор присвоювання + \u003d, який збільшує значення операнда на задану величину:

X + \u003d 8; // те ж саме, що x \u003d x + 8 (x збільшується на 8)

Аналогічно для інших операцій: оператори * \u003d, - \u003d, / \u003d,% \u003d, & \u003d ^ \u003d і т.д:

X * \u003d 3; // те ж саме, що x \u003d x * 3 (x збільшується в 3 рази) b1 ^ \u003d b2; // те ж саме, що b1 \u003d b1 ^ b2

Вправа 1

Оголосіть дві цілочисельних змінних, надайте їм будь-які значення. Виведіть їх суму і твір.

Підказка: ви можете скористатися вже створеним в Eclipse проектом, вставивши потрібні команди після команди виведення рядка "Hello, world!" або замість неї.

Оператори інкремента і декремента

про операторів інкремента і декремента

Оператори інкремента і декремента ++ і - збільшують і зменшують на одиницю значення операнда. Набагато зручніше використовувати команду x ++; замість команди x \u003d x + 1;

Оператори інкремента і декремента теж повертають значення. Це означає, що правомірно виконати команду

Y \u003d 7 * x ++;

В результаті змінна x збільшиться на 1, а змінна y прийме значення, в сім разів більше старого значення x. Можна також виконати і таку команду:

Y \u003d 7 * ++ x;

В результаті змінна x збільшиться на 1, а змінна y прийме значення, в сім разів більше нового значення x.

Умовний оператор if

Найпростіша форма запису умовного оператора має вигляд:

if (умова) команда

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

if (x // якщо значення змінної x менше 17, x привласнити 17

Якщо ж необхідно, щоб в разі, коли умова помилкова, була виконана якась інша команда, використовують розширену форму оператора if:

if (умова) команда1 else команда2

про конструкцію else if

У прикладі, розглянутому вище, ми можемо захотіти привласнити змінної x значення 5, якщо умова x не виконується (навіщо воно нам, інше питання).

if (x else x \u003d 5;

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

if (условіе1) команда1 else if (условіе2) команда2 else if (условіе3) команда3 ... else командаN

Вправа 2

Оголосіть дві цілочисельних змінних, надайте їм будь-які значення. За допомогою оператора if знайдіть і виведіть їх максимум.

Підказка: алгоритм знаходження максимуму розглядався при повторенні основних конструкцій алгоритму.

складові команди

Кілька команд мови Java можна об'єднати в одну складову команду, використовуючи фігурні дужки (). Наприклад, можна записати:

(A \u003d 12; letter \u003d "D";)

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

if (x "S";) else (x \u003d 5;)

Конструкція з фігурних дужок називається також блоком команд, А фігурні дужки - межами блоку.

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

про оператора вибору switch

Оператор вибору switch

Часто вибір команди, яку необхідно виконати, залежить від значення деякої змінної (або виразу). Наприклад, користувачеві пропонується ввести знак операції і в залежності від введеного символу потрібно вивести на екран результат додавання, віднімання і т.п. або, якщо введено неправильні знак, повідомлення про помилку. У цьому випадку зручно використовувати оператор вибору switch, який має наступну форму запису:

switch (вираз) (case значення1: послідовність команд 1 break; case значення2: послідовність команд 2 break; ... default: послідовність команд за замовчуванням)

Значення1, значення2 і т.д. - це константи або вирази, в яких беруть участь тільки константи. Вираз в дужках після ключового слова switch може містити змінні. Це вираз обчислюється, а потім шукається відповідність результату з одним зі значень після ключового слова case. Якщо така відповідність знайдено, то виконується вся послідовність команд, розташована між двокрапкою та найближчої командою break. Якщо не знайдено жодного відповідності, виконається послідовність команд за замовчуванням, що стоїть після ключового слова default. наприклад:

char oper; // Знак операції, його вибере користувач ... // Будемо вважати, що до цього моменту користувач вибрав знак switch (oper) (case "+": System.out.println (a + b); break; case "-": System.out.println (a - b); break; case "*": System.out. println (a * b); break; default: System.out.println ( "Невірний знак операції"); }

Можна опустити розділ default. В цьому випадку якщо збіг не буде знайдено, не виконається ні одна команда.

Оператор циклу while

Цикл while має наступну форму:

while (умова) команда

Якщо умова в дужках (що представляє собою логічний вираз типу boolean) істинно, буде виконана команда - тіло циклу (Це може бути проста команда або послідовність команд в фігурних дужках), після чого програма знову повернеться до виконання цього оператора і буде повторювати це до тих пір, поки умова не виявиться помилковим.

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

Наприклад, наступний фрагмент програми виводить парні числа від 2 до 10:

int x \u003d 2; while (x<= 10){ System.out.println(x); x += 2; }

про циклі while з умовою поста

Існує інший варіант запису циклу while:

do команда while (умова)

При використанні цього варіанту спочатку виконується команда, а потім перевіряється умова. Обидва варіанти працюють однаково, але в другому випадку тіло циклу (команда) виконається хоча б один раз, навіть якщо умова спочатку помилково.

Вправа 3

За допомогою циклу while виведіть всі непарні числа від 1 до 10.

Підказка: трохи змініть алгоритм виведення парних чисел.

Оператор циклу for

Цикл for зазвичай використовується, коли відомо заздалегідь скільки разів має повторитися виконання команди (або послідовності команд). Він має наступну форму:

for (команда ініціалізації; умова; команда переходу) тіло_цикла

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

Зазвичай цикл for використовується в наступному вигляді:

for (int i \u003d 1; i<= 10; i++) тело_цикла;

У цьому прикладі тіло_цикла виконається рівно 10 разів. При цьому на кожній ітерації буде доступна змінна i (вона називається змінної циклу), послідовно пробігає значення від 1 до 10. Наступний фрагмент програми виводить парні числа від 2 до 10 (аналогічно прикладу циклу while):

for (int i \u003d 1; i<= 5; i++) System.out.println(i*2);

Вправа 4

За допомогою циклу for виведіть всі непарні числа від 1 до 10.

Оператори break і continue

Коли тіло циклу (for або while) складається з декількох команд, може виникнути ситуація, що на черговій ітерації виконувати їх все немає необхідності. В цьому випадку корисними виявляються оператори break і continue.

Оператор break припиняє виконання поточного циклу, незалежний від того, чи виконується умова його закінчення.

Оператор continue припиняє виконання поточної ітерації циклу. Тобто, якщо в тілі циклу зустрічається цей оператор, то інші, такі за ним команди пропускаються і починається нова ітерація (повторення) циклу.

висновок

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

додаткова література

1. Вязовик Н.А. Програмування на Java. (Глави 1 - 4, 7, 10)

2. Хабібуллін И.Ш. Самовчитель Java 2. (глава 1)

Зверніть особливу увагу на типи даних Java і правила приведення типів, порушені в даному посібнику недостатньо докладно. Професійний програміст завжди повинен контролювати в своїх програмах можливість виходу значення змінної за допустимий для її типу діапазон. Помилки, пов'язані з приведенням типів, одні з найпоширеніших і труднообнаружіваемих. Глави 4 і 7 першої книги настійно рекомендуються до прочитання всім студентам, які претендують на відмінну оцінку.

З моменту винаходу Java до поновлення синтаксису і функцій, варто відзначити кілька важливих етапів:

  • Java 1.0: Початок мови програмування.
  • Java 1.1, 1.2, 1.3, 1.4не так багато змін в синтаксисі і функції.
  • Java 1.5 (Або Java 5) відбулися великі зміни разом з додаванням деяких нових понять.
    • Generic (Загальний)
    • Autoboxing / Unboxing (Упаковка / розпакування)
    • Оновлення функції циклу for ( "Foreach").
    • Види перерахування. (Type-safe enumerations).
    • Varargs (Змінні аргументи)
    • Статичний імпорт (Static import)
    • Metadata (Метадані)
  • Java 6,7 немає великих змін в мові.
  • Java 8 відбулася велика зміна в мові, поряд з додаванням деяких нових понять і функцій:
    • Методи за замовчуванням для інтерфейсу (Default interface methods)
    • Lambda вираження (Lambda expressions)
    • довідкові методи
    • Повторювані анотації (Repeatable annotations)
    • Потік (stream)

У цій статті я ознайомлю вас з функціями і синтаксис Java 8.

2 Методи за замовчуванням для інтерфейсу

Java 8 дозволяє вам додати невізуальний метод в інтерфейс, використовуючи ключевок слово default. Ці методи розуміються як розширені методи. Це ваш перший приклад:

Package org.o7planning.tutorial.j8.itf; public interface Formula (// Оголосити абстрактний метод. double calculate (int a); // Оголосити неабстрактне метод. // Використовувати ключевок слово default. // (Функція вважає квадратний корінь числа). default double sqrt (int a) (return Math .sqrt (a);))

І клас FormulaImplреалізує interface Formula .

FormulaImpl.java

Package org.o7planning.tutorial.j8.itf; // Клас виконує interface Formula. public class FormulaImpl implements Formula (// Потрібно лише виконати абстрактний метод Formula. @Override public double calculate (int a) (return a * a - a;))

FormulaTest.java

Package org.o7planning.tutorial.j8.itf; public class FormulaTest (public static void main (String args) (Formula formula \u003d new FormulaImpl (); // \u003d\u003d\u003e 5 double value1 \u003d formula.sqrt (25); System.out.println ( "Value1 \u003d" + value1) ; // \u003d\u003d\u003e 600 double value2 \u003d formula.calculate (25); System.out.println ( "value2 \u003d" + value2);))

3 Functional Interface (Функціональний інтерфейс)

Java8 вважає, що інтерфейси мають один абстрактний метод - це Functional Interface (Функціональний інтерфейс). Ви можете використовувати анотацію @FuctionalInterface, Щоб відзначити ваш інтерфейс як Функціональний інтерфейс, це не обов'язково. Однак компілятор (complier) Javaповідомить вас про помилку, якщо по ненавмисно додати інший абстрактний метод в інтерфейс, відзначений цією інструкцією.

Нижче є деякі практичні приклади з @FunctionalInterface:

Наведений нижче приклад є дійсним FunctionalInterface , Тому що він має тільки один абстрактний метод.

Package org.o7planning.tutorial.j8.funcitf; @FunctionalInterface public interface Foo (void something (); default void defaultMethod () (System.out.println ( "..");))

недійсне:



дійсно:



недійсне:



дійсно:



4 Вираз Lambda

Спочатку ми розглянемо, як Java до версії 8 організовує Collection .

Дивіться також:

SortBefore8Example.java

Package org.o7planning.tutorial.j8.lambda; import java.util.Arrays; import java.util.Collections; import java.util.Comparator; import java.util.List; public class SortBefore8Example (public static void main (String args) (// Список фруктів. List fruits \u003d Arrays.asList ( "Grapefruit", "Apple", "Durian", "Cherry"); // Використовувати утилітарний метод Collections // щоб перерозподілити колекцію. // Надати Comparator (Компаратор). Collections.sort (fruits, new Comparator () (@Override public int compare (String o1, String o2) (return o1.compareTo (o2);))); for (String fruit: fruits) (System.out.println (fruit);)))

Результат запуску прикладу вище:



Java 8 вважає що інтерфейси, мають тільки один метод, який є функціональним інтерфейсом ( Functional Interface). Відповідно, при реалізації інтерфейсу вам потрібно всього лише написати метод, який реалізує цей єдиний абстрактний метод. Comparator - це інтерфейс, який має тільки один абстрактний метод, і це функціональний інтерфейс ( Functional Interface). Ви можете переписати наведений вище приклад з синтаксисом Lambda Java 8:

SortJava8Example.java

Package org.o7planning.tutorial.j8.lambda; import java.util.Arrays; import java.util.Collections; import java.util.List; public class SortJava8Example (public static void main (String args) (// Список фруктів. List fruits \u003d Arrays.asList ( "Grapefruit", "Apple", "Durian", "Cherry"); // Використовувати утилітарний метод Collections щоб перерозподілити список вище. // Надати Comparator (Компаратор) для другого параметра методу. // Так як Comparator це інтерфейс з єдиним методом. // \u003d\u003d\u003e Можна скоротити з виразом Lambda. // Не потрібно писати назву інтерфейсу, // Не потрібно писати назву методу. Collections.sort (fruits, (String o1, String o2) -\u003e (return o1.compareTo (o2);)); for (String fruit: fruits) (System.out.println (fruit);)))

У блоці команд, якщо є тільки одна команди, ви можете видалити (), і ви можете написати цей розділ коду більш коротким чином.

Collections.sort (fruits, (String o1, String o2) -\u003e o1.compareTo (o2));

Навіть компілятор (compilier) Javaдосить розумний, щоб визначити, який вид елементів вам потрібно організувати, в цьому прикладі це вид String. Таким чином, компаратор ( Comparator ), Безумовно, означає порівняння видів даних String. Ви можете написати це більш коротко.

Collections.sort (fruits, (o1, o2) -\u003e o1.compareTo (o2));

Інші приклади з виразом Lambda.

Package org.o7planning.tutorial.j8.lambda; @FunctionalInterface public interface Converter (T convert (F from);)

використовуйте інтерфейс Converter у вигляді Java до версії 8 (це означає, що не використовуйте Lambda).

ConverterBefore8Example.java

Package org.o7planning.tutorial.j8.lambda; public class ConverterBefore8Example (public static void main (String args) (// Ініціалізувати об'єкт Converter. Converter converter \u003d new Converter () (@Override public Integer convert (String from) (return Integer.parseInt (from);)); // \u003d\u003d\u003e 100 Integer value \u003d converter.convert ( "0100"); System.out.println ( "Value \u003d" (! LANG: + value);))

Використання виразу Lambda на Java 8:

ConveterJava8Example.java

Package org.o7planning.tutorial.j8.lambda; public class ConveterJava8Example (public static void main (String args) (// Converter (Конвертор) є FunctionalInterface // Використовувати синтаксис в Java 8 (Lambda) // В разі: Створити об'єкт безпосередньо з FunctionalInterface. Converter converter1 \u003d (String from) -\u003e (return Integer.parseInt (from);); // \u003d\u003d\u003e 100 Integer value1 \u003d converter1.convert ("0100"); System.out.println("Value1 = " + value1); // Или проще: Converter!} converter2 \u003d (from) -\u003e Integer .parseInt (from); // \u003d\u003d\u003e 200 Integer value2 \u003d converter2.convert ( "00200"); System.out.println ( "Value2 \u003d" + value2); // Якщо метод має тільки один параметр, можна пропустити (). Converter converter3 \u003d from -\u003e Integer .parseInt (from); // \u003d\u003d\u003e 300 Integer value3 \u003d converter3.convert ( "00300"); System.out.println ( "Value3 \u003d" + value3); ))

5 Functional Interface API

5.1 java.util.function.Consumer

Consumer (Споживач) Java 8. Він має єдиний абстрактний метод, який приймає вхідний параметр, і цей метод нічого не повертає.

Package java.util.function; import java.util.Objects; @FunctionalInterface public interface Consumer (// Метод приймає один вхідний параметр і нічого не повертає. Void accept (T t);)

Використання методу List.forEach (Consumer) :

// java.util.List extends java.util.Collection (extends Iterable) // Interface java.util.Iterable: default void forEach (Consumer action) (Objects.requireNonNull (action); for (T t: this) (action.accept (t);))

ConsumerExample.java

Package org.o7planning.tutorial.j8.api; import java.util.Arrays; import java.util.List; import java.util.function.Consumer; public class ConsumerExample (// Використовувати метод List.forEach (Consumer) з синтаксисом в Java< 8. // Напечатать список элементов List. public static void beforeJ8() { List list \u003d Arrays.asList ( "a", "b", "c", "a1", "a2"); list.forEach (new Consumer () (@Override public void accept (String t) (System.out.println (t);))); ) // Використовувати метод List.forEach (Consumer) з синтаксисом в Java 8. // Використовуючи вираз Lambda. public static void java8Consumer () (List list \u003d Arrays.asList ( "a", "b", "c", "a1", "a2"); list.forEach ((String t) -\u003e (System.out.println (t);)); ) // Використовувати метод List.forEach (Consumer) з синтаксисом в Java 8. // Використовуючи вираз Lambda. // (Простіше) public static void java8ConsumerMoreSimple () (List list \u003d Arrays.asList ( "a", "b", "c", "a1", "a2"); list.forEach ((String t) -\u003e System.out.println (t)); ))

5.2- java.util.function.Predicate

Predicate - це доступний функціональний інтерфейс Java 8. Він має єдиний абстрактний метод, який приймає вхідний параметр, і метод повертає значення boolean (True / false). Цей метод використовується для оцінки того, чи підходить вхідний параметр для чогось логічного чи ні.

Package java.util.function; import java.util.Objects; @FunctionalInterface public interface Predicate (// Оцінює вхідний параметр і повертає true або false. Boolean test (T t);)

У наступному прикладі ми будемо фільтрувати список цілих непарних чисел, використовуючи Predicate, Який приймає форму Java8 і попередніх версій.

PredicateExample.java

Package org.o7planning.tutorial.j8.api; import java.util.Arrays; import java.util.List; import java.util.function.Predicate; import java.util.stream.Stream; public class PredicateExample (// Використовувати метод Stream.filter (Predicate ) По синтаксису в Java< 8. // Отфильтровать список целых чисел и напечатать нечетные числа. public static void beforeJ8() { List stream2 \u003d stream.filter (new Predicate () (@Override public boolean test (Integer t) (return t% 2 \u003d\u003d 1;))); ) // Використовувати метод Stream.filter (Predicate ) По синтаксису в Java\u003e \u003d 8. // Відфільтрувати список цілих чисел і надрукувати непарні числа. // Використовуючи вираз Lambda. public static void java8Predicate () (List list \u003d Arrays.asList (1, 4, 5, 1, 7, 8); // Stream містить елементи списку вище. Stream stream \u003d list.stream (); // Новий Stream містить тільки непарні числа. Stream stream2 \u003d stream.filter (t -\u003e (return t% 2 \u003d\u003d 1;)); // Stream.forEach (Consumer ) Stream2.forEach (t -\u003e System.out.println (t)); ) // Ще простіше і коротше. public static void java8ConsumerMoreSimple () (List list \u003d Arrays.asList (1, 4, 5, 1, 7, 8); // Stream містить елементи списку вище. Stream stream \u003d list.stream (); stream.filter (t -\u003e t% 2 \u003d\u003d 1) .forEach (t -\u003e System.out.println (t)); ))

5.3- java.util.function.Function

Function - це доступний функціональний інтерфейс Java 8. Він має єдиний абстрактний метод, який приймає вхідний параметр, і метод повертає інший об'єкт.

Package java.util.function; import java.util.Objects; @FunctionalInterface public interface Function (// Цей метод приймає один параметр. // Повертає одне значення R apply (T t);)

Приклад: Дан список String, роздрукуйте String в списку з великими літерами

FunctionExample.java

Package org.o7planning.tutorial.j8.api; import java.util.Arrays; import java.util.List; import java.util.function.Function; import java.util.stream.Stream; public class FunctionExample (// Використовувати метод Stream.map (Function) з синтаксисом в Java< 8. // Напечатать список элементов List. public static void beforeJ8() { List stream \u003d list.stream (); // Stream.map (Function): // Stream map (Function mapper); // Повертає новий Stream, зі зміненими елементами. Stream streamUpper \u003d stream.map (new Function () (@Override public String apply (String t) (return t \u003d\u003d null? Null: t.toUpperCase ();))); streamUpper.forEach (t -\u003e System.out.println (t)); ) Public static void java8Function () (List list \u003d Arrays.asList ( "a", "c", "B", "e", "g"); // Stream містить елементи списку. Stream stream \u003d list.stream (); stream.map (t -\u003e t \u003d\u003d null? null: t.toUpperCase ()). forEach (t -\u003e System.out.println (t)); ) Public static void main (String args) (beforeJ8 (); java8Function ();))

Аналогічні функціональні інтерфейси (Functional interface):

  • java.util.function.IntFunction
  • java.util.function.DoubleFunction
  • java.util.function.LongFunction

@FunctionalInterface public interface IntFunction (R apply (int value);) @FunctionalInterface public interface LongFunction (R apply (long value);) @FunctionalInterface public interface DoubleFunction (R apply (double value);)

5.4- java.util.function.Supplier

Supplier - це доступний функціональний інтерфейс Java 8. Він має єдиний абстрактний метод без параметра, а метод повертає об'єкт.

Package java.util.function; @FunctionalInterface public interface Supplier (// Цей метод не має параметрів. // Але повертає результат. T get ();)

SupplierExample.java

Package org.o7planning.tutorial.j8.api; import java.util.function.Supplier; public class SupplierExample (// Метод з параметром Supplier . public static void display (Supplier supp) (System.out.println (supp.get ());) // Чи не використовуючи вираз Lambda. public static void beforeJ8 () (display (new Supplier () (@Override public String get () (return "Hello";))); display (new Supplier () (@Override public String get () (return "World";))); ) // Використовуючи вираз Lambda. public static void java8Supplier () (display (() -\u003e (return "Hello";)); display (() -\u003e (return "World";));) // Використовуючи вираз Lambda. // (Ще коротше). public static void java8SupplierShortest () (display (() -\u003e "Hello"); display (() -\u003e "World");) public static void main (String args) (beforeJ8 (); System.out.println ( " ----------- "); java8SupplierShortest ();))

Int a і b і повертає значення int.

MyFunction.java

Package org.o7planning.tutorial.j8.mref; @FunctionalInterface public interface MyFunction (// Цей метод має 2 параметра a, b і повертає вид int. Public int doSomething (int a, int b);)

MyMathUtils - це клас з двома статичними методами, використовуваними для обчислення суми і різниця двох чисел int.

MyMathUtils.java

Package org.o7planning.tutorial.j8.mref; public class MyMathUtils (// Цей метод має 2 параметра a, b і повертає вид int. // Цей метод має іншу назву, // але структура схожа на MyFunction.doSomething (int, int). public static int sum (int a, int b) (return a + b;) public static int minus (int a, int b) (return a - b;))

MethodReferenceExample.java

Package org.o7planning.tutorial.j8.mref; public class MethodReferenceExample (// Третій параметр даного методу є MyFunction (Functional Interface). // При використанні даного методу: // Ви можете передати посилання методу для третього параметра. // (Методи повинні бути одного виду з MyFunction). public static int action (int a, int b, MyFunction func) (return func.doSomething (a, b);) public static void main (String args) (int a \u003d 100; int b \u003d 30; // Надіслати адресу методу MyMathUtils.sum . int c \u003d action (a, b, MyMathUtils :: sum); // \u003d\u003d\u003e 130. System.out.println ( "c \u003d" + c); // Надіслати адресу методу MyMathUtils.minus. int d \u003d action (a, b, MyMathUtils :: minus); // \u003d\u003d\u003e 70 System.out.println ( "d \u003d" + d); // Надіслати адресу методу Math.subtractExact. int e \u003d action (a, b, Math :: subtractExact); // \u003d\u003d\u003e 70 System.out.println ( "e \u003d" + e); // Надіслати адресу методу Math.min. int f \u003d action (a, b, Math :: min); / / \u003d\u003d\u003e 30 System.out.println ( "f \u003d" + f);))

За прикладом вище, ви можете побачити спосіб використання ключового слова :: щоб передати посилання методу. Якщо ви викликаєте метод, а в тому методі є аргумент Functional Interface, Ви можете передати метод посилання зі структурою схожою на структуру методу визначення в Functional interface.