Найти в Дзене
Разработчик (up)

JAVA? Что из себя представляет?

Java (произносится" Джава) — объектно-ориентированный язык программирования, выпущенная в 1995 году компанией «Sun Microsystems» как основной компонент платформы Java. С 2009 года языком занимается компания «Oracle», которая в том году приобрела «Sun Microsystems». В официальной реализации Java-программы компилируются в байт-код, который при выполнении интерпретируется виртуальной машиной для конкретной платформы. «Oracle» предоставляет компилятор Java и виртуальную машину Java, которые удовлетворяют спецификации Java Community Process, под лицензией GNU General Public License. Речь значительно позаимствовала синтаксис из C и C++. В частности, взят за основу объектной модели С++, однако ее модифицировано. Устранена возможность появления некоторых конфликтных ситуаций, которые могли возникнуть из-за ошибки программиста и облегчен сам процесс разработки объектно-ориентированных программ. Ряд действий, которые в С/C++ должны осуществлять программисты, поручено виртуальной машине. Прежде в
Оглавление

Java (произносится" Джава) — объектно-ориентированный язык программирования, выпущенная в 1995 году компанией «Sun Microsystems» как основной компонент платформы Java. С 2009 года языком занимается компания «Oracle», которая в том году приобрела «Sun Microsystems». В официальной реализации Java-программы компилируются в байт-код, который при выполнении интерпретируется виртуальной машиной для конкретной платформы.

«Oracle» предоставляет компилятор Java и виртуальную машину Java, которые удовлетворяют спецификации Java Community Process, под лицензией GNU General Public License.

Речь значительно позаимствовала синтаксис из C и C++. В частности, взят за основу объектной модели С++, однако ее модифицировано. Устранена возможность появления некоторых конфликтных ситуаций, которые могли возникнуть из-за ошибки программиста и облегчен сам процесс разработки объектно-ориентированных программ. Ряд действий, которые в С/C++ должны осуществлять программисты, поручено виртуальной машине. Прежде всего Java разрабатывалась как платформо-независимый язык, поэтому она имеет меньше низкоуровневых возможностей для работы с аппаратным обеспечением, в сравнении, например, с C++ уменьшает скорость работы программ. При необходимости таких действий Java позволяет вызывать подпрограммы, написанные на других языках программирования.

Java повлияла на развитие J++, которая разрабатывалась компанией «Microsoft». Работу над J++ было остановлено через судебный иск «Sun Microsystems», поскольку этот язык программирования был модификацией Java. Позже в новой платформе «Microsoft» .NET выпустили J# чтобы облегчить миграцию программистов J++ или Java на новую платформу. Со временем новый язык программирования С# стал основным языком платформы, переняв многое из Java. J# в последний раз включался в версию Microsoft Visual Studio 2005. Язык сценариев JavaScript имеет схожую с Java название и синтаксис, но не связана с Java.

andreyex.ru
andreyex.ru

Название

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

История

Язык программирования Java зародилась в 1991 г. в лабораториях компании Sun Microsystems. Разработку проекта начал Джеймс Ґослінґ, сам проект имел название «Green» (Зеленый). Создание первой рабочей версии, которая имела название «Oak» (дуб), заняло 18 месяцев. Поскольку оказалось, что имя Oak уже использовалось другой фирмой, то в результате длительных споров вокруг названия нового языка из ряда предложенных было выбрано название Java, в 1995 г. язык был официально переименован.

Главным мотивом создания 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 бытовой электроники на программирование для Интернет.

www.java-mentor.com
www.java-mentor.com

Основные концепции

Первоначальные цели

В создании языка программирования Java было пять исходных целей:

  1. Синтаксис языка должен быть «простым, объектно-ориентированным и привычным».
  2. Реализация должна быть безотказной и безопасной».
  3. Должна сохраниться «независимость от архитектуры и переносність».
  4. Высокая производительность выполнения
  5. Язык должен быть «інтерпретованою, многопоточным, с динамическим связыванием модулей».

Платформа

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

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

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

Основное преимущество использования байт-кода — это портативность. Тем не менее, дополнительные расходы на интерпретацию означают, что интерпретируемые программы будут почти всегда работать медленнее, чем скомпилированные в машинный код, и именно поэтому Java получила репутацию «медленной» языка. Однако, этот разрыв существенно сократился после введения нескольких методов оптимизации в современных реализациях JVM.

Одним из таких методов является just-in-time компиляция (JIT), который преобразует байт-код Java в машинный во время первого запуска приложения, а затем кэширует его. В результате такая программа запускается и выполняется быстрее, чем простой интерпретированный код, но ценой дополнительных затрат на компиляцию во время выполнения. Более сложные виртуальные машины также используют динамическую рекомпиляцию, которая заключается в том, что виртуальная машина анализирует поведение запущенной программы и выборочно рекомпилирует и оптимизирует определенные ее части. С использованием динамической рекомпиляции можно достичь большего уровня оптимизации, чем при статической компиляции, поскольку динамический компилятор может делать оптимизации на базе знаний об окружающей среде периода выполнения и загруженные классы. К тому же он может обнаруживать так называемые горячие точки — части программы, зачастую внутренние циклы, которые занимают больше всего времени при выполнении. JIT-компиляция и динамическая рекомпиляция увеличивает скорость Java-программ, не теряя при этом портативности.

Существует еще одна технология оптимизации байткоду, широко известная как статическая компиляция, или компиляция ahead-of-time (AOT). Этот метод предусматривает, как и традиционные компиляторы, непосредственное компиляцию в машинный код. Это обеспечивает хорошие показатели в сравнении с интерпретацией, но за счет потери переносимости: скомпилировав таким способом программу можно запустить только на одной, целевой платформе.

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

Объектность

В противовес C++, Java является более объектно-ориентированной. Все данные и действия группируются в классы объектов. Исключением из полного об'єктності (как скажем в Smalltalk) есть примитивные типы (int, float и тому подобное). Это было сознательным решением проєктувальників языка ради увеличения скорости. За это Java не считается полностью объектно-ориентировочной языке.

В Java все объекты являются производными от главного объекта (он называется просто Object), из которого они наследуют базовую поведение и свойства.

Хотя в C++ впервые стало доступно множественное наследование, но в Java возможно только одинарное наследования, благодаря чему исключается возможность конфликтов между членами класса (методы и переменные), которые наследуются от базовых классов.

Безопасность

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

В Java существует система исключений или ситуаций, когда программа сталкивается с неожиданными трудностями, например:

  • операции над элементом массива вне его или над пустым элементом
  • чтение с недоступного каталога или неправильной URL
  • ввод недопустимых данных пользователем

Одна из особенностей концепции виртуальной машины заключается в том, что ошибки (исключения) не приводят к полному краху системы. Кроме того, существуют инструменты, которые «присоединяются» к среде периода выполнения и каждый раз, когда произошло определенное исключение, записывают информацию с памяти для отладки программы. Эти инструменты автоматизированной обработки исключений предоставляют основную информацию относительно исключений в программах на Java.

Однако язык программирования Java не рекомендуется использовать в системах, сбой в работе которых может привести к смерти, травм или значительных физических повреждений (например, программное обеспечение для управления атомными электростанциями, полетами, систем жизнеобеспечения систем вооружения) за ненадежности программ, написанных на языке программирования Java (пункт лицензии Microsoft 7.7.h.).

Автоматическое управление памятью

Java использует автоматический сборщик мусора (GC - Garbage Collector) для управления памятью во время жизненного цикла объекта. Программист решает, когда создавать объекты, а виртуальная машина ответственное за освобождение памяти после того, как объект становится ненужным. Когда до определенного объекта уже не остается ссылок, сборщик мусора может автоматически убирать его из памяти. Однако, утечка памяти все же может произойти, если код, написанный программистом, имеет ссылки на уже ненужные объекты, например на объекты, хранящиеся в действующих контейнерах.

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

Java не имеет поддержки указателей в стиле C/C++. Это сделано ради безопасности и надежности, чтобы позволить сборщику мусора перемещать объекты.