Java
Матеріал з Вікіпедії — вільної енциклопедії.
| Парадигма: | об'єктно орієнтована, структурна, імперативна |
|---|---|
| Дата появи: | 1995 |
| Дизайнер: | Sun Microsystems |
| Система типізації: | статична, сувора, безпечна, називна, явна |
| Під впливом від: | Objective C, C++, Smalltalk, Eiffel[1], Ada 83, C#[2],Mesa,[3] Modula-3[4] |
| Вплинула на: | C#, D, J#, Ada 2005, ECMAScript, Groovy, PHP, Scala, JavaScript |
| ОС: | Мультиплатформна |
| Ліцензія: | GNU General Public License / Java Community Process |
| Сторінка інтернет: | http://java.sun.com |
Java (вимовляється Джава; у розмовному варіанті Ява) — об'єктно-орієнтована мова програмування, випущена компанією Sun Microsystems у 1995 році як основний компонент платформи Java. Синтаксис мови багато в чому походить від C та C++. У офіційній реалізації, Java програми компілюються у байткод, який при виконанні інтерпретується віртуальною машиною для конкретної платформи.
Sun Microsystems надає компілятор Java та віртуальну машину Java, які задовольняють специфікації Java Community Process, під ліцезією GNU General Public License.
Мова значно запозичила синтаксис із C і C++. Зокрема, взято за основу об'єктну модель С++, проте її модифіковано. Усунуто можливість появи деяких конфліктних ситуацій, що могли виникнути через помилки програміста та полегшено сам процес розробки об'єктно-орієнтованих програм. Ряд дій, які в С/C++ повинні здійснювати програмісти покладено на віртуальну машину. Java, передусім, розроблялась як платформо-незалежна мова, тому, вона має менше низькорівневих можливостей для роботи з апаратним забезпеченням. В разі необхідності таких дій, java дозволяє викликати підпрограми написані на інших мовах програмування.
Java вплинула на розвиток J++,що розроблялась компанією Microsoft. Робота над J++ зупинено через судовий позов компанії Sun Microsystems, оскільки, являла собою модифікацію Java. Пізніше в новій платформі Microsoft .NET випустило J#, щоб полегшити міграцію програмістів J++ або Java на нову платформу. З часом, нова мова програмування С#, стала основною мовою платформи, перейнявши багато чого з Java. J# востаннє включався в версію Microsoft Visual Studio 2005. Мова сценаріїв JavaScript має схожу із Java назву і синтаксис, але не пов'язана із Java.
Зміст |
[ред.] Історія
Мова програмування Java зародилася в 1991 р. в лабораторіях компанії Sun Microsystems. Розробку проекту започаткував Джеймс Ґослінґ. Створення першої робочої версії, яка мала назву «Oak», зайняло 18 місяців; у 1995 р. проект було перейменовано на «Java», де назву було взято зі списку випадкових слів.
Головним мотивом створення Java була потреба в мові програмування, яка б не залежала від платформи (тобто від архітектури) і яку можна було б використовувати для створення програмного забезпечення, яке вбудовується в різноманітні побутові електронні прилади, такі як мобільні засоби зв'язку, пристрої дистанційного керування тощо.
Досить скоро майже всі найпопулярніші тогочасні веб-оглядачі отримали можливість запускати «безпечні» для системи Java аплети всередині веб-сторінок. У грудні 1998 р. Sun Microsystems випустила Java 2 (спершу під назвою J2SE 1.2), де було реалізовано декілька конфігурацій для різних типів платформ. Наприклад, J2EE призначалася для створення корпоративних додатків, а значно урізана J2ME для приладів з обмеженими ресурсами, таких як мобільні телефони. У 2006 році в маркетингових цілях, Версії J2 було перейменовано у Java EE, Java ME та Java SE, відповідно.
13 листопада 2006 року Sun випустили більшу частину Java в якості вільного та відкритого програмного забезпечення у відповідності з умовами GNU General Public License (GPL). 8 травня 2007 корпорація закінчила процес, в результаті якого всі початкові коди Java були випущенні під GPL, за винятком невеликої частини коду, на який Sun не мала авторського права.
Період становлення Java збігся у часі з розквітом міжнародної інформаційної служби World Wide Web. Ця обставина відіграла вирішальну роль у майбутньому Java, оскільки Web теж вимагала платформо-незалежних програм. Як наслідок, були зміщені акценти в розробці Sun з побутової електроніки на програмування для Інтернет.
[ред.] Головні концепції
[ред.] Початкові цілі
У створенні мови програмування Java було п'ять початкових цілей:[5]
- Синтаксис мови повинен бути «простим, об'єктно-орієнтовним та звичним».
- Реалізація має бути «безвідмовною та безпечною», а також «високопродуктивною».
- Повинна зберегтися «незалежність від архітектури та портативність».
- Мова має бути «динамічною, інтерпретованою та підтримувати мультиопрацьовування».
[ред.] Платформа Java
Під «незалежністю від архітектури» мається на увазі те, що програма, написана на мові Java, працюватиме на будь-якій підтримуваній апаратній чи системній платформі без змін у початковому коді та перекомпіляції.
Цього можна досягти, компілюючи початковий Java код у байт код, який являє собою спрощені машинні команди. Потім програму можна виконати на будь-якій платформі, що має встановлену віртуальну машину Java, яка інтерпретує байткод у код, пристосований до специфіки конкретної операційної системи і процесора. Зараз віртуальні машини Java існують для більшості процесорів і операційних систем.
Стандартні бібліотеки забезпечують загальний спосіб доступу до таких платформозалежних особливостей, як обробка графіки, багатопотоковість та роботу з мережами. У деяких версіях задля збільшення продуктивності JVM, байт-код можна компілювати у машинний код до, або під час виконання програми.
Основна перевага використання байт-коду — це портативність. Тим не менш, додаткові витрати на інтерпретацію означають, що інтерпретовані програми будуть майже завжди працювати повільніше, ніж скомпільовані у машинний код, і саме тому Java одержала репутацію «повільної» мови. Проте, цей розрив суттєво скоротився після введення декількох методів оптимізації у сучасних реалізаціях JVM.
Одним із таких методів є англ. just-in-time (JIT) компіляція, що перетворює Java байт-код у машинний під час першого запуску програми, а потім кешує його. У результаті, така програма запускається і виконується швидше, ніж простий інтерпретований код, але ціною додаткових витрат на компіляцію під час виконання. Складніші віртуальні машини також використовують динамічну рекомпіляцію, яка полягає в тому, що В. М. аналізує поведінку запущеної програми й вибірково рекомпілює та оптимізує певні її частини. З використанням динамічної рекомпіляції можна досягти більшого рівня оптимізації, ніж за статичної компіляції, оскільки динамічний компілятор може робити оптимізації на базі знань про довкілля періоду виконання та про завантажені класи. До того ж, він може виявляти так звані гарячі точки (англ. hot spots) —- частини програми, найчастіше внутрішні цикли, які займають найбільше часу при виконанні. JIT компіляція та динамічна рекомпіляція збільшує швидкість Java програм, не втрачаючи при цьому портативності.
Існує ще одна технологія оптимізації байткоду, широко відома як статична компіляція, або англ. ahead-of-time (AOT) компіляція. Цей метод передбачає, як і традиційні компілятори, безпосередню компіляцію у машинний код. Це забезпечує хороші показники в порівнянні з інтерпретацією, але за рахунок втрати переносності: скомпільовану таким способом програму можна запустити тільки на одній, цільовій платформі.
Швидкість офіційної віртуальної машини Java значно покращилася з моменту випуску ранніх версій, до того ж, деякі випробування показали, що продуктивність JIT компіляторів у порівнянні зі звичайними компіляторами у машинний код майже однакова. Проте ефективність компіляторів не завжди свідчить про швидкість виконання скомпільованого коду, тільки ретельне тестування може виявити справжню ефективність у даній системі.
[ред.] Об'єктність
На противагу C++, Java більш об'єктно-орієнтована. Всі дані і дії групуються в класи об'єктів. Виключенням з повної об'єктності (як скажімо в Smalltalk) є примітивні типи (int, float тощо). Це було свідомим рішення проектувальників мови задля збільшення швидкості. Через це, Java не вважається повністю об'єктно-орієнтовною мовою.
У Java всі об'єкти є похідними від головного об'єкту (він називається просто Object), з якого вони успадковують базову поведінку і властивості.
Хоча у C++ вперше стало доступне багаторазове успадкування, але у Java можливе тільки одинарне успадкування, завдяки чому виключається можливість конфліктів між властивостями, які передаються через базові класи.
[ред.] Безвідмовність і безпека
У намірах проектувальників Java мала замінити C++ — об'єктного наступника мови C.[6] Проектувальники почали з аналізу властивостей C++, які є причиною найбільшого числа помилок, щоби створити просту, безпечну і безвідмовну мову програмування.
В Java існує система винятків або ситуацій, коли програма зустрічається з неочікуваними труднощами, наприклад:
- операції над елементом масиву поза його межами або над порожнім елементом
- читання з недоступного каталогу або неправильної адреси URL
- ввід недопустимих даних користувачем
Одна з особливостей концепції віртуальної машини полягає в тому, що помилки (виключення) не призводять до повного краху системи. Крім того, існують інструменти, які «приєднуються» до середовища періоду виконання і кожен раз, коли сталося певне виключення, записують інформацію з пам'яті для відлагодження програми. Ці інструменти автоматизованої обробки виключень надають основну інформацію щодо виключень в програмах на Java.
[ред.] Автоматичне керування пам'яттю
-
Дивись також: Прибирання сміття
Java використовує автоматичний збирач сміття для керування пам'яттю під час життєвого циклу об'єкта. Програміст вирішує, коли створювати об'єкти, а віртуальна машина відповідальна за звільнення пам'яті після того, як об'єкт стає непотрібним. Коли до певного об'єкту вже не залишається посилань, збирач сміття може автоматично прибирати його із пам'яті. Проте, витік пам'яті все ж може статися, якщо код, написаний програмістом, має посилання на вже непотрібні об'єкти, наприклад на об'єкти, що зберігаються у діючих контейнерах.
Прибирання сміття дозволене у будь-який час. В ідеалі воно відбувається під час бездіяльності програми. Збірка сміття автоматично форсується при нестачі вільної пам'яті в купі для розміщення нового об'єкта, що може призводити до кількасекундного зависання. Тому існують реалізації віртуальної машини Java з прибиральником сміття спеціально створеним для програмування систем реального часу.
Java не має підтримки вказівників у стилі C/C++. Це зроблено задля безпеки й надійності, аби дозволити збирачу сміття переміщувати вказівникові об'єкти.
[ред.] Приклад програми
Програма, яка виводить «Hello, World!»:
public class HelloWorld { public static void main(String[] args) { System.out.println("Hello, World!"); } }
[ред.] Випуски
- JDK 1.0 (23 січня, 1996)
- JDK 1.1 (19 жовтня, 1997) — додано внутрішні класи, JavaBeans, JDBC, RMI, перероблено події AWT
- J2SE 1.2 (Playground) 4 грудня, 1998 — поділ на 3 редакції: J2SE (Java 2 Platform, Standard Edition), J2EE (Java 2 Platform, Enterprise Edition), J2ME (Java 2 Platform, Micro Edition), strictfp, reflection, Swing, JIT compiler, Collections
- J2SE 1.3 (Kestrel) 8 травня, 2000
- J2SE 1.4.0 (Merlin) 13 лютого, 2002
- J2SE 5.0 (1.5.0) (Tiger) 29 вересня, 2004
- Java SE 6 (1.6.0) (Mustang) 11 грудня, 2006 [3]
- Java SE 7 (1.7.0) (Dolphin) очікується у 2010
[ред.] Структура Java програми
Програми на Java утворені з визначень класів та інтерфейсів. Класи містять змінні та сталі, які утримують дані, методи, які виконують дії, та конструктори, які створююсть екземпляри класів — об'єкти. Дані можуть мати простий тип (наприклад байт, ціле число, символ) або бути посиланням на об'єкт. Мова Java є статично типізованою.
[ред.] Лексична структура
Java програми записуються в Юнікоді, також надається лексичне перетворення, яке дозволяє записувати символи Юнікоду керівними кодами Unicode за допомогою лише множини символів ASCII. Мова Java представляє текст послідовностями 16-бітний кодових одиниць, використовуючи кодування UTF-16. За винятком коментарів, ідентифікаторів та вмісту символьних та рядкових літералів, всі вхідні елементи програми на Java складаються із символів ASCII або відповідних їм керівних кодів Unicode.
[ред.] Типи даних
Java є суворо типізованою мовою, кожна змінна та вираз має тип, відомий на етапі компіляції.
Типи мови Java належать до двох категорій: прості (primitive) та вказівникові (reference). До простих типів належить бульовий(логічний) тип, числові типи та символьний тип.
Числові типи складаються із цілих типів byte, short, int, long та дійсних типів float, double. Символьний тип представлений типом char. Вказівникові типи складаються із класів, інтерфейсів, масивів. Значенням вказівникового типу є вказівник на об'єкт — екземпляр класу чи масиву. Рядки є об'єктами класу String.
[ред.] Цілі типи
| тип | мін. | макс. |
|---|---|---|
| byte | −27 | 27-1 |
| short | −215 | 215-1 |
| int | −231 | 231-1 |
| long | −263 | 263-1 |
| char | 0 | 216-1 |
[ред.] Примітки
- ↑ The Java Language Environment (May 1996).
- ↑ В Java 5.0 було додано декілька нових можливостей( вдосконалений цикл for, autoboxing, varargs та анотації), після того, як вони були представлені в C#. [1][2]
- ↑ The Java Language Specification, 2nd Edition.
- ↑ http://www.computerworld.com.au/index.php/id;1422447371;pp;3;fp;4194304;fpid;1
- ↑ 1.2 Design Goals of the JavaTM Programming Language
- ↑ http://java.sun.com/docs/books/tutorial/getStarted/intro/changemylife.html
[ред.] Дивіться також
[ред.] Ресурси інтернет
- Домашня сторінка Java
- Java для розробників
- Java Language Specification 3rd Edition
- Стисла історія Green Project
- Java: Історія з середини
- На Java дуже сильно вплинув Objective-C
- Сага про Java
- Історія Java
- Довга подорож в Java
- M254 Java Everywhere (вільний документ з Open University)
- Перелік мов програмування для Java Virtual Machine
[ред.] Бібліографія
- Bruce Eckel. Thinking in Java (4th Edition) (2006), Prentice Hall PTR. ISBN 978-0131872486.
- Joshua Bloch. Effective Java (2nd Edition) (2008), Prentice Hall PTR. ISBN 978-0321356680.
- James Gosling; Bill Joy, Guy Steele, Gilad Bracha. The Java Language Specification, Third Edition (2005), Addison-Wesley. ISBN 0-321-24678-0.
| Це незавершена стаття про мови програмування. Ви можете допомогти проекту, виправивши або дописавши її. |