Java

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.


1. История

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

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


2. Главные концепции

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

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

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

2.2. Платформа Java

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

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

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

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

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

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

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


2.3. Объектность

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

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

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


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

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

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

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

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

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


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

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

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

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


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

Программа, которая выводит "Hello, World!" :

 public  class  HelloWorld  {  public  static  void  main  (  String  [  ]  args  )  {  System  .  out  .  println  (  "Hello, World!"  )  ;  }  } 

4. Выпуски


5. Структура Java программы

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


5.1. Лексическая структура

Java программы записываются в Кодировке Unicode, также предоставляется лексическое преобразование, которое позволяет записывать символы Юникода руководящими кодами Unicode с помощью лишь множества символов ASCII. Язык Java представляет текст последовательностями 16-битных кодовых единиц, используя кодировку UTF-16. За исключением комментариев, идентификаторов и содержания символьных и строковых литералов, все входящие элементы программы на Java состоят из символов ASCII или соответствующих им руководящих кодов Unicode.


5.2. Типы данных

Java является строго типизированных языке, каждая переменная и выражение имеет тип, известный на этапе компиляции.

Типы языка Java принадлежат к двум категориям: простые (primitive) и Указатель (reference). К простым типов относится логический (логический) тип, числовые типы и символьный тип.

Числовые типы состоят из целых типов byte, short, int, long и вещественных типов float, double. Символьный тип представлен типом char. Указатель типа состоят из классов, интерфейсов, массивов. Значением вказивникового типа есть указатель на объект - экземпляр класса или массива. Строки являются объектами класса String.


5.3. Простые типы данных

Тип Длина (в байтах) Диапазон или набор значений
boolean не определено true, false
byte 1 -128 .. 127
char 2 0 .. 16 февраля -1, или 0 .. 65535
short 2 -2 15.. 15 февраля -1, или -32768 .. 32767
int 4 -2 31.. 31 февраля -1, или -2147483648 .. 2147483647
long 8 -2 63.. 2 63 -1, или примерно -9.2 ? 10 18.. 9.2 ? 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) ? Февраль 1023.. (2-2 -52) ? 2 1023, или примерно -1.8 ? 10 308.. 1.8 ? 10 308, а также - \ Infty , \ Infty , NaN



6. Графический интерфейс пользователя

Для реализации графического интерфейса ( GUI) в Java существуют два основных пакеты классов [9] :

Преимуществами первого является простота использования, интерфейс подобный интерфейсу операционной системы и несколько лучше быстродействие, поскольку базируется на средствах ОС, правда имеет ограниченный набор графических элементов. Второй пакет Swing реализует собственный Java интерфейс. Этот пакет создавался на основе AWT, и имеет гораздо больше возможностей и большее количество графических элементов. [10]. Swing-компоненты еще называют облегченными ( англ. lightweight ), Поскольку они написаны полностью на Java и, поэтому, платформонезависимое.

Существуют также посторонние пакеты, популярен Standard Widget Toolkit (SWT, произносится "ес-дабл-ю-е") - Стандартный инструментарий виджетов. Разработан подразделением Rational фирмы IBM и компанией Object Technology International (OTI), сейчас развивается фондом Eclipse.


7. Примечания

  1. "The Java Language Environment" - java.sun.com/docs/white/langenv/Intro.doc1.html # 943. May 1996 . http://java.sun.com/docs/white/langenv/Intro.doc1.html # 943 - java.sun.com/docs/white/langenv/Intro.doc1.html # 943 .
  2. "The Java Language Specification, 2nd Edition" - java.sun.com / docs / books / jls / second_edition / html / intro.doc.html # 237601 . http://java.sun.com/docs/books/jls/second_edition/html/intro.doc.html # 237601 - java.sun.com / docs / books / jls / second_edition / html / intro.doc.html # 237601 .
  3. http://www.computerworld.com.au/index.php/id; 1422447371; pp, 3, fp; 4194304; fpid, 1 - www.computerworld.com.au / index.php / id; 1422447371; pp; 3; fp; 4194304; fpid, 1
  4. Different Isn't Always Better, But Better's Always Different - blogs.sun.com/jonathan/entry/better_is_always_different.11: 45 30 августа 2007
  5. The Java History Timeline - www.java.com / en / javahistory / timeline.jsp. Официальный сайт www.java.com
  6. 1.2 Design Goals of the JavaTM Programming Language - java.sun.com/docs/white/langenv/Intro.doc2.html
  7. http://java.sun.com/docs/books/tutorial/getStarted/intro/changemylife.html - java.sun.com / docs / books / tutorial / getStarted / intro / changemylife.html
  8. Текст лицензии Microsoft - msdnaa.oit.umass.edu / Neula.asp
  9. Графический интерфейс на Java (Swing GUI Tutorial) - www.javenue.info/post/36
  10. Feigenbaum, Barry. "SWT, Swing or AWT: Which is right for you? (21.02.2006)" - www.ibm.com/developerworks/grid/library/os-swingswt/ . http://www.ibm.com/developerworks/grid/library/os-swingswt/ - www.ibm.com/developerworks/grid/library/os-swingswt/ . Проверено 2010-09-02 .

См.. также

Братский проект Википедия имеет книгу на тему

Ресурсы


8.1.2. Библиография

  • James Gosling; Bill Joy, Guy Steele, Gilad Bracha The Java Language Specification, Third Edition. - Addison-Wesley, 2005. ISBN 0-321-24678-0.


Язык Это незавершенная статья о языка программирования.
Вы можете помочь проекту, исправив и дополнив ее.


п ? в ? р Java
Платформы Java
Java ? JVM ? Micro Edition ? Standard Edition ? Enterprise Edition ? Java Card
Wave.svg
Технологии Sun
Основные технологии Java
Апплеты ? Сервлеты ? MIDlets ? JavaServer Pages ? Web Start (jnlp)
Основные сторонние технологии
JRockit ? GNU Classpath ? Kaffe ? TopLink ? Apache Harmony ? Apache Struts ? Spring framework ? Hibernate ? JBoss application server ? Tapestry ? Jazelle
История
История версий Java ? Критика Java ? Java Community Process ? Sun Microsystems ? Свободные реализации Java
Языки программирования JVM
BeanShell ? Clojure ? Groovy ? Java Tcl ? JRuby ? Jython ? Processing ? Rhino ? Scala ? больше ...
Java конференции
JavaOne
п ? в ? р Свободное и открытое программное обеспечение
Общее
История
ОС на базе СПО
Разработка СПО
Eclipse ? Free Pascal ? GCC ? Java ? libJIT ? LLVM ? Lua ? Open64 ? Perl ? PHP ? Python ? ROSE ? Ruby ? Tcl
Менеджеры
окон XWS
BlackBox ? Compiz ? EDE ? Enlightenment ? ?toil? ? Fluxbox ? GNOME ? JWM ? IceWM ? KDE ? Openbox ? ROX ? Window Maker ? Xfce
Организации
Фонд свободного ПО (FSF) (европейский ? индийский ? латиноамериканский) ? Apache Software Foundation ? Blender Foundation ? Eclipse Foundation ? freedesktop.org ? GNOME Foundation ? Проект GNU ? Google Code ? Linux Foundation ? Mozilla Foundation ? Open Source Initiative ? SourceForge ? Symbian Foundation ? Xiph.Org ? XMPP Standards Foundation ? X.Org Foundation
Лицензии
Apache ? Artistic License ? BSD ? GNU GPL ? GNU LGPL ? MIT ? CDDL ? MPL ? Ms-PL/RL ? zlib ? FSF approved licenses ? Позволяющие лицензии программного обеспечения ? Либеральные лицензии ? Разнообразие лицензий
Проблемы
Двоичный Блоб ? Digital rights management ? Технические средства защиты авторских прав ? Graphics hardware and FOSS ? Лицензионное пролиферация ? Mozilla software rebranding ? Безопасность открытого ПО ? Несвободное программное обеспечение ? Конфликт SCO-Linux ? Программные патенты ? Тивоизация ? Trusted Computing ? Hardware restrictions ? Viral license
Другое
Альтернативные названия ? Сообщество ? Движение ? Свободное и открытое ПО ? Microsoft Open Specification Promise ? Сравнение открытых и закрытых кодов ? Revolution OS (фильм)