Что за язык java
Перейти к содержимому

Что за язык java

  • автор:

Язык программирования Java

Java задумывался как универсальный язык программирования, который можно применять для различного рода задач. И к настоящему времени язык Java проделал большой путь, было издано множество различных версий. Текущей версией является Java 18, которая вышла 22 марта 2022 года. А Java превратилась из просто универсального языка в целую платформу и экосистему, которая объединяет различные технологии, используемые для целого ряда задач: от создания десктопных приложений, до написания крупных веб-порталов и сервисов. Кроме того, язык Java активно применяется для создания программного обеспечения для множества устройств: обычных ПК, планшетов, смартфонов и мобильных телефонов и даже бытовой техники. Достаточно вспомнить популярность мобильной ОС Android, большинство программ для которой пишутся именно на Java.

История

История JAVA началась еще в 1991 году, когда Патрик Ноутон, Билл Джой и Джеймс Гослинг начали работу над собственным проектом. Основной целью проекта было создание аппаратно-программной платформы нового поколения, использование которой не требовало бы специальных знаний. Проект получил название «Green». В ходе работ возникла потребность в новом языке программирования, который был бы максимально универсальным и мог бы применяться на любых платформах. Так появился «Oak».

Язык программирования JAVA в том виде, в котором мы его знаем, появился далеко не сразу. Несколько лет подряд разработчики пытались внедрить новую технологию в различные сферы, начиная от интерактивного телевидения и заканчивая игровыми приставками, но везде потерпели неудачу. Первым продвижением с мертвой точки стало создание в 1994 году браузера «WebRunner», который был способен отображать интерактивные программы-апплеты, встроенные непосредственно в страницы. Новый браузер обладал всем необходимым набором для того, чтобы стать популярным:

  • Универсальность, отсутствие привязки к конкретной платформе;
  • Не требовал предварительной установки приложений;
  • Быстро загружался за счет компактного кода;
  • Имел встроенную систему безопасности

Новый браузер начинал становиться популярным, и в итоге в 1995 году «Oak» получил новое имя. Так родился язык программирования JAVA, таким, каким мы его знаем. Браузер переименовался в «HotJava», однако его существование уже подходило к концу. А вот JAVA начал победное шествие по миру. В 1997 году JAVA перетерпел ряд существенных обновлений , разделился на несколько отдельных платформ и начал приобретать все более и более широкую популярность, которая не угасла и по сей день.

Область применения

Благодаря своей уникальности, JAVA получил распространение в самых различных сферах. В первую очередь это приложения для ПК – они легкие, не требуют предварительной установки – просто запускаются. Единственное требование – в операционную систему должна быть встроена среда исполнения JAVA.

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

Кроме того, язык программирования JAVA используется для создания ряда программ, отвечающих за функциональность веб-страниц, серверов и так далее.

Плюсы и минусы

Язык программирования JAVA имеет целый ряд существенных преимуществ, которые в итоге и сделали его одним из самых популярных языков современности. Среди них выделяют следующие:

  • Универсальность. Язык программирования JAVA позволяет после прогонки через JAVA-машину и трансляции в байт-код использовать созданные программы на любой платформе.
  • Работа программы определяется виртуальной JAVA-машиной, и не требует непосредственного взаимодействия с физической памятью вашего компьютера, что повышает уровень безопасности программного обеспечения.
  • Язык программирования JAVA создан так, что механизмы, которые потенциально могут привести к ошибкам в коде, в нем попросту отсутствуют. Именно поэтому JAVA считается одним из самых надежных языков.
  • Программа автоматически «убирает за собой», освобождая засорившуюся в ходе работы память.
  • Обширные стандартные библиотеки, содержащие собрания готовых решений часто встречающихся задач. Эти обьекты можно свободно использовать при написании собственного кода.
  • Вся необходимая документация генерируется в автоматическом режиме во время написания кода.
  • Язык программирования JAVA позволяет реализовать любые задачи в любой сфере, что делает его незаменимым в современных разработках.

Есть и минусы – например, выполняемая операция прерывается, если выходит за пределы JAVA-машины. Однако разработки не стоят на месте, JAVA чем дальше, тем активнее обновляется, подстраиваясь под современные требования и приобретая все новый и новый функционал.

Литература для изучения

  • Герберт Шилдт «Java 8. Руководство для начинающих».
  • Яков Файн «Программирование на Java для детей, родителей, дедушек и бабушек».
  • Алексей Васильев «Java. Объектно-ориентированное программирование».

Для среднего уровня:

  • Патрик Нимейер и Дэниэл Леук «Программирование на Java».
  • Рауль-Габриэль Урма, Марио Фаско и Алан Майкрофт «Современная Java в действии».
  • Серия Head-First «Объектно-ориентированный анализ и проектирование».
    Еще одна хорошая книга по Java-программированию и принципам проектирования из серии.
  • Бен Эванс «Оптимизация Java».
  • Джошуа Блох «Эффективная Java».

Java – один из самых востребованных языков программирования в мире и один из двух официальных языков программирования, используемых в разработке Android (другой – Kotlin). Разработчики, знакомые с Java, весьма востребованы и способны создавать широкий спектр различных приложений, игр и инструментов.

Удачной работы! Если возникнут вопросы — напишите нам, пожалуйста, тикет из раздел «Помощь и поддержка».

История языков программирования: что помогло языку Java «войти в каждый дом»

Изображение сайта vanillajava.blogspot.com

Кто-нибудь думал, что язык Java, первоначально предназначенный для устройств бытовой электроники, станет использоваться во многих других областях?

Расширение влияния Java, как ни странно, началось с разработки браузеров.

Главный разработчик Java Джеймс Гослинг перешел в Sun в 1984 году из исследовательского отдела IBM. До Java Гослинг разработал не имевший коммерческого успеха оконный интерфейс NeWS и GOSMACS — первую реализацию текстового редактора EMACS на языке С.

После этого Гослинг и его коллеги начали изучать перспективы на рынке электроники и бытовой техники.
«Группе была поставлена задача создать распределенную систему, которую можно было бы в качестве современной программной технологии продавать производителям бытовой электроники», вспоминает Гослинг.

В декабре 1990 года компания Sun создала рабочую группу для разработки новой технологии, куда вошел Патрик Нотон. Однако ему показалось, что возможностей C++ и С API не хватит для выполнения этой задачи.

Поэтому Патрик Нотон начал проект под названием Stealth Project, чтобы найти решение проблемы.
Позже к нему присоединились Джеймс Гослинг и Майк Шеридан, и проект получил название Green Project. Когда стало понятно, что у проекта – большие перспективы, они пригласили еще 10 человек и начали работать в офисе на Сэнд Хилл Роуд (Калифорния). Компания Sun поддержала начинание, предположив, что оно ознаменует «новую волну» в ИТ-отрасли.

Команда вскоре задумалась о том, чтобы усовершенствовать язык С++. Однако он оказался избыточным и слишком ресурсоемким, чтобы на его базе создать язык, удовлетворяющий поставленным требованиям:

1. Поддержка объектно-ориентированной парадигмы;

2. Возможность запуска одной и той же программы на разных операционных системах;

3. Встроенные механизмы для работы с компьютерных сетей;

4. Обеспечение безопасности удаленного исполнения программ;

5. Использование преимуществ других объектно-ориентированных языков программирования.

Хронология

Июнь 1991 г. — Гослинг начинает работу над интерпретатором Oak, который через несколько лет (при поисках торговой марки) переименован в Java.

19 августа 1991 г. — Коллектив разработчиков Green демонстрирует идеи базового пользовательского интерфейса и графическую систему сооснователям компании Sun Скотту Макнили и Биллу Джою.

17 октября 1991 г. — Шеридан и Нотон присваивают конструкторской философии своего коллектива девиз «1st Person», который со временем становится названием компании.

17 ноября 1991 г. — Офис проекта Green снова подключается к главной сети компании Sun линией на 56 Кбит/с

1 марта 1992 г. — К проекту Green присоединяется Джонатан Пейн, который позднее участвует в написании HotJava.

Лето 1992 г. — Интенсивная деятельность по доработке Oak, Green OS, пользовательского интерфейса, аппаратуры Star7 и соответствующих компонентов.

4 сентября 1992 г. — Завершена разработка устройства Star7; оно продемонстрировано Джою и Макнили.

1 октября 1992 г. — Из компании SunLabs переходит Уэйн Розинг, принимающий на себя руководство коллективом.

1 ноября 1992 г. — Организована корпорация FirstPerson.

15 января 1993 г. — Коллектив переезжает в Пало Альто в здание, где раньше находилась лаборатория Western Research Lab компании DEC и была основана исходная группа Hamilton Group (она же OSF).

15 марта 1993 г. — После ознакомления с результатами испытаний кабельного интерактивного телевидения, проведенных компанией Time Warner, корпорация FirstPerson сосредотачивается на этой тематике.

Апрель 1993 г. — Выпуск первого графического браузера для Internet — Mosaic 1.0, разработанного в центре NCSA.

14 июня 1993 г. — Компания Time Warner продолжает проводить свои испытания интерактивного кабельного ТВ с компанией SGI, несмотря на признанное превосходство технологии компании Sun и уверения, что Sun выиграла эту сделку.

Лето 1993 г. — Нотон пролетает 300 тысяч миль, продавая Oak всем, занимающимся бытовой электроникой и интерактивным телевидением; тем временем темп, с которой люди получают доступ к Internet, головокружительно нарастает.

Август 1993 г. — Через несколько месяцев многообещающих переговоров с компанией 3DO относительно разработки ОС для приставок, президент 3DO Трип Хокинс предлагает купить технологию. Макнили отказывается, и сделка срывается.

Сентябрь 1993 г. — К коллективу присоединяется Артур Ван Хофф, поначалу — чтобы создать среду разработки приложений, предназначенных для интерактивного телевидения, а потом разрабатывающий, главным образом, сам язык.

7 декабря 1993 г. — Экспертиза операций на высоком уровне в FirstPerson обнаруживает, что эта группа не имеет реальных партнеров или маркетинговой стратегии и неясно представляет себе дату выпуска.

8 февраля 1994 г. — Отменено публичное заявление компании FirstPerson о выпуске, которое должно было состояться на конференции Technology, Entertainment and Design (TED).

17 февраля 1994 г. — Исполнительным лицам компании Sun для разносторонней экспертизы представлен альтернативный бизнес-план корпорации FirstPerson по разработке мультимедийной платформы для CD-ROM и онлайновой работы.

25 апреля 1994 г. — Создана компания Sun Interactive; в нее переходит половина сотрудников FirstPerson.

Июнь 1994 г. — Начат проект Liveoak, нацеленный Биллом Джоем на использование Oak в крупном проекте небольшой операционной системы.

Июль 1994 г. — Нотон ограничивает область применения проекта Liveoak, просто переориентировав Oak на Internet.

16 сентября 1994 г. — Пейн и Нотон начинают писать WebRunner – браузер-аналог Mosaic, позднее переименованный в HotJava.

29 сентября 1994 г. — Прототип HotJava впервые продемонстрирован исполнительным лицам компании Sun.

11 октября 1994 г. — Нотон уходит в компанию Starwave.

Осень 1994 г. — Ван Хофф реализует компилятор Java на языке Java. Ранее Гослинг реализовывал его на языке С.

23 мая 1995 г. — Компания Sun официально представляет Java и HotJava на выставке SunWorld ’95.

23 мая 1995 г. – Netscape объявляет о намерении использовать Java при разработке браузера Netscape.

21 сентября, 1995 г. – В Нью-Йорке проходит конференция по Java-разработке

25 Сентября, 1995 г. – Sun объявляет о расширенном сотрудничестве с Toshiba.

26 Сентября, 1995 г. – Sun анонсирует пакет инструментов для разработки с использованием Java-технологий

30 Октября, 1995 г. – На Internet World Conference в Бостоне компании Lotus Development Corp., Intuit Inc., Borland International Inc., Macromedia Inc. и Spyglass Inc. объявляют о намерении лицензировать Java.

4 декабря, 1995 г. – Sun, Netscape и Silicon Graphics создают альянс для разработке инструментария для интернета.

4 декабря, 1995 г. – Borland, Mitsubishi Electronics, Sybase и Symatec объявляют о планах лицензировать Java.

6 декабря, 1995 г. – IBM и Adobe объявляют о планах лицензировать Java.

7 декабря, 1995 г. – Microsoft объявляет о планах лицензировать Java.

23 января, 1996 г. – релиз JDK 1.0

В 1997 году большинство версий Java оставались бесплатными, за исключением Java Enterprise System. В этом же году вышла существенно обновленная версия – Java 2, а также выделились отдельные платформы: J2SE, J2EE, J2ME.

• J2SE 1.3 (Май 8, 2000)
• J2SE 1.4 (Февраль 6, 2002)
• J2SE 5.0 (Сентябрь 30, 2004)
• Java SE 6 (Декабрь 11, 2006)
• Java SE 7 (Июль 28, 2011)
• Java SE 8 (Март 18, 2014)

Каждая платформа включает в себя:

• язык программирования;
• набор служебных программ (JVM, JRE, JDK и т.п.);
• набор библиотек;

Java 2 Platform, Standard Edition (J2SE) предназначается для использования на рабочих станциях и персональных компьютерах. Является основой всех других Java-технологий.

Java 2 Platform, Micro Edition (J2ME) является усеченным вариантом J2SE, для того, чтобы соответствовать ограниченным аппаратным возможностям мобильных устройств, таких как, например, сотовые телефоны.

Java Virtual Machine (JVM) представляет собой программу, имитирующую работу некоторой гипотетической Java-машины.

Java Runtime Environment (JRE) представляет собой минимальный набор средств, необходимых для запуска Java-программ. Основу JRE составляют виртуальная машина Java и набор стандартных библиотек.

Java Development Kit (JDK) представляет собой набор средств, используемых в процессе разработки Java-программ: компилятор, отладчик, средства для автоматической генерации документации, комплект примеров и т.п. JDK работает с уже готовыми текстами программ и не содержит какого-либо редактора.

Интегрированные среды разработки (Eclipse, Netbeans, JBuilder и т.п.) для компиляции программ используют внешний JDK

Сферы применения Java-технологий

В настоящее время Java-технологии находят широкое применение в различных сферах. Это, в первую очередь, вызвано особенностями создания и запуска Java-приложений.

1. Разработка приложений (application)

Язык Java используется для разработки обычных прикладных программ, которые запускаются пользователем и имеют доступ ко всем ресурсам компьютера наравне с любыми другими программами.
Для запуска Java-приложений в операционной системе должна быть установлена среда исполнения Java (JRE).

2. Разработка мидлетов (midlet)

Язык Java используется для разработки специализированных программ, предназначенных для использования на мобильных устройствах.

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

3. Разработка апплетов (applet)

Язык Java используется для разработки специализированных программ, обычно небольшого размера, запускаемых браузером внутри web-документа для вывода динамического содержимого и/или интерактивного взаимодействия с пользователем.

Для запуска апплетов браузер должен содержать соответствующий модуль (plug-in).

4. Разработка JSP-страниц (Java Server Pages)

JSP-страницы представляют собой HTML-документы со вставками на языке Java, которые используются для анализа пользовательских запросов и динамического формирования web-документов на основе результатов обработки этих запросов.

Для обработки JSP-страниц Web-сервер должен содержать соответствующий модуль.

5. Разработка сервлетов (servlet)

На языке Java разрабатываются специализированные программы-сервлеты, функционирующие в рамках Web-сервера и имеющие доступ к его ресурсам: файлам, базам данных и т.п.

Для запуска сервлетов используется Web-сервер со специальным модулем (контейнером сервлетов) или специальный сервер приложений.

Поглощение Sun

В ноябре 2006 года Sun объявила часть кода виртуальной машины Java (JVM) свободном распространяемым и начала выпускать его под лицензией GNU General Public License (GPL). К маю 2007 года компания распространяла бесплатно почти весь код JVM, за исключением малой его части, на которую Sun не имеет прав.

В 2009-10 годах корпорация Oracle поглотила компанию Sun Microsystems. В апреле 2010 Джеймс Гослинг, перешедший в Oracle после поглощения, покинул компанию.

  • история языков программирования
  • java
  • разработка по
  • sun microsystems
  • oracle
  • поглощение

Язык программирования Java

Java — объектно-ориентированный язык программирования, разрабатываемый компанией Sun Microsystems и официально выпущенный 23 мая 1995 года. В отношении произношения в русском языке, как и в ряде других, образовались две различные нормы — заимствованная англоязычная /ˈdʒɑːvə/ [1] и традиционно-национальная «Ява», соответствующая традиционому произношению названия острова Ява.

Java — так называют не только сам язык, но и платформу для создания приложений уровня предприятий на основе данного языка.

Изначально язык программирования назывался Oak (русск. Дуб ) и разрабатывался Джеймсом Гослингом для бытовой электроники, но впоследствии был переименован в Java и стал использоваться для написания клиентских приложений и серверного программного обеспечения. Назван в честь марки кофе Java, любимого программистами, поэтому на официальной эмблеме языка Java изображена чашка с дымящимся кофе.

Основные особенности языка

Программы на Java транслируются в байт-код, выполняемый виртуальной java-машиной (JVM) — программой, обрабатывающей байтовый код и передающей инструкции оборудованию как интерпретатор, но с тем отличием, что байтовый код, в отличие от текста, обрабатывается значительно быстрее.

Достоинство подобного способа выполнения программ — в полной независимости байт-кода от ОС и оборудования, что позволяет выполнять Java-приложения на любом устройстве, которое поддерживает виртуальную машину. Другой важной особенностью технологии Java является гибкая система безопасности благодаря тому, что исполнение программы полностью контролируется виртуальной машиной. Любые операции, которые превышают установленные полномочия программы (например, попытка несанкционированного доступа к данным или соединения с другим компьютером) вызывают немедленное прерывание. Это позволяет пользователям загружать программы, написанные на Java, на их компьютеры (или другие устройства, например, мобильные телефоны) из неизвестных источников, при этом не опасаясь заражения вирусами, пропажи ценной информации, и т. п.

Часто к недостаткам концепции виртуальной машины относят то, что исполнение байт-кода виртуальной машиной может снижать производительность программ и алгоритмов, реализованных на языке Java. Данное утверждение было справедливо для первых версий виртуальной машины Java, однако в последнее время оно практически потеряло актуальность. Этому способствовал ряд усовершенствований: применение технологии native-кода в стандартных библиотеках, а также аппаратные средства, обеспечивающие ускоренную обработку байт-кода (например, технология ARM).

Идеи, заложенные в концепцию и различные реализации JVM, вдохновили множество энтузиастов на расширение перечня языков, которые могли бы быть использованы для создания программ, исполняемых в среде JVM [2] . Эта идея перекликается с концепцией CLI, заложенной в основу платформы .NET компании

История версий

Java 1.0

Разработка Java началась в 1990 году, первая официальная версия — Java 1.0, — была выпущена только в 1995 году.

Java 2.0

К 1998 году была разработана обновлённая спецификация JDK 1.2, вышедшая под наименованием Java 2. Собственно языковых изменений в данной версии не появилось. Платформа получила следующие дополнения:

  • Набор средств для создания визуального интерфейса пользователя Swing.
  • Коллекции.
  • Поддержка файлов Policy и цифровых сертификатов пользователя.
  • Библиотека Accessibility.
  • Java 2D.
  • Поддержка технологии Unicode, включая поддержку ввода на японском, китайском и корейском языках.
  • Поддержка воспроизведения аудио-файлов нескольких популярных форматов.
  • Полная поддержка технологии
  • Усовершенствования инструментальных средств JDK, в том числе поддержка профилирования Java-программ

Java 5

Спецификация Java 5 была выпущена в сентябре 2004 года. В данной версии разработчики внесли в язык целый ряд принципиальных дополнений:

  • Перечислимые типы (enum). Ранее отсутствовавшие в Java типы оформлены по аналогии с C++, но при этом имеют ряд дополнительных возможностей.
    • Перечислимый тип является полноценным классом Java, то есть может иметь конструктор, поля, методы, в том числе скрытые и абстрактные.
    • Перечисление может реализовывать интерфейсы.
    • Для перечислений имеются встроенные методы, дающие возможность получения значений типа по имени, символьных значений, соответствующих именам, преобразования между номером и значением, проверки типа на то, что он является перечислимым.

    Классификация платформ Java

    Внутри Java существуют три основных семейства технологий:

    • J2EE или Java EE (начиная с v1.5) — Java Enterprise Editon, для создания программного обеспечения уровня предприятия;
    • J2SE или Java SE (начиная с v1.5) — Java Standard Editon, для создания пользовательских приложений, в первую очередь — для настольных систем;
    • J2ME, Java ME или Java Micro Edition, для использования в устройствах, ограниченных по вычислительной мощности, в том числе мобильных телефонах, PDA, встроенных системах

    Самыми популярными считаются серверные технологии семейства J2EE.

    Последним релизом является версия 1.6, в которой было произведено улучшение системы безопасности, улучшение поддержки скриптового языка Mozilla Rhino (англ.), улучшена интеграция с рабочим столом, добавлены некоторые новые возможности в создании графических интерфейсов.

    Java и Microsoft

    Компанией ОС, начиная с Windows 95. MSJVM была близка к спецификации Sun Microsystems v.1.1.3, но не соответствовала ей по ряду принципиальных характеристик (в частности, по отсутствию поддержки технологий JNI и по наличию нестандартных расширений). Впоследствии это явилось поводом для судебных исков со стороны Sun Microsystems к [3] . В настоящее время компанией .NET предлагается Java-подобный язык J#, не соответствующий официальной спецификации языка Java.

    Применения платформы Java

    Следующие успешные проекты реализованы с привлечением Java (J2EE) технологий: Amazon [4] [5] , [6] [7] , Yandex (неоднозначная информация в отношении Java) [8] [9] , [10] .

    Следующие компании в основном фокусируются на Java (J2EE) технологиях, а не на .NET, хотя имеют дело также и с последними: IBM, Oracle. В частности, СУБД Oracle включает JVM как свою составную часть, обеспечивающую возможность непосредственного программирования СУБД на языке Java, включая, например, хранимые процедуры [11] .

    Основные возможности

    • автоматическое управление памятью
    • расширенные возможности обработки исключительных ситуаций;
    • богатый набор средств фильтрации ввода/вывода;
    • набор стандартных коллекций, таких как массив, список, стек и т. п.;
    • наличие простых средств создания сетевых приложений (в том числе с использованием протокола HTTP-запросы и обрабатывать ответы;
    • встроенные в язык средства создания многопоточных приложений;
    • унифицированный доступ к базам данных на основе JDBC и

    Пространство имён

    Основная статья: Пространство имён (программирование)
    Идея пространств имён воплощена в Java-пакетах.

    Пример программы

    Программа, выводящая «Hello, World!»:
    Пример использования шаблонов:

      List strings = 
    

    Основные идеи

    Примитивные типы

    • Byte
    • Short
    • Integer
    • Long
    • Float
    • Double
    • Boolean
    • Character

    Длины и диапазоны значений примитивных типов определяются стандартом, а не реализацией и приведены в таблице. Тип char сделали двухбайтовым для удобства локализации (один из идеологических принципов Java): когда складывался стандарт, уже существовал Unicode-16, но не Unicode-32. Поскольку в результате не осталось однобайтового типа, добавили новый тип byte. Типы float и double могут иметь специальные значения +\infty, -\inftyи «не число» (Double.POSITIVE_INFINITY , Double.NEGATIVE_INFINITY , Double.NaN ; для типа float — так же, но с приставкой Float вместо Double. Минимальные положительные значения, принимаемые типами float и double, тоже стандартизованы.

    Тип Длина (в байтах) Диапазон или набор значений
    boolean не определено true, false
    byte 1 −128..127
    char 2 0..2 16 -1, или 0..65535
    short 2 −2 15 ..2 15 -1, или −32768..32767
    int 4 −2 31 ..2 31 -1, или −2147483648..2147483647
    long 8 −2 63 ..2 63 -1, или примерно −9.2·10 18 ..9.2·10 18
    float 4 -(2-2 -23 )·2 127 ..(2-2 -23 )·2 127 , или примерно −3.4·10 38 ..3.4·10 38 , а также -\infty, \infty, NaN
    double 8 -(2-2 -52 )·2 1023 ..(2-2 -52 )·2 1023 , или примерно −1.8·10 308 ..1.8·10 308 , а также -\infty, \infty, NaN

    Такая жёсткая стандартизация была необходима, чтобы сделать язык платформенно-независимым, что является одним из идеологических требований к Java и одной из причин её успеха. Тем не менее одна небольшая проблема с платформенной независимостью всё же осталась. Некоторые процессоры используют для промежуточного хранения результатов 10-байтовые регистры или другими способами улучшают точность вычислений. Для того, чтобы сделать Java максимально совместимой между разными системами, в ранних версиях любые способы повышения точности вычислений были запрещены. Однако это приводило к снижению быстродействия. Выяснилось, что ухудшение точности ради платформенной независимости мало кому нужно, тем более если за это приходится платить замедлением работы программ. После многочисленных протестов этот запрет отменили, но добавили ключевое слово strictfp , запрещающее повышение точности.

    Преобразования при математических операциях

    В языке Java действуют следующие правила:

    1. Если один операнд имеет тип double, другой тоже преобразуется к типу double.
    2. Иначе, если один операнд имеет тип float, другой тоже преобразуется к типу float.
    3. Иначе, если один операнд имеет тип long, другой тоже преобразуется к типу long.
    4. Иначе оба операнда преобразуется к типу int.

    Последнее правило отличает Java от старых реализаций C и C++ и делает код более безопасным. Так, например, в языке Java после выполнения кода

    переменной z присваивается значение 50000, а не −15536, как в большинстве безнадёжно устаревших реализаций C и C++. В программе, скомпилированной MS VC++, начиная с версии 7, а также многими другими современными компиляторами (gcc, Intel C++, Borland C++, Comeau и т. д.), значение будет также равно 50000.

    Объектные переменные, объекты, ссылки и указатели

    В языке Java имеются только динамически создаваемые объекты. Причем переменные объектного типа и объекты в Java — совершенно разные сущности. Переменные объектного типа являются ссылками, то есть неявными указателями на динамически создаваемые объекты. Это подчёркивается синтаксисом описания переменных. Так, в Java нельзя писать:

    а нужно:
    При присваиваниях, передаче в подпрограммы и сравнениях объектные переменные ведут себя как указатели, то есть присваиваются, копируются и сравниваются адреса объектов. А при доступе с помощью объектной переменной к полям данных или методам объекта не требуется никаких специальных операций разыменовывания — этот доступ осуществляется так, как если бы объектная переменная была самим объектом.

    Объектными являются переменные любого типа, кроме простых числовых типов. Явных указателей в Java нет. В отличие от указателей C, C++ и других языков программирования, ссылки в Java в высокой степени безопасны благодаря жёстким ограничениям на их использование, в частности:

    • Нельзя преобразовывать объект типа int или любого другого примитивного типа в указатель или ссылку и наоборот.
    • Над ссылками запрещено выполнять операции ++, −−, +, − или любые другие арифметические операции.
    • Преобразование типов между ссылками жёстко регламентировано. За исключением ссылок на массивы, разрешено преобразовывать ссылки только между наследуемым типом и его наследником, причём преобразование наследуемого типа в наследующий должно быть явно задано и во время выполнения производится проверка его осмысленности. Преобразования ссылок на массивы разрешены лишь тогда, когда разрешены преобразования их базовых типов, а также нет конфликтов размерности.
    • В Java нет операций взятия адреса (&) или взятия объекта по адресу (*). Звёздочка в Java означает умножение, и только. Амперсанд (&) означает всего лишь «побитовое и» (двойной амперсанд — «логическое и»).

    Благодаря таким специально введенным ограничениям в Java невозможно прямое манипулирование памятью на уровне физических адресов (хотя ссылки, не указывающие ни на что, есть: значение такой ссылки обозначается null ).

    Дублирование ссылок и клонирование

    Из-за того, что объектные переменные являются ссылочными, при присваивании не происходит копирования объекта. Так, если написать

    Foo foo, bar; … bar = foo;

    то произойдет копирование адреса из переменной foo в переменную bar . То есть foo и bar будут указывать на одну и ту же область памяти, то есть на один и тот же объект; попытка изменить поля объекта, на который ссылается переменная foo , будет менять объект, с которым связана переменная bar , и наоборот. Если же необходимо получить именно ещё одну копию исходного объекта, пользуются или методом (функцией-членом, в терминологии C++) clone() , создающим копию объекта, или же копирующим конструктором.

    Метод clone() требует, чтобы класс реализовывал интерфейс Cloneable (об интерфейсах см. ниже). Если класс реализует интерфейс Cloneable , по умолчанию clone() копирует все поля (мелкая копия). Если требуется не копировать, а клонировать поля (а также их поля и так далее), надо переопределять метод clone() . Определение и использование метода clone() часто является нетривиальной задачей [12] .

    Сборка мусора

    В языке Java невозможно явное удаление объекта из памяти — вместо этого реализована сборка мусора. Традиционным приёмом, дающим сборщику мусора «намёк» на освобождение памяти, является присваивание переменной пустого значения null . Это, однако, не значит, что объект, заменённый значением null , будет непременно и немедленно удалён. Данный приём всего лишь устраняет ссылку на объект, то есть отвязывает указатель от объекта в памяти. При этом следует учитывать, что объект не будет удален сборщиком мусора, пока на него указывает хотя бы одна ссылка из используемых переменных или объектов. Существуют также методы для инициации принудительной сборки мусора, но не гарантируется, что они будут вызваны исполняющей средой, и их не рекомендуется использовать для обычной работы.

    Классы и функции

    Java не является процедурным языком: любая функция может существовать только внутри класса. Это подчёркивает терминология языка Java, где нет понятий «функция» или «функция-член» (англ. member function ), а только метод. В методы превратились и стандартные функции. Например, в Java нет функции sin() , а есть метод Math.sin() класса Math (содержащего, кроме sin() , методы cos() , exp() , sqrt() , abs() и многие другие).

    Статические методы и поля

    Для того чтобы не надо было создавать объект класса Math (и других аналогичных классов) каждый раз, когда надо вызвать sin() (и другие подобные функции), введено понятие статических методов (англ. static method ; иногда в русском языке они называются статичными). Статический метод (отмечаемый ключевым словом static в описании) можно вызвать, не создавая объекта его класса. Поэтому можно писать

    вместо
    Ограничение, накладываемое на статические методы, заключается в том, что в объекте this они могут обращаться только к статическим полям и методам.

    Статические поля имеют тот же смысл, что и в C++: каждое существует только в единственном экземпляре.

    Финальность

    Ключевое слово final (финальный) означает разные вещи при описании переменной, метода или класса. Финальная переменная (именованная константа) инициализируется при описании и дальше не может быть изменена. Финальный метод не может быть переопределён при наследовании. Финальный класс не может иметь наследников вообще.

    Абстрактность

    В Java методы, не объявленные явно как final или private , являются виртуальными в терминологии C++: при вызове метода, по-разному определённого в базовом и наследующем классах, всегда производится проверка времени выполнения.

    Абстрактным методом (описатель abstract ) в Java называется метод, для которого заданы параметры и тип возвращаемого значения, но не тело. Абстрактный метод определяется в классах-наследниках. В C++ то же самое называется чисто виртуальной функцией. Для того чтобы в классе можно было описывать абстрактные методы, сам класс тоже должен быть описан как абстрактный. Объекты абстрактного класса создавать нельзя.

    Интерфейсы

    Высшей степенью абстрактности в Java является интерфейс ( interface ). Все методы интерфейса абстрактны: описатель abstract даже не требуется. Интерфейс не является классом. Класс может наследовать, или расширять ( extends ) другой класс или реализовывать ( implements ) интерфейс. Кроме того, интерфейс может наследовать, или расширять другой интерфейс.

    В Java класс не может наследовать более одного класса, зато может реализовывать сколько угодно интерфейсов.

    Интерфейсы можно передавать методам как параметры, но нельзя создавать объекты их типов.

    Маркерные интерфейсы

    В Java есть некоторые интерфейсы, которые не содержат методов для реализации, а специальным образом обрабатываются JVM. Это интерфейсы:

    • java.lang.Cloneable
    • java.io.Serializable
    • java.rmi.Remote
    Шаблоны в Java (generics)

    Начиная с версии Java 5 в языке появился механизм обобщённого программирования — шаблоны, внешне близкие к шаблонам C++. С помощью специального синтаксиса в описании классов и методов можно указать параметры-типы, которые внутри описания могут использоваться в качестве типов полей, параметров и возвращаемых значений методов.

       GenericClass var = Допускается обобщённое объявление классов, интерфейсов и методов. Кроме того, синтаксис поддерживает ограниченные объявления типов-параметров: указание в объявлении конструкции вида требует, чтобы тип-параметр T реализовывал интерфейсы A, B, C и так далее, а конструкция требует, чтобы тип-параметр T был типом C или одним из его предков.

    В отличие от шаблонов C#, шаблоны Java не поддерживаются средой исполнения — компилятор просто создаёт байт-код, в котором никаких шаблонов уже нет. Реализация шаблонов в Java принципиально отличается от реализации аналогичных механизмов в C++: компилятор не порождает для каждого случая использования шаблона отдельный вариант класса или метода-шаблона, а просто создаёт одну реализацию байт-кода, содержащую необходимые проверки и преобразования типов. Это приводит к ряду ограничений использования шаблонов в программах на Java.

    Проверка принадлежности к классу

    В Java можно явно проверить, к какому классу принадлежит объект. Выражение foo instanceof Foo истинно, если объект foo принадлежит классу Foo или его наследнику, или реализует интерфейс Foo (или, в общем виде, наследует класс, который реализует интерфейс, который наследует Foo ).

    Далее, функция getClass() , определённая для всех объектов, выдаёт объект типа Class . Эти объекты можно сравнивать. Так, например, foo.getClass()==bar.getClass() будет истинно, если объекты foo и bar принадлежат в точности к одному классу (но это не означает что это два одинаковых объекта).

    Кроме того, объект типа Class любого типа можно получить так: Integer.class , Object.class .

    Однако прямое сравнение классов не всегда является оптимальным средством проверки на принадлежность к классу. Зачастую вместо него используют функцию isAssignableFrom() . Эта функция определена у объекта типа Class и принимает объект типа Class в качестве параметра. Таким образом, вызов Foo.class.isAssignableFrom(Bar.class) вернёт true в случае, если Foo является предком класса Bar . Так как все объекты являются потомками типа Object , вызов Object.class.isAssignableFrom() всегда вернёт true . В паре с упомянутыми функциями объекта типа Class используются также функции isInstance() (эквивалентно instanceof ), а также cast() (преобразует параметр в объект выбранного класса).

    Библиотеки классов

    • JDK — содержит набор базовых классов для всего ПО на платформах Java SE и Java EE
    • CDK — для создания химического ПО

    Средства разработки ПО

    • JDK — помимо набора библиотек для платформ Java SE и Java EE содержит компилятор командной строки javac и набор утилит, также работающих в режиме командной строки.
    • NetBeans IDE — бесплатная интегрированная среда разработки для всех платформ Java — Java ME, Java SE и Java EE. Пропагандируется Sun Microsystems, разработчиком Java, как базовое средство для разработки ПО на языке Java и других языках (C, C++, Fortran и др.).
    • Java SE и Java EE. Ведутся работы по поддержке в Eclipse платформы Java ME. Пропагандируется C, C++, Fortran и др.)
    • IntelliJ IDEA — коммерческая среда разработки для платформ Java SE, Java EE и Java ME.

    Примечания

    1. java (англ.) . Merriam-Webster Online Dictionary. Merriam-Webster. — Английская норма произношения слова «Java». Проверено 5 июня 2009.
    2. Robert Tolksdorf.Programming languages for the Java Virtual Machine JVM (англ.) . is-research GmbH. — Онлайн-каталог альтернативных языков и языковых расширений для JVM. Проверено 5 июня 2009.
    3. Microsoft Java Virtual Machine Support (англ.) . Microsoft (2003-09-12). — Официальное заявление Microsoft о программе поддержки MSJVM. Проверено 5 июня 2009.
    4. Todd HoffAmazon Architecture (англ.) (2007-09-18). — Обсуждение архитектуры Amazon с использованием Java-технологий. Проверено 6 июня 2009.
    5. Amazon Elastic Compute Cloud (Amazon EC2) (англ.) . Amazon Web Services LLC. — Описание технологии и возможностей Amazon EC2 как веб-сервиса. Проверено 6 июня 2009.
    6. Todd HoffeBay Architecture (англ.) (2008-05-27). — Обсуждение архитектуры eBay на платформе Java. Проверено 6 июня 2009.
    7. Randy Shoup, Dan PritchettThe eBay Architecture (англ.) (PDF). SD Forum 2006 (2006-11-29). — Презентация по истории развития архитектуры eBay. Проверено 6 июня 2009.
    8. Allen SternExclusive Interview With Yandex CTO Ilya Segalovich (англ.) . CenterNetworks (2008-01-14). — Интервью с техническим директором Яндекса Ильёй Сегаловичем. Проверено 6 июня 2009.
    9. Анатолий ОрловАрхитектура Яндекс.Поиска (рус.) (PowerPoint). Материалы встречи JUG в Екатеринбурге (2008-05-24). Проверено 6 июня 2009.
    10. Brian GuanThe LinkedIn Blog. Blog Archive. Grails at LinkedIn. (англ.) . LinkedIn.com (2008-06-11). — История создания системы LinkedIn на основе Java-технологии Grails. Проверено 5 июня 2009.
    11. OracleJVM and Java Stored Procedures (англ.) . Oracle Inc.. — Раздел портала Oracle, посвящённый технологиям Java в составе сервера СУБД Oracle. Проверено 5 июня 2009.
    12. Ссылка на документацию к методу Object.clone() (англ.)

    Литература

    • Монахов ВадимЯзык программирования Java и среда NetBeans, 2-е издание. — СПб .: «БХВ-Петербург», 2009. — С. 720. — ISBN 978-5-9775-0424-9
    • Джошуа Блох. Java. Эффективное программирование = Effective Java. — М .: «Лори», 2002. — С. 224. — ISBN 5-85582-169-2
    • Кей С. Хорстманн, Гари Корнелл. Java 2. Библиотека профессионала, том 1. Основы = Core Java™ 2, Volume I--Fundamentals. — 7-е изд. — М .: «Вильямс», 2007. — С. 896. — ISBN 0-13-148202-5
    • Кей С. Хорстманн, Гари Корнелл. Java 2. Библиотека профессионала, том 2. Тонкости программирования = Core Java™ 2, Volume II--Advanced Features. — 7-е изд. — М .: «Вильямс», 2007. — С. 1168. — ISBN 0-13-111826-9
    • Брюс Эккель. Философия Java = Thinking in Java. — 3-е изд.. — СПб .: «Питер», 2003. — С. 976. — ISBN 5-88782-105-1
    • Герберт Шилдт, Джеймс Холмс. Искусство программирования на Java = The Art of Java. — М .: «Диалектика», 2005. — С. 336. — ISBN 0-07-222971-3
    • Любош Бруга.Java по-быстрому: Практический экспресс-курс = Luboš Brůha. Java Hotová řešení.. — М .: Наука и техника, 2006. — С. 369. — ISBN 5-94387-282-5

    См. также

    • Сравнение C# и Java
    • Сравнение возможностей Java с другими языками см. в статье Сравнение языков программирования

    Ссылки

    • Официальный сайт Java, поддерживаемый Sun
    • ru.sun.com — Ресурсы и документации по Java на русском от SUN
    • developers.sun.ru — Российский портал разработчиков на русском от Sun Microsystems
    • Bruce Eckel’s Free Electronic Books (англ.) — свободно распространяемые электронные версии книг Брюса Эккеля по C++ и Java вместе с исходным кодом
    • Статьи о SOA и Java
    • http://bruceeckel.by.ru — переводы на русский язык некоторых свободно распространяемых книг Брюса Эккеля по Java
    • Canadian Mind Products Java & Internet Glossary — понятно о базовых аспектах Java-технологий
    • Все о технологии Java
    • Русский сайт о Java: библиотека, форумы, каталог ссылок и т. д.
    • Сайт сообщества пользователей Java (Java User Group): встречи пользователей, новости
    • Блог сообщества Java-разработчиков КПИ
    • Белорусская Java User Group — новости, встречи сообщества, доклады ведущих специалистов, обмен опытом
    • TheServerSide: Enterprise Java Community — ServerSide News, Books, Discussions & Reviews

    Язык программирования Java

    Java является одним из наиболее популярных языков программирования (ЯП) сегодня. Относится к строго типизированным объектно-ориентированным ЯП. Java широко применяется в разработке в настоящее время.

    История появления языка Java

    Данный ЯП создан в 1995 году компанией Sun Microsystems. У его истоков стоял Джеймс Гослинг. Изначально Java назывался Oak и использовался для программирования бытовых электроприборов. Интересно, что свое теперешнее имя он получил от названия марки кофе, который, в свою очередь, был назван в честь одноименного острова. Кстати, на эмблеме тоже можно видеть чашку кофе.

    Параллельно с языком программирования, был разработан принципиально новый на то время ПК Star 7. Однако из-за его высокой стоимости, он не пользовался популярностью. Компания также пыталась найти себя в сфере интерактивного телевидения, но и эта инвестиция не оправдала себя.

    Особенности

    При создании этого языка программирования был реализована очень важная концепция – write once, run everywhere, что переводится с английского как «напиши один раз, используй везде». То есть Java является по сути кроссплатформенным языком. Но только при условии, что в системе установлен и запущен так называемый Java Runtime Environment.

    Помимо этого, в Джава есть собственный механизм работы с памятью. После создания объектов так называемый коллектор мусора автоматически очищает память после того, как объекты уже больше не применяются программой.

    Что касается синтаксиса, он достаточно сложен. Похож на синтаксис других инструментов разработки. Из особенностей можно отметить:
    1. Java чувствителен к регистру. Например, два идентификатора user и User в Java являются совершенно разными сущностями.
    2. Классы в Джава именуются с помощью UpperCamelCase. При этом, название файла должно совпадать с именем класса с учетом чувствительности к регистру.
    3. Начинаются идентификаторы с букв латинского алфавита, $, или нижнего подчеркивания.

    Где применяется язык программирования Java? С учетом того, что тот ЯП относится к языкам широкого применения, используется Джава в различных сферах. И сегодня является одним из наиболее востребованных инструментов разработчика.

    В крупных проектах Java используется повсеместно. Например, в серверных приложениях для крупных компаний. Java можно встретить в образовательных проектах и крупных порталах.

    Еще один важный момент – Java активно применяется при разработке игр. Например, Майнкрафт написан на этом ЯП.

    Джава активно применяется и в мобильной разработке. В частности, на Java пишутся приложения, работающие на операционной системе Android. Для iOS чаще всего применяется другой ЯП – Swift.

    Помимо этого, с помощью ЯП Java создаются клиентские приложения. Наиболее популярной и известной является среда разработки NetBeans. Используется Джава и для работы с Big Data.

    То есть сфера применения этого инструмента программирования очень широка и не ограничивается какой-то определенной нишей. Это одна из причин популярности языка Java по сравнению со многими другими инструментами программирования.

    Преимущества и недостатки Джава

    К плюсам использования этого языка программирования можно отнести:
    1. Это объектно-ориентированный язык. То есть все в Джава является объектом. Можно расширять любое дополнение так как оно основано на объектной модели.
    2. Кроссплатформенность. В отличие от многих языков программирования, которые компилируются в определенных операционных системах, Java не имеет привязки к ОС. Вместо этого, он может работать в любой операционной системе при наличии Java Runtime Environment.
    3. Относительная простота. Java можно считать относительно несложным языком программирования. Особенно для тех, кто понимает концепции ООП.
    4. Портативный язык программирования. Java не имеет зависимости от реализации аспектов спецификации. Компилятор Java имеет чистую переносимость.
    5. Оптимизированный. В Java достаточно высокая скорость возможность устранения ошибок в любой ситуации.
    6. Динамический. Этот язык разработан для адаптации к меняющимся условиям.
    7. Несмотря на то, что Java менее дружелюбен к новичкам, чем тот же Python, он все равно довольно прост для разработчиков. Это предсказуемый и типизируемый язык, позволяющий тем, кто учиться, сразу же начинать мыслить в правильном направлении.
    8. Автоматическое управление памятью является еще одним важным преимуществом этого языка. В Java не требует самостоятельно писать код, который бы управлял памятью. Все это доступно в автоматическом режиме через АММ (Automatic Memory Management).
    9. Большое сообщество разработчиков. Это не только способствует росту количества библиотек и полезных фреймворков. Для тех, кто изучает Java это возможность задать вопросы на различных форумах и тематических сайтах.

    Правда, есть и недостатки, некоторые из которых появились не так давно. Например, в 2019 году появилась информация о том, что Oracle будет взимать плату за коммерческое использование Java Standard Edition 8. То есть исправление ошибок и новые обновления отныне будут не бесплатными. Причем размер тарифа будет зависеть от количества пользователей и компьютеров.

    Достаточно низкая производительность. Java является языком высокого уровня. Соответственно, у него достаточно низкая производительность ввиду компиляции и абстракции с помощью виртуальной машины. То же приложение для очистки памяти очень полезно. Но оно может привести к проблемам с производительностью.

    Еще один недостаток – отсутствие нативного дизайна для ПК. Например, для разработки на Андроид есть Android Studio. Для ПК такого не существует.

    К минусам языка программирования можно отнести достаточно сложный код. Можно сказать, что Java – то облегченная версия С++. Если сравнивать с Python, то у последнего код намного лаконичнее.

    Пример кода на Java

    Традиционной, в примерах кода мы будем использовать строку «Привет мир». Вот как она реализована в Java:

    Как видно, данная строка выглядит несколько сложнее, чем тоже самое на Python или JavaScript.

    Перспективы Джава

    С точки зрения популярности, Java по версии State of Octoverse за 2019 год входит в число наиболее используемых ЯП. Уступает позиции только Python и JavaScript. Это говорит о том, что Джава сегодня пользуется невероятной популярностью и тенденция эта вряд ли пойдет на спад в ближайшее время.

    Стоит ли начинать изучать Джава сегодня? Интерес к этому языку программирования вряд ли угаснет в ближайшее время. На нем написано большое количество программ, которые в будущем будут требовать, как минимум поддержки со стороны разработчиков, а как максимум, доработки, внедрения новшеств и так далее. Соответственно, это не оставит программистов, работающих на Java без работы на долгие годы.

    К тому же, тенденция такова, что количество программ, написанных на Джава не уменьшается, а только увеличивается. Да, появляются конкурирующие языки, которые частично заменяют Java в тех или иных областях. Но серьезно пошатнуть позиции этого ЯП они вряд ли способны.

    Легко ли выучить Java? На самом деле, все зависит от желания и стремления. Java считается одним из дружественных языков для новичков. Конечно, в нем нет той легкости и лаконичности, которая присутствует в Python. Однако разработчики, создавшие Java, старались изо всех сил сделать его максимально легким в изучении.

    В процессе обучения важно понять базовые концепции программирования. Сам язык уже вторичен.

    Каковы перспективы у детей, начинающих изучать Java? Здесь сразу же отметим, что ребенок в 6-10 лет вряд ли будет изучать Java. Скорее, он будет выяснять общие концепции программирования через такие среды разработки, как Scratch или Snap!, созданные специально для обучения самых маленьких.

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *