Разное

Для чего язык java: С чего начать изучение Java программирования

Содержание

Введение в программирование на Java

Введение в программирование на Java

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

Вы — начинающий Java-разработчик? На этой странице вы найдете обзор
основных Java™-технологий и их места в разработке современного
программного обеспечения. Эта страница, содержащая ссылки на вводные
статьи developerWorks по этой и смежным темам, другие образовательные
материалы, а также на материалы для загрузки и продукты IBM, является
превосходной отправной точкой для изучения Java.

Что такое «технологии Java»?

Java — это одновременно язык программирования и платформа.

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

Во-вторых, Java — это программная платформа, версии которой
поставляются для различных аппаратных систем. Существуют три версии Java
(см. раздел Редакции платформы Java ниже).
Платформа включает в себя JVM и интерфейс прикладного программирования
на Java (API), представляющий собой обширный набор готовых программных
компонентов (классов), облегчающих разработку и развертывание апплетов и
приложений. API Java охватывает многие аспекты разработки на Java, в том
числе манипулирование базовыми объектами, сетевое программирование,
обеспечение безопасности, генерацию XML и Web-сервисы. API организован в
виде набора библиотек, именуемых пакетами, которые содержат
классы и интерфейсы для решения связанных друг с другом задач.

В дополнение к API каждая полноценная реализация платформы Java должна
включать следующее:

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

JVM также является проверенной средой для выполнения приложений,
написанных на отличных от Java языках. В частности, Groovy, Scala и
специализированные реализации Ruby и Python предоставляют разработчикам
возможность исполнения на JVM динамических и функциональных языков
(более подробная информация приведена в разделе Какое
отношение имеет Java к динамическим языкам и функциональному
программированию?).

Язык Java был разработан компанией Sun Microsystems. В настоящее время
развитие Java-технологий, в том числе работа над спецификациями,
эталонными реализациями и тестами совместимости, осуществляется под
контролем открытой некоммерческой организации JCP (Java Community
Process), которая объединяет Java-разработчиков и держателей лицензий. В
2007 г. Sun выпустила свободную версию Java, включающую основные
компоненты платформы, под лицензией GNU GPL v2 (GPLv2). Подробнее об
этой версии можно прочитать в разделе Java и разработка
свободного программного обеспечения.

Зачем следует изучать Java?

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

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

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

  • Ознакомьтесь с подходом к сервис-ориентированной архитектуре
    (SOA)
    (EN), принятым в IBM, и узнайте, как SOA помогает
    создавать гетерогенные приложения, функциональность которых
    обеспечивается из разных источников как внутри, так и за пределами
    предприятия, тем самым поддерживая горизонтальные бизнес-процессы.
    IBM предоставляет ряд вводных материалов по SOA (EN),
    ориентированных на бизнес-пользователей и ИТ-специалистов, которые
    помогут вам начать использовать эту технологию.
  • Управление бизнес-процессами на основе SOA
    (EN)
    — это предлагаемый IBM компонентный
    подход, предоставляющий весь спектр возможностей для проведения
    стратегических изменений. Предоставляемые решения базируются на
    гибком, расширяемом, основанном на открытых стандартах программном
    обеспечении (в том числе Java) и аппаратной
    инфраструктуре.

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

  • Java SE (Java Platform, Standard Edition).
    Используя Java SE, вы можете создавать и развертывать
    Java-приложения для настольных компьютеров и серверов, а также
    разрабатывать встроенное программное обеспечение и программы для
    систем реального времени. Редакция Java SE включает классы,
    необходимые для создания Web-сервисов, и базовые компоненты Java EE
    (Java Platform, Enterprise Edition). Текущей версией платформы Java
    SE является Java SE 6, также известная как «Мустанг». При этом
    многие разработчики по-прежнему используют Java SE 5 (Java 5.0, или «Тигр»).
  • Java EE (Java Platform, Enterprise Edition). Эта
    корпоративная версия платформы помогает разработчикам создавать и
    развертывать переносимые, надежные, масштабируемые и безопасные
    серверные приложения на Java. Развивая возможности Java SE, Java EE
    предоставляет API Web-сервисов, компонентных моделей, удаленного
    взаимодействия и управления для реализации корпоративного
    программного обеспечения по принципам SOA и Web 2.0.

    • Прочитайте статьи Познакомьтесь с Java EE 5 и Java EE 5: Мощь и производительность при меньшей
      сложности, в которых содержится вводный обзор
      возможностей последней версии платформы Java
      EE.
    • Обратите внимание на серию статей о Spring (EN) — популярной инфраструктуре
      для создания легковесных и надежных приложений Java
      EE.
    • Дополнительная информация о Java EE приводится в статьях
      колонки Исследование J2EE (EN).
    • Статьи серии Начало пути: Миграция на платформу Java (EN)
      были написаны специально для разработчиков . NET,
      клиент-серверных приложений для Windows и приложений ASP,
      чтобы помочь им перейти на Java.
  • Java ME (Java Platform, Micro Edition). Java ME
    предоставляет среду для выполнения приложений, созданных для
    широкого круга мобильных и встроенных систем, например мобильных
    телефонов, карманных компьютеров, телевизионных приставок и
    принтеров. Эта редакция платформы предоставляет средства создания
    гибких пользовательских интерфейсов, надежную модель обеспечения
    безопасности, полный спектр встроенных сетевых протоколов, а также
    мощную поддержку сетевых и оффлайновых динамически загружаемых
    приложений. Приложения, базирующиеся на спецификациях Java ME, могут
    быть запущены на множестве устройств и при этом способны эффективно
    задействовать их системные возможности.

Какие технологии являются основными компонентами
платформы Java?

В разделе Java на сайте developerWorks содержится полный перечень стандартных технологий (EN), входящих в состав
Java. Ниже перечислены некоторые из компонентов, возможных
дополнительных пакетов и расширений, входящих в состав каждой редакции
платформы. Для каждой технологии приведено краткое описание, а также
ссылка на материалы, в которых описывается ее место в мире Java.
Обратите внимание, что многие из компонентов входят в состав
всех трех редакций платформы Java.

Технологии, входящие в состав Java SE:

  • Java Foundation Classes (Swing) (JFC) — это набор
    библиотек Java-классов, служащих для создания графических
    интерфейсов пользователя и реализации других графических функций в
    клиентских Java-приложениях. Руководство Введение в Swing (EN).
  • JavaHelp — это независимая от платформы расширяемая
    справочная система, позволяющая разработчикам и техническим
    писателям встраивать справочные страницы в апплеты, программные
    компоненты, приложения, операционные системы и устройства, а также
    создавать справочные Web-системы. Обратитесь к статье Создание справочных систем для Java-приложений
    (EN).
  • Благодаря Java Native Interface (JNI)
    Java-приложения, выполняющиеся внутри JVM, могут взаимодействовать с
    программами и библиотеками, написанными на других языках
    программирования.
  • Технология Java Web Start упрощает развертывание
    Java-приложений, позволяя пользователям загружать и запускать
    функционально насыщенные программные средства, например, электронные
    таблицы, одним нажатием на кнопку мыши, без инсталляции (см. статью
    Java Web Start (EN)).
  • Java Database Connectivity (JDBC) — это API,
    предоставляющий средства для доступа к большинству реляционных
    источников данных из Java-приложений. С его помощью можно
    подключаться к множеству баз данных SQL, а также другим табличным
    источникам данных, например, электронным таблицам и
    неструктурированным файлам.
  • Java Advanced Imaging (JAI) — это
    объектно-ориентированный API, предоставляющий простую
    высокоуровневую модель программирования, упрощающую манипулирование
    изображениями.
  • Java Authentication and Authorization Service
    (JAAS) — это технология, предоставляющая сервисам средства для
    аутентификации пользователей и проверки их прав доступа. Она
    включает Java-реализацию стандартной инфраструктуры PAM (Pluggable
    Authentication Module) и поддерживает авторизацию на уровне
    пользователей.
  • Java Cryptography Extension (JCE) — это набор
    пакетов, предоставляющих инфраструктуру и реализации алгоритмов
    шифрования, генерации и обмена ключами и установления подлинности
    сообщений (Message Authentication Code — MAC). Эта технология также
    включает поддержку симметричных, асимметричных, блочных и поточных
    шифров, а также безопасных потоков и опечатанных объектов (sealed
    objects). Более подробную информацию можно получить в руководстве Безопасность в Java: Основы криптографии
    (EN).
  • Java Data Objects (JDO) — это стандартная
    абстрактная модель долговременного хранения Java-объектов,
    базирующаяся на интерфейсах. С ее помощью разработчики могут
    напрямую сохранять экземпляры Java-классов предметной области в
    постоянном хранилище (например, базе данных). Эта модель в ряде
    случаев может заменять прямую запись в файл, сериализацию, JDBC, а
    также использование серверных компонентов EJB, как управляемых
    контейнерами (Container Managed Persistence — CMP), так и
    самостоятельно хранящих состояние (Bean Managed Persistence — BMP).
  • Пакет Java Management Extensions (JMX) содержит
    средства для создания распределенных, модульных, динамических и
    доступных через Web приложений для управления и мониторинга
    устройств, программного обеспечения и сетей, основанных на
    предоставлении сервисов (см. статью Использование компонентов управления платформой
    Java).
  • Java Media Framework (JMF) позволяет добавлять
    аудио-, видео- и другую медиа-информацию в приложения и апплеты на
    Java (см. руководство Основы Java Media Framework (EN)).
  • Java Naming and Directory Interface (JNDI) — это
    унифицированный интерфейс для обращения к различным сервисам имен и
    каталогов в корпоративной сети. С его помощью приложения могут
    эффективно подключаться к различным службам имен и каталогов в
    гетерогенной среде уровня предприятия .
  • Java Secure Socket Extensions (JSSE) — это набор
    пакетов для обеспечения безопасного обмена информацией в Интернете.
    Они реализуют Java-версию протоколов SSL (Secure Sockets Layer) и
    TLS (Transport Layer Security) и предоставляют средства для
    шифрования данных, проверки целостности сообщений, аутентификации на
    сервере и на клиенте (последняя возможность не является
    обязательной).
  • Java Speech API (JSAPI) включает в себя
    спецификации JSGF (формат грамматики Java Speech) и JSML (язык
    разметки Java Speech). Этот пакет предоставляет возможности для
    использования речевых технологий в пользовательском интерфейсе.
    JSAPI — это кросс-платформенный API для поддержки распознавания
    голосовых команд, систем речевого ввода данных и синтеза речи. За
    более подробной информацией обратитесь к следующему разделу статьи
    Интерфейсы пользователя в Java 2 (EN).
  • Java 3D — это API, предоставляющий
    кросс-платформенные и масштабируемые возможности для работы с
    3D-графикой в Java-приложениях. API организован в виде набора
    объектно-ориентированных интерфейсов, складывающихся в единую
    простую высокоуровневую модель программирования .
  • Механизм Metadata Facility позволяет разработчикам
    определять атрибуты для классов, интерфейсов, полей и методов,
    благодаря чему они могут подвергаться специальной обработке со
    стороны средств разработки, развертывания и сторонних библиотек на
    этапе выполнения приложения (см. статью Аннотации в Тигре. Часть 1: Добавление метаданных в Java-код
    (EN)).
  • Java Content Repository API — это API для доступа к
    репозиториям контента в Java SE независимо от их реализации.
    Подобные репозитории представляют собой высокоуровневые системы
    управления информацией и являются расширенными вариантами
    классических репозиториев данных.
  • Enumerations (перечисление) — это тип данных,
    позволяющий описывать различные элементы данных в виде
    типизированного набора констант.
  • Generics (обобщенные типы) позволяют создавать
    классы с параметрами (абстрактными типами), которые указываются на
    этапе инстанциирования. За подробностями обратитесь к статье Введение в обобщенные типы в JDK 5.0 (EN), а также
    ознакомьтесь со статьей Оживите ваши коллекции при помощи обобщенных типов и
    возможностей параллельного доступа (EN), в которой
    рассказывается о том, как обобщенные типы облегчают работу с
    коллекциями в Java SE 6.0.
  • Утилиты Concurrency — это набор классов,
    предоставляющих функциональность среднего уровня, которая обычно
    требуется приложениям, выполняющим параллельную обработку данных
    .
  • Java API for XML Processing (JAXP) — это API, при
    помощи которого Java-приложения могут разбирать и преобразовывать
    XML-документы вне зависимости от используемого процессора XML. Это
    позволяет приложениям легко переключаться между разными процессорами
    без изменений в прикладном коде. В свою очередь, технология JAXB
    (Java API for XML Binding) предоставляет
    возможности для автоматизации сопоставления документов XML и
    объектов Java.
  • SOAP with Attachments API for Java (SAAJ)
    предоставляет разработчикам функции для формирования и обработки
    сообщений в соответствии со спецификацией SOAP 1.1 c указанием SOAP
    with Attachments (SOAP с вложениями). За более подробной информацией
    обратитесь к статье Совет: Отправка и получение сообщений SOAP с помощью
    SAAJ).

Технологии, входящие в состав J2EE:

  • Enterprise JavaBeans (EJB) — это компонентная
    модель, которая упрощает разработку связующего программного
    обеспечения, предоставляя такие сервисы, как управление
    транзакциями, обеспечение безопасности и подключение к базам данных.
  • Спецификация портлетов определяет набор API для
    создания порталов на Java, охватывая такие аспекты, как
    агрегирование и представление информации, персонализация и
    обеспечение безопасности (см. статью Что нового в Java Portlet Specification V2.0 (JSR
    286)?).
  • JavaMail — это API, предоставляющий набор
    абстрактных классов, моделирующих почтовую систему.
  • Java Message Service (JMS) — это API,
    поддерживающий создание переносимых Java-приложений на основе
    механизма обмена сообщениями. Он определяет общий набор базовых
    понятий и стратегий программирования для всех систем обмена
    сообщениями, совместимых с JMS .
  • JavaServer Faces (JSF) предоставляет программную
    модель, помогающую создавать Web-приложения путем компоновки страниц
    из многократно используемых компонентов пользовательского
    интерфейса, а также связывания этих компонентов с источниками
    данных, а событий, генерируемых на клиенте — с серверными
    обработчиками. За более подробной информацией обратитесь к
    руководству из двух частей Введение в JavaServer Faces (EN) и серии статей колонки JSF для скептиков (EN).
  • JavaServer Pages (JSP) предоставляет
    Web-разработчикам средства для быстрого создания и простой поддержки
    динамических, кросс-платформенных Web-страниц, которые разделяют
    пользовательский интерфейс и генерацию контента, благодаря чему
    дизайнеры могут изменять разметку, не трогая динамически формируемое
    содержимое (см. руководство Введение в технологию JavaServer Pages (EN).
  • Стандартная библиотека тегов для JavaServer Pages
    (JSTL) — это набор специализированных тегов, предоставляющих
    стандартный формат для выполнения действий, необходимых многим
    Web-приложениям. Ознакомьтесь со статьей Обновите ваши страницы JSP
    при помощи JSTL (EN) и серией из четырех частей под названием Учебник по JSTL (EN).
  • Сервлеты Java расширяют функциональность
    Web-серверов, предоставляя кросс-платформенный, компонентный подход
    к созданию Web-приложений, свободный от ограничений
    производительности, характерных для CGI.
  • J2EE Connector Architecture (JCA) предоставляет
    стандартную архитектуру для подключения приложений J2EE к
    разнородным корпоративным информационным системам (EIS). Эта
    архитектура определяет набор масштабируемых и безопасных механизмов
    на основе транзакций, при помощи которых поставщики EIS могут
    предоставлять стандартные адаптеры ресурсов для включения в сервер
    приложений. За более подробной информацией обратитесь к статьям Освоение JCA-транзакций, Выбор технологии для интеграции прикладных систем предприятия
    (EAI) — JCA, JMS или Web-сервисы? и руководству Введение в архитектуру JCA в J2EE (EN).
  • Спецификация J2EE Management (JMX) определяет
    информационную модель управления для платформы J2EE. Эта модель была
    специально спроектирована для взаимодействия со многими системами и
    протоколами управления. Она содержит стандартные средства для
    сопоставления с общей информационной моделью (Common Information
    Model — CIM), информационной базой управления SNMP (SNMP Management
    Information Base — MIB) и объектной моделью Java при помощи
    резидентного серверного компонента EJB (J2EE Management EJB
    Component — MEJB).
  • Java Transaction API (JTA) – это высокоуровневая
    реализация и независимый от протоколов API, предоставляющий
    программам и серверам приложений средства для доступа к транзакциям.
    Java Transaction Service (JTS) определяет
    реализацию менеджера транзакций, который поддерживает JTA и
    реализует на нижележащем уровне сопоставление с объектным
    транзакционным сервисом OMG (Object Transaction Service — OTS 1.1).
    Распространение транзакций в JTS реализуется при помощи протокола
    Inter-ORB (IIOP). За более подробной информацией обратитесь к статье
    Понимание JTS — введение в транзакции.

Технологии, входящие в состав J2ME:

  • Mobile Information Device Profile (MIDP) — это одна
    из двух конфигураций, составляющих среду выполнения Java для
    мобильных устройств с ограниченными ресурсами. MIDP предоставляет
    приложениям базовую функциональность, включающую в себя средства для
    создания интерфейсов пользователя, подключения к сетевым ресурсам,
    локального хранения данных и управления жизненным циклом.
  • Connected Device Configuration (CDC) – это
    стандартизированная инфраструктура для создания и развертывания
    приложений, доступ к которым может осуществляться со стороны многих
    сетевых и встроенных устройств.
  • Mobile 3D Graphics API для J2ME (M3G) — это
    легковесный интерактивный API для реализации трехмерной графики,
    являющийся дополнительным компонентом J2ME. Подробнее о нем можно
    прочитать в серии из двух частей 3D-графика в Java для мобильных устройств
    (EN).

Технологии Java и создание Web-приложений

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

Ознакомьтесь с приведенными ниже материалами, посвященным вопросам
Web-разработки на Java.

  • Статьи колонки Изучение Grails (EN) рассказывают о Grails – современной
    инфраструктуре для создания Web-приложений, написанных на Groovy.
    Grails позволяет органично сочетать ранее написанный код на Java с
    возможностью использования гибкого и динамического скриптового
    языка. Более подробная информация о Groovy приведена ниже, в разделе
    Какое отношение имеет Java к динамическим языкам и
    функциональному программированию?.
  • Ajax – это методология программирования, предусматривающая
    использование скриптовых языков на стороне клиента для обмена
    данными с Web-сервером, что позволяет быстро обновлять информацию на
    страницах без необходимости их полной перезагрузки. Прочитав серии
    статей Просто об Ajax и разработке Java-приложений (EN) и Ajax для Java-разработчиков (EN), вы узнаете, чем Ajax
    может помочь вам как разработчику Java-приложений. За дополнительной
    информацией вы можете обратитесь к центру материалов
    Ajax (EN) на сайте developerWorks.
  • JavaServer Faces (JSF) предоставляет программную модель, помогающую
    создавать Web-приложения путем компоновки страниц из многократно
    используемых компонентов пользовательского интерфейса, а также
    связывания этих компонентов с источниками данных, а событий,
    генерируемых на клиенте — с серверными обработчиками. За более
    подробной информацией обратитесь к руководству из двух частей Введение в JavaServer Faces (EN) и серии статей колонки JSF для скептиков (EN).
  • Платформа Web-инструментария Eclipse ( Web Tools Platform – WTP)
    расширяет популярную среду разработки Eclipse, добавляя в нее
    средства для создания Web-приложений на основе технологий Java EE
    (см. руководство Введение в инструментарий Web Tools Platform v1.0 для Eclipse
    (EN)).
  • В разделе
    Web-разработки на сайте developerWorks можно найти множество
    других превосходных материалов по этим вопросам.

Технологии Java, SOA и Web-сервисы

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

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

Более подробную информацию можно получить, прочитав следующие
материалы:

  • Страницы Введение в SOA и Web-сервисы (EN) и Введение в
    XML (EN) на сайте developerWorks помогут вам
    сориентироваться в этих непростых технологиях.
  • В статьях серии Web-сервисы Java (EN) рассказывается об инфраструктурах
    Web-сервисов на Java, а также о новых функциональных слоях,
    созданных на базе этих сервисов.
  • В статье Создание Web-сервисов REST (EN) приводится введение в
    элегантный стиль проектирования Web-сервисов под названием Передача
    репрезентативного состояния (Representational State Transfer — REST)
    и рассказывается об использовании Java для создания Web-сервисов по
    принципам REST.
  • Понимание технологии JAX-RPC (RPC на основе API Java для работы с
    XML) имеет большое значение для создания эффективных Web-сервисов на
    Java.
  • JAX-WS – это очевидный следующий шаг в развитии JAX-RPC.
    Практическое введение в этот новый API дано в руководстве Проектирование и реализация Web-сервисов при помощи JAX-WS 2.0
    (EN).
  • Серия статей Создание приложений SCA (EN) представляет собой руководство
    по компонентной архитектуре сервисов (Service Component Architecture
    — SCA) — спецификации, описывающей модель разработки приложений и
    систем по принципам SOA.
  • В статье Введение в Service Data Objects приводится введение в
    инфраструктуру Service Data Objects (объекты данных сервисов),
    которая упрощает модель работы с данными в Java EE при создании
    SOA-приложений.

Какое отношение имеет Java к динамическим языкам и
функциональному программированию?

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

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

  • Скриптовый язык Groovy позволяет Java-разработчикам использовать
    наиболее привычные языковые конструкции и библиотеки, при этом
    предоставляя гибкую, динамическую среду разработки, которая не
    требует компиляции, упрощает синтаксис и поддерживает выполнение
    скриптов внутри обычных Java-приложений. Детальный обзор
    возможностей этого языка приводится в статьях серии Groovy на практике (EN).
  • Новый API скриптов в Java SE 6, обеспечивающий обратную
    совместимость с Java SE 5 и содержащий небольшой набор интерфейсов и
    классов, предоставляет простой способ вызова из Java-кода скриптов,
    написанных на десятках языков. С его помощью вы можете загружать и
    вызывать внешние скрипты на этапе выполнения, динамически изменяя
    поведение приложения. Подробнее об этом API можно прочитать в серии
    из двух статей под названием Используйте динамические языки динамично(EN).
  • Вы — горячий сторонник функционального программирования? Тогда вам
    следует обратить внимание на колонку Путеводитель по Scala для Java-разработчиков(EN), в которой
    рассказывается о Scala — языке программирования для JVM, сочетающем
    функциональный и объектно-ориентированный подход к
    разработке.
  • VM поддерживают альтернативные языки программирования уже на
    протяжении длительного времени. В статьях колонки alt.lang.jre(EN) можно прочитать о реализациях для JVM таких
    языков, как Rexx, Ruby, JavaScript, Python и некоторых других.

Java и создание свободного программного
обеспечения

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

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

Язык Java. Введение

Язык Java. Введение.

Долгое время трудно было представить себе компьютерный журнал без статьи, посвященной языку Java. О нем писали даже такие популярные газеты и журналы, как The New York Times, The Washington Post и Business Week.

Невозможно припомнить, чтобы национальное общественное радио (National Public Radio) когда-либо посвящало языку программирования десятиминутную передачу. Хорошо это или плохо, зависит от точки зрения. А инвестиции объемом 100 миллионов долларов, вложенные в производство программного обеспечения, создаваемого с помощью конкретного языка программирования?! Телекомпании CNN, CNBC и другие средства массовой информации только и говорили, да и сейчас говорят, о том, как язык Java и то сможет, и это сделает.

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

 

На первых порах между рекламными обещаниями и реальными возможностями языка Java лежала пропасть. По мере его созревания технология становилась все более стабильной и надежной, а ожидания снизились до разумного уровня. Сейчас язык Java все шире используется для создания «промежуточного программного обеспечения» (middleware), поддерживающего связь между клиентами и ресурсами серверов (например, базами данных).

Несмотря на то, что эти важные приложения не поражают воображение, именно в этой области язык Java оказался наиболее полезным благодаря своей машинной независимости, многопоточности и возможностям сетевого программирования. Кроме того, язык Java захватил лидерство в области встроенных систем (embedded systems), став фактическим стандартом портативных устройств, виртуальных киосков, бортовых автомобильных компьютеров и т.п. Однако первые попытки переписать на языке Java широко распространенные программы для персональных компьютеров не увенчались успехом — полученные приложения оказались маломощными и медленными. С появлением новой версии некоторые из этих проблем удалось решить, и все же нужно признать, что пользователям, в общем-то, совершенно безразлично, на каком языке написаны купленные ими программы. Мы полагаем, что основные преимущества языка Java проявятся при создании новых видов устройств и приложений, а не при переписывании уже существующих программ.

 

Язык Java как средство программирования

Как язык программирования Java перевыполнил свои рекламные обещания. Несомненно, это один из лучших языков, доступных серьезным программистам. Потенциально Java имеет все предпосылки, чтобы стать великим языком программирования, однако, вероятно, сейчас уже слишком поздно. Когда появляется новый язык программирования, немедленно возникает неприятная проблема его совместимости с программным обеспечением, созданным ранее. Более того, даже если изменения в эти программы можно внести без вмешательства в их текст, создателям языка, который так горячо приветствовался публикой, как, например, язык Java, сложно прямо сказать: «Да, возможно мы ошиблись при разработке версии X, но версия Y будет лучше». В итоге, ожидая появления дальнейших улучшений, мы должны констатировать, что структура языка Java в ближайшем будущем существенно не изменится.

 

Возникает очевидный вопрос: «Как удалось улучшить язык Java?«. Оказывается, это сделано не за счет усовершенствования собственно языка программирования, а путем коренного изменения библиотек программ, написанных на языке Java. Компания Sun Microsystems изменила все: начиная с имен отдельных библиотечных функций (сделав их более осмысленными) и методов работы графических модулей (изменив способ обработки событий и частично переписав рабочие программы), и заканчивая созданием новых свойств языка, например, средств вывода информации на печать, которых не было в версии Java 1.0. В результате получилась гораздо более полезная программная платформа, чем все предыдущие версии языка Java.

Компания Microsoft выпустила в свет свой собственный продукт под названием J++, имеющий отношение к языку Java. Язык J++ интерпретируется виртуальной машиной, совместимой с виртуальной машиной языка Java (Java Virtual Machine) при выполнении байт-кода, но интерфейсы с внешними кодами у этих языков значительно различаются. Языки J++ и Java имеют практически одинаковый синтаксис. Однако компания Microsoft создала дополнительные языковые конструкции. Все они имеют довольно сомнительную ценность, за исключением интерфейса Windows API. Помимо того, что у этих языков одинаковый синтаксис, их основные библиотеки (строки, утилиты, средства сетевого программирования, средства поддержки многопоточности, математические библиотеки и т.п.), по существу, также совпадают.

 

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

 

Преимущества языка Java

1) Одно из основных преимуществ языка Java — независимость от платформы, на которой выполняются программы: один и тот же код можно запускать под управлением операционных систем Windows, Solaris, Linux, Machintosh и др.
Это действительно необходимо, когда программы загружаются через Интернет для последующего выполнения под управлением разных операционных систем.

 

2) Другое преимущество заключается в том, что синтаксис языка Java похож на синтаксис языка C++, и программистам, знающим языки С и C++, его изучение не составляет труда. Правда, для программистов, владеющих языком Visual Basic, этот синтаксис, возможно, будет непривычен.

Если вы никогда не программировали на языке C++, некоторые термины, использованные в этом разделе, будут вам непонятны. В этом случае можете пропустить его. Пока вы доберетесь до конца главы 6, эти термины станут для вас привычными.

 

3) Кроме того, Java — полностью объектно-ориентированный язык, даже в большей степени, чем C++. Все сущности в языке Java являются объектами, за исключением немногих основных типов (primitive types), например чисел. (Поскольку с помощью объектно-ориентированного программирования легко разрабатывать сложные проекты, оно заменило собой более древнее структурное программирование. Если вы не знакомы с объектно-ориентированным программированием, главы 3-6 предоставят вам все необходимые сведения о нем. )

 

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

 

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

 

5) Введены истинные массивы и запрещена арифметика указателей.
Теперь программисты в принципе не могут стереть данные из памяти вследствие неправильного использования указателей.

 

6) Исключена возможность перепутать оператор присваивания с оператором сравнения на равенство.
Теперь нельзя даже скомпилировать выражение if(ntries = 3) . . . (программисты на языке Visual Basic могут вообще не заметить здесь никакой проблемы, поскольку эта ошибка — источник большинства недоразумений в языках С и C++).

 

7) Исключено множественное наследование. Оно заменено новым понятием — интерфейсом, позаимствованным из языка Objective С.
Интерфейс дает программисту почти все, что тот может получить от множественного наследования, избегая при этом сложностей, возникающих при управлении иерархиями классов.

 

Характерные особенности языка Java

Простой
Интерпретируемый
Распределенный
Надежный
Безопасный
Машинонезависимый
Объектно-ориентированный
Высокопроизводительный
Многопоточный
Динамичный
Не зависящий от архитектуры компьютера

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

 

Простой

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

 

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

Например, синтаксис оператора switch в языке Java остался неизменным. Зная язык C++, перейти к синтаксису языка Java будет легко.
Если обычно вы используете визуальную среду программирования (например Visual Basic), язык Java покажется вам сложным.
Его синтаксис часто выглядит довольно странным (хотя понять смысл выражения не составляет труда). Важнее то, что при работе на языке Java приходится намного больше программировать. Прелесть языка Visual Basic заключается в том, что его визуальная среда программирования позволяет почти автоматически создавать инфраструктуру приложения. Чтобы достичь того же результата с помощью языка Java, необходимо программировать вручную, но при этом получаются намного более короткие программы.

 

Существует, однако, и третья разновидность сред программирования, позволяющих создавать программы с помощью технологии «перетащить-и-опустить» («drag-and-drop»).

 

Другой аспект простоты — краткость. Одна из целей языка Java — обеспечить разработку программ, которые можно было бы совершенно самостоятельно выполнять на небольших машинах. Размер основного интерпретатора и средств поддержки классов составляет около 40 Кбайт; стандартные библиотеки и средства поддержки потоков (особенно номное микроядро (self-contained microkernel)) занимают еще 17: Кбайт.
Это огромный успех. Заметим, однако, что библиотеки средств поддержки графического пользовательского интерфейса значительно крупнее.

 

Объектно-ориентированный

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

 

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

Механизмы отражения (глава 5) и сериализации объектов (глава 12) позволяют реализовать устойчивые объекты и средства для создания графических пользовательских интерфейсов на основе готовых компонентов.

Если вы никогда не программировали на объектно-ориентированных языках, внимательно изучите главы 4-6. В этих главах излагаются основы объектно-ориентированного программирования и показываются его преимущества при разработке сложных проектов над такими традиционными, процедурно-ориентированными языками, как язык С или Basic.

 

Распределенный

Java обладает большой библиотекой программ для передачи данных на основе таких протоколов TCP/IP (Transmission Control Protocol/Internet Protocol-протокол управления передачей/Интернет-протокол), как HTTP (Hypertext Transfer Protocol — протокол передачи гипертекстов) или FTP (File Transfer Protocol-протокол передачи файлов). Приложения, написанные на языке Java, могут открывать объекты и получать к ним доступ через сеть с помощью и URL-адресов (Uniform Resource Location — универсальный адрес ресурса) так желегко, как авлокальной сети.

 

Язык Java предоставляет мощные и удобные средства для работы в сети. Каждый, кто когда-либо пытался писать программы для работы в Интернет на других языках, будет приятно удивлен тем, как легко решаются на языке Java самые трудные задачи, например, открытие сетевых соединений (sockets connection). Элегантный механизм, состоящий из так называемых сервлетов (servlets), делает работу на сервере чрезвычайно эффективной.

Сервлеты поддерживаются многими популярными Web- серверами. (Работа в сети будет описана во втором томе.) Связь между распределенными объектами в языке Java обеспечивается механизмом вызова удаленных методов (эта тема также раскрывается во втором томе).

 

Надежный

Язык Java предназначен для создания программ, которые должны надежно работать в любых ситуациях. Основное внимание в языке Java уделяется раннему обнаружению возможных ошибок, динамической проверке (во время выполнения программы), а также исключению ситуаций, подверженных ошибкам… Единственное значительное отличие языка Java от языка C++ заключается в модели указателей, принятой в языке Java, которая исключает возможность перезаписи участка памяти и повреждения данных.

 

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

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

 

Безопасный

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

В первом издании мы написали: «Никогда не говори никогда»,— и оказались правы. Группа экспертов по вопросам безопасности из Принстонского университета обнаружила первые ошибки в системе защиты версии Java 1.0 вскоре после появления в продаже первой версии набора инструментальных средств JDK. Более того, и они, и другие специалисты продолжали и впоследствии находить все новые и новые ошибки в механизмах безопасности всех последующих версий языка Java.

 

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

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

Web-страница компании Sun, посвященная вопросам безопасности, имеет следующий URL-адрес: http://java.sun.com/sfaq/.

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

1) Переполнение стека выполняемой программы, к которюму приводил печально известный «червь», распространявшийся в Интернет.

2) Повреждение участков памяти, находящихся за пределами пространства, выделенного процессу.

3) Считывание и запись локальных файлов при использовании безопасного загрузчика классов, например Web-броузера, который запрещает такой доступ к файлам.

 

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

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

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

 

Не зависящий от архитектуры

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

Это не новая идея. Более 20 лет назад и в системе реализации языка Pascal, разработанной Никлаусом Виртом (Niclaus Wirth), и в системе UCSD Pascal применялась та же самая технология. Использование байт-кодов дает большой выигрыш при выполнении программы (правда, синхронная компиляция во многих случаях его компенсирует). Разработчики языка Java прекрасно справились с разработкой набора команд байт-кода, которые отлично работают на большинстве современных компьютеров, легко транслируясь в реальные машинные команды.

 

Машинонезависимый

В отличие от языков С и C++, в спецификации Java нет аспектов, зависящих от системы реализации. И размер основных типов данных, и арифметические операции над ними точно определены.

Например, тип int в языке Java всегда означает 32-разрядное целое число. В языках С и C++ тип int может означать как 16-разрядное, так и 32-разрядное целое число, а также целое число произвольного размера, по выбору разработчика конкретного компилятора. Единственное ограничение заключается в том, размер типа int не может быть меньше размера типа short int и больше размера типа long int. Фиксированный размер числовых типов позволяет избежать многих неприятностей, связанных с выполнением программ на разных компьютерах. Бинарные данные хранятся и передаются в фиксированном формате, что также позволяет избежать недоразумений, связанных с разным порядком записи байтов на разных платформах (конфликт «big endian/little endian»). Строки сохраняются в стандартном формате Unicode.

Библиотеки, представляющие собой часть системы, определяют машинонезависимый интерфейс. Например, в языке предусмотрен абстрактный класс Window и его реализации для операционных систем Unix, Windows и Macintosh.

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

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

 

Интерпретируемый

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

Возможно, это дает преимущество при разработке приложений, однако приведенная цитата — явное преувеличение. В любом случае компилятор языка Java, входящий в набор инструментальных средств JSDK (Java Software Development Kit), работает довольно медленно. (Некоторые компиляторы, принадлежащие к третьей разновидности, например, компиляторы компании IBM, работают намного быстрее.) Скорость перекомпиляции — это всего лишь один из факторов, характеризующих эффективность среды программирования. Сравнив скорость работы сред программирования на языке Java и языке Visual Basic, вы, возможно, будете разочарованы.

 

Высокопроизводительный

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

Если для выполнения байт-кодов применяется интерпретатор, не следует употреблять словосочетание «высокая производительность». Однако на многих платформах возможен другой вид компиляции, обеспечиваемый синхронными компиляторами (just-in-time compilers—JIT). Они транслируют байт-код в машинозависимый код, сохраняют результат в памяти, а затем вызывают его при необходимости. Поскольку при этом интерпретация выполняется только один раз, этот подход во много раз увеличивает скорость работы.

 

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

 

МНОГОПОТОЧНЫЙ

Обеспечивает лучшую интерактивность и выполнение программы.

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

 

Динамичный

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

 

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

 

Язык Java и Интернет

Идея проста— пользователи загружают байт-коды языка Java из Интернет и выполняют их на своих машинах. Программы Java, работающие под управлением Web-броузеров, называются апплетами. Для использования апплета нужен Web-броузер, поддерживающий язык Java и способный интерпретировать байт-коды. Лицензия на исходные коды языка Java принадлежит компании Sun, настаивающей на неизменности как самого языка, так и структуры его основных библиотек. К сожалению, в реальности все не так. Разные версии броузеров Netscape и Internet Explorer поддерживают разные версии языка Java, причем некоторые из этих версий значительно устарели. Эта достойная сожаления ситуация создает все больше препятствий при разработке апплетов, позволяющих использовать преимущества последней версии языка Java. Чтобы решить эту проблему, компания Sun разработала программу Java Plug-in, позволяющую создавать наиболее современную среду для запуска программ на языке Java на основе броузеров Netscape и Internet Explorer.

 

Загрузка апплета напоминает внедрение изображения в Web-страницу. Апплет становится частью страницы, а текст обтекает занятое им пространство. Однако отличие заключается в том, что изображение теперь является живым (alive). Оно реагирует на команды пользователя, изменяет свой внешний вид и обеспечивает пересылку данных между компьютером, на котором просматривается апплет, и компьютером, управляющим этим апплетом.

Загрузка апплета напоминает вставку рисунка в Web-страницу. Апплет становится частью страницы, а текст обтекает занимаемое им место. Дело в том, что изображение является ‘живым’. Оно реагирует на команды пользователя, изменяет свой внешний вид и выполняет пересылку данных между компьютером, на котором выполняется апплет, и компьютером, управляющим этим апплетом.

 

На рис. 1.1 показан хороший пример динамической Web-страницы, выполняющей сложные вычисления и применяющей апплет для изображения молекул. Чтобы лучше понять структуру молекулы, можно вращать ее либо изменять масштаб изображения, используя мышь. Такие манипуляции нельзя реализовать на статических Web- страницах, однако апплеты делают это возможным. (Этот апплет можно найти по адресу http : //jmol.sourceforge.net.)

Рис. 1.1. Апплет Jmol

С помощью апплетов на Web-страницу можно добавлять новые кнопки и текстовые поля. Однако такие апплеты медленно загружаются по телефонной линии.

Почти то же самое можно сделать с помощью языка Dynamic HTML, форм языка HTML (Hypertext Markup Language — язык разметки гипертекстов) или языка сценариев, например, языка JavaScript. Разумеется, первые апплеты предназначались для анимации: вращающиеся глобусы, танцующие персонажи мультфильмов, вычурные тексты и т.п. Однако большинство из перечисленного могут делать и анимированные GIF-файлы, а язык Dynamic HTML в сочетании с разработкой сценариев делает намного больше, чем апплеты.

 

В результате несовместимости броузеров и несогласованности процесса загрузки через медленные сетевые соединения апплеты, предназначенные для Web-страниц, не стали огромным достижением. В локальных сетях (intranets) ситуация совершенно иная. В них обычно не возникают проблемы, связанные с пропускной способностью канала, поэтому время загрузки апплетов несущественно. В локальной сети можно выбирать нужный броузер или применять программу Java Plug-In. Сотрудники не могут переместить программу, доставленную через сеть, в неправильное место или неверно ее установить, а системному администратору не нужно обходить все клиентские машины и обновлять на них программы. Большое количество программ, предназначенных для учета товаров, планирования отпуска, возмещения транспортных расходов и тому подобного, были разработаны многими корпорациями в виде апплетов, использующих броузеры.

Пока мы писали книгу, маятник вновь качнулся от клиентских программ в сторону программирования серверных приложений (server-side programming). В частности, прикладные серверы (application servers) могут использовать мониторинговые возможности виртуальной машины Java для автоматического выравнивания нагрузки, объединения связей с базой данных, синхронизации объектов, безопасного завершения работы и повторной загрузки, а также для выполнения других процессов, необходимых для масштабируемых серверных приложений, которые почти невозможно корректно реализовать. Таким образом, программисты, создающие приложения, получили возможность купить эти сложные механизмы, вместо того, чтобы разрабатывать их самостоятельно. Это повысило производительность труда программистов — они сосредоточились на логике своих программ, не отвлекаясь на детали, связанные с работой серверов.

Термины Java | Блог только про Java

Привожу небольшой словарь наиболее употребительных терминов и понятий языка программирования Java.

100% Pure Java
Программа компании Sun Microsystems по стандартизации разработки, спецификации и продажи Java-приложений.

Abstract Window Toolkit (AWT)
Набор компонент графического пользовательского интерфейса, реализованных с использованием платформо-зависимого кода. Эти компоненты предоставляют множество функций, общих для всех платформ. Вытесняется компонентным набором Swing Set.

API (Application Programming Interface)
Интерфейс прикладных программ. Описание доступа к данным и методам классов, которыми пользуется программист при написании приложений.

applet — апплет
Программа, написанная на языке Java и выполняемая в рамках Java-совместимого web-браузера, например, HotJava или Netscape Navigator.

ASCII (American Standart Code for Information Inetr)
Стандартный семиразрядный код символов.

bean — компонент
Программный компонент многоразового использования. Комбинируя компоненты можно строить различные приложения.

bytecode — байт-код
Машинно-независимый код, который генерирует Java-компилятор. Байт-код выполняется Java-интерпретатором.

class — класс
В Java это тип, описывающий структуру заданного объекта.

CLASSPATH — путь к классу
Переменная окружения, указывающая виртуальной машине Java (JVM) и другим Java приложениям (например, инструментам Java, находящимся в каталоге JDK1.1.Xbin) местонахождение библиотеки классов, включая библиотеки пользовательских классов.

compiler — компилятор
Программа, транслирующая исходный текст программы в машинный код, который будет выполняться. Компилятор Java транслирует исходный Java-код в Java байт-код.

core class — стандартный класс
Стандартный класс или интерфейс платформы Java. Программа, удовлетворяющая стандарту 100%-Pure Java, должна быть основана только на стандартных классах, и это означает, что она будет выполняться везде, где установлен интерпретатор Java. Все стандартные классы хранятся в пакетах java.*.

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

utable content — исполняемый контекст
Приложение, которое выполняется в рамках HTML-файла.

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

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

FTP (File Transfer Protocol) — протокол передачи файлов
Является основным протоколом в Internet. Протокол FTP основан на протоколе TCP/IP и обеспечивает передачу файлов между машинами в Internet.

garbage collection — сборка мусора
Автоматическое обнаружение и освобождение неиспользуемой памяти. Система исполнения Java осуществляет автоматическую сборку мусора, так что программист не должен явно освобождать память, занятую объектами.

GUI (Graphical User Interface) — графический пользовательский интерфейс
Относится к средствам, связанным с графикой, клавиатурой и мышью для обеспечения наглядного интерфейса программ.

HotJava Browser — браузер HotJava
Простой в использовании Web-браузер, разработанный компанией Sun Microsystems и реализованный на языке Java.

HTML (HyperText Markup Language) — язык гипертекстовой разметки документов
Это формат файлов, основанный на SGML, для гипертекстовых документов в Internet. Он очень прост и позволяет встраивать изображение, звук, видео и тексты. Ссылки на другие объекты описываются с помощью URL.

HTTP (Hypertext Transfer Protocol) — протокол передачи гипертекста
Протокол Internet, основанный на TCP/IP, используемый для доставки гипертекстовых объектов с удаленных машин.

IIOP (Internet Inter-ORB Protocol) — протокол IIOP
Стандартный протокол, обеспечивающий объектно-ориентированное взаимодействие «сервер-сервер», «клиент — сервер».

Intranet — интранет
Интернет технологии, реализованные во внутренних корпоративных сетях.

Internet — интернет
Огромная сеть, состоящая из миллионов машин в различных организациях по всему миру. Физически Интернет создан объединением более мелких сетей общими протоколами передачи данных.

IP (Internet Protocol) — основной протокол Интернет
Обеспечивает ненадежную доставку отдельных пакетов с одной машины на другую. Он не дает гарантий того, будет ли доставлен пакет, будут ли пакеты доставлены в том порядке, в каком они были отправлены, будут ли они доставлены за определенное время. Протоколы, надстроенные над IP протоколом, обеспечивают надежность связи и предоставляют информацию о ней.

interpreter — интерпретатор
Программа, которая декодирует и исполняет каждую команду программы. Интерпретатор Java декодирует и исполняет Java байт-код.

JAR files (.jar) — JAR-файлы (с расширением .jar)
Формат архивных файлов Java, используемый для объединения нескольких файлов в один.

JAR file format — формат файлов JAR
JAR (Java Архив) — платформо-независимый формат файлов, объединяющий несколько файлов в один. Java апплеты и их компоненты (.class файлы, изображения, звук и другие файлы) могут быть связаны в JAR файл и затем загружены в браузер одной HTTP транзакцией. Он также поддерживает компрессию файлов и цифровые подписи.

Java
Объектно-ориентированный язык программирования, созданный компанией Sun Microsystems для реализации принципа «Написано однажды — работает везде».

JavaBeans
Переносимая платформо-независимая модель многоразового использования программных компонент.

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

Java Card API
Программный интерфейс ISO 7816-4 для смарт-карт.

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

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

Java Database Connectivity (JDBC) — взаимодействие Java и баз данных
Промышленный стандарт взаимодействия между Java и широким спектром баз данных. JDBC предоставляет основанный на SQL API для доступа к базам данных.

Java Development Kit (JDK) — набор для разработки Java-приложений
Среда разработки программного обеспечения, предназначенная для создания апплетов и приложений на Java.

Java Electronic Commerce Framework (JECF) — средства электронного бизнеса
Структурированная архитектура для разработки приложений электронного бизнеса на Java.

Java Foundation Classes (JFC)
Расширение Abstract Windowing Toolkit (AWT), содержащее библиотеки классов для разработки графических пользовательских интерфейсов.

Java Interface Definition Language (IDL) — язык определения интерфейсов
Программные интерфейсы Java, предоставляющие интероперабильность и взаимодействие с CORBA (Common Object Request Broker Architecture).

Java Management API (JMAPI) — программный интерфейс управления
Набор классов и интерфейсов языка Java, позволяющий разработчикам создавать приложения для управления системами и сетями.

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

Java Naming and Directory Interface (JNDI) — Java-интерфейс каталогов и служб именования
Набор программных интерфейсов для работы со всеми существующими системами именования и службами каталогов.

Java Platform — Java-платформа
Виртуальная машина Java и стандартные классы составляют Java-платформу. Java-платформа предоставляет программам унифицированный интерфейс 100% Pure Java независимо от операционной системы, на которой они работают.

Java Remote Method Invocation (RMI) — интерфейс вызова удаленных методов
Распределенная объектная модель, специфицирующая, каким образом производится вызов удаленных методов, работающих на другой виртуальной машине Java.

Java Runtime Environment (JRE) — среда исполнения Java
Подмножество Java Development Kit, предназначенное для конечных пользователей. JRE состоит из виртуальной машины Java (JVM), стандартных классов Java и вспомогательных файлов.

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

Java Wallet
Пользовательский интерфейс, построенный на основе JECF и поддерживающий интерактивные покупки, трансферты средств, административные функции.

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

JavaPlan
Реализованный на Java объектно-ориентированный инструмент проектирования и составления диаграмм.

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

JavaScript
Открытый межплатформенный объектный язык, разработанный компанией Netscape для создания приложений. Часто его путают с Java.

JavaSoft
Подразделение компании Sun Microsystems, Inc., занимающееся Java-технологиями.

JavaStation — Java-станция
Недорогой, не требующий администрирования сетевой компьютер, созданный компанией Sun Microsystems. Управляется операционной системой JavaOS.

linker — компоновщик
Java компоновщик создает выполняемую программу из откомпилированных классов.

Mosaic
Программа-браузер, предоставляющая простой графический пользовательский интерфейс, обеспечивающий доступ к данным в Internet. Этими данными могут быть как простые файлы, так и гипертекстовые документы. Mosaic был написан группой NCSA.

NC (Network Computer) — сетевой компьютер
Простой бездисковый компьютер с минимальным системным программным обеспечением и подключенный в компьютерную сеть.

NCSA
Национальный центр по применению суперкомпьютеров.

PersonalJava
Среда исполнения Java для сетевых приложений в бытовых и мобильных устройствах для дома и офиса.

POSIX (Portable Operating System for Unix) — интерфейс переносимых приложений для UNIX
Стандарт, определяющий способ взаимодействия между ОС UNIX и программами с помощью минимального набора вспомогательных функций.

RMI — интерфейс вызова удаленных методов

RPC (Remote Procedure Call) — вызов удаленных процедур
Выполняется как обычный вызов процедуры или метода, при этом код исполняется на удаленной машине.

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

SGML (Standardized Generalized Markup Language) — стандарт обобщенного языка разметки
Стандарт ISO/ANSI/ECMA, определяющий способ разделения текста на связанные секции.

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

thin client — тонкий клиент
Система, управляемая простой операционной системой, не требующая локального администрирования и выполняющая приложения, доставляемые по сети.

thread — поток (нить)
Последовательно выполняемый фрагмент программы. Процесс может иметь несколько потоков (нитей), выполняющихся одновременно, каждый из которых выполняет свою задачу. Если поток заканчивает выполнение своей задачи, он откладывается или уничтожается.

TCP/IP (Transmission Control Protocol based on IP) — транспортный протокол, основанный на IP протоколе
Internet протокол, обеспечивающий надежную доставку потока данных с одной машины на другую.

Unicode
Система поддержки символов по стандарту ISO 10646, в котором для представления каждого символа используется шестнадцатиразрядный набор. Все исходные модули Java написаны с использованием Unicode.

URL (Uniform Resource Locator) — система унифицированных адресов ресурсов
Стандарт записи ссылок на объекты WWW. URL записывается как «protocol://host/localinfo», где protocol — протокол пересылки данных (например, HTTP или FTP), host — Internet-имя главной машины, на которой находится объект, localinfo — строка (обычно — имя файла).

virtual machine — виртуальная машина
Абстрактное вычислительное устройство, которое может быть реализовано разными способами: аппаратно или программно. Компиляция в набор команд виртуальной машины происходит почти так же, как и компиляция в набор команд микропроцессора. Java Virtual Machine специфицируется набором команд байт-кода, набором регистров, стеком, сборщиком мусора и пространством хранения методов.

web browser — web-браузер
Графическая пользовательская программа, используемая для просмотра документов в Интернет. Сегодня большинство Web-браузеров содержат виртуальную машину Java (JVM), чтобы приложения, написанные на Java, могли автоматически загружаться и выполняться на любой платформе.

Webtop
Безопасная пользовательская Java-среда, включающая в себя электронную почту, ежедневник, справочник, прикладные программы, в том числе корпоративные приложения. Webtop может загружаться по требованию на любом клиенте Java.

WWW (World Wide Web) — всемирная компьютерная сеть
Множество компьютерных систем и хранимых на них данных, доступных во всем мире по сети Интернет.

Завод строительных материалов «Гиперпресс» — это современное высокотехнологичное производство облицовочного кирпича. Советуем вам купить кирпич гиперпрессованный  именно от «Гиперпресс».

Почему я советую знакомым студентам учить Java?

Недавно снова наткнулся на вопрос «почему Java а не что то другое?». Я уже отвечал на форуме, теперь достал и оформил в виде статьи с акцентом почему я советую знакомым студентом учить Java.
Я не очень опытный специалист и здесь будет много субъективного мнения, и конечно же тема очень обширная и холиварная, но я хочу собрать все свои мысли в одном месте.
Вкратце суть статьи:
Учить нужно то, за что платят (т.е во что вкладывают) деньги, а больше платят за Java. Там и инновации, и широкий спектр решений и технологий.
Java нацелена на разработку больших проектов, поэтому её любят большие корпорации.
А платят за Java больше чем например за C#, в который тоже вбухивают деньги, потому что стоимость разработки и сопровождения ниже: много бесплатных инструментов, библиотек обкатанных временем, средства разработки и она кроссплатформенная и можно использовать бесплатный Linux, обратно совместимая, предсказуемая и надёжная.

Но это только основные причины, постараемся добавить немного холодного анализа.

Начнём с анализа текущих дел

Сейчас массовый софт работает в трёх основных областях:

  • Desktop приложения (офисы, АРМы, студии, системы документоборота, антивирусы), т.е. требующие установки на компьютер.
  • Web приложения сюда мы отнесём все сайты и онлайн сервисы (wikipedia, gmail). Многих она притягивает потому что не требуется установка ПО и данные остаются доступными в сети.
  • Мобильные приложения
  • Игры, особенно мобильные и броузерные для социальных сетей.
  • Embeded — встроенные системы (драйверы, контроллеры)

Примерно прикинем популярность по трендам индексатора американских сайтов работы indeed.com:

Веб самый популярный, а embeded совсем мал. Mobile и игры для социальных сетей растут как на дрожжах, это очень хорошо видеть если посмотреть тренд относительного прироста:

Embeded я убрал из-за странного дёрганого тренда.

А теперь график по языкам:

Тут несколько нюансов:

  • Для большего драматизма я добавил любимый но мертвый Delphi.
  • Также по Си из-за однобуквенного названия график выходит неоправданно завышенным, я использовал C Developer, тренд хоть кажется адекватным.
  • Objective-c подозрительно маленький тренд, чаще пишут iOS developer.
  • JavaScript (не путать с Java!) раньше имел ограниченное применение для небольших клиентских сценариев в броузере, но сейчас стал активно использоваться для создания игр и даже для серверного программирования.

Основные области применения Java это большие web приложения, банковские desktop приложения и мобильная разработка для Android. Т.е. она сразу попадает в три популярные категории.

Ну и собственно зарплаты по данным опроса DOU.ua
75 перцентиль midle разработчиков в Киеве. Справа шкала количества анкет.

 

Причины такой позиции Java

  • Строгая, статическая типизация что значительно уменьшает число ошибок и улучшает сопровождаемость кода, особенно если ещё использовать статический анализатор. При этом в яве есть ограниченные возможности динамического программирования через магию рефлексии и аннотаций. Но тем не менее есть её диалект Groovy который динамический и почти полностью совместим с ней на уровне синтаксиса. На нём кстати есть отличный Rails подобный фреймворк.
  • Java на рынке с 1995 года, обкатана и существуют сотни решений и технологий.
  • Что немаловажно является по сути упрощённым C++ который учили все в институтах и поэтому переход на неё проходит менее болезненно.
  • Язык прост, предсказуем, и минималистичен. Новые фичи вводятся очень осторожно, иногда даже черезчур долго (например замыкания).
  • Синтаксис Java является чем то вроде linva franca поэтому авторы книг часто выбирают её для примеров кода.
  • Мощные IDE, в частности Idea вообще вершина эволюции средств разработки и стоит в разы дешевле чем Visual Studio Ultimate для C# (700$ против 13300$).
  • Даже если кто и быдлокодит, это будет относительно легко разгрести через средства рефакторинга в IDE.
  • Кроссплатформенность, работает буквально на всём: от суперкомпьютеров до смарткарт и что особенно приятно на бесплатном Linux и FreeBSD.
  • Существуют около 350 гигабайт библиотек доступных в репозитории Maven. Для всего всего всего. И они в большинстве своём открытые, да.
  • В следствии очень дешёвая разработка.
  • Очень много программистов. Java самый популярный язык. Есть официальная сертификация программистов OSCJP.
  • Открытая стандартизация JSR, спецификации Java EE.
  • Компилируется в байт код, а не требует полной интерпретации как например Ruby и Python, что ускоряет работу. А благодаря оптимизирующему JIT компилятору может приближаться по скорости к нативному коду.
  • И последняя но далеко не последняя по важности: Полная обратная совместимость по API и ABI ещё с самых первых версий. Седьмая Java это всего лишь минорная версия, т.е. 1.7. Ни один другой язык не может похвастаться такой обратной совместимостью, даже C#.

 

Вывод

Остальные платформы и языки тоже хороши и востребованы и некоторые из них сейчас переживают бум. На их фоне Java выделяется самой сильной позицией и неплохими, пускай не самыми большими зарплатами. Но поскольку Java используется в корпоративном секторе и все проекты на ней большие то практически полностью отсутствует возможность фриланса на ней. Например количество вакансий на самой популярной фриланс бирже oDesk по запросу Spring (самый популярный веб фреймворк для Java) совсем не впечатляет.
Поэтому многим из тех кто хочет начать карьеру программиста но живут в городах где не устроится программистом прийдётся подаваться на фриланс и педалить на гнусном PHP.

«Есть всего два типа языков программирования: те, на которые люди всё время ругаются, и те, которые никто не использует.»

(c) Бьёрн Страуструп, автор C++

И Ява тоже далека от идеала. Кстати комментарий из этой статьи:

>> Ведь основная цель java была в облегчении жизни нам — простым разработчикам.
Это вас кто-то обманул. Главное преимущество джавы — надежность и предсказуемость. Ценой многократных, по сравнению с другими языками, усилий разработчиков.

Но это не самое важное, а главное «Вы должны писать на языке, который делает вас счастливее» (Пэт Аллан).

P.S. Наткнулся на очень толковое обсуждение где очень толковые специалисты высказали своё ведение проблемы.
Обратите внимание, я не призываю выбирать Джаву как первый язык программирования, в этом есть определённая опасность.

Ещё одна статья Какой язык программирования выбрать


Не поленитесь, и почитайте ещё несколько очень важных моих статей для начинающих программистов, студентов и джуниоров.
Также не забудьте вступить в группу IT Juniors куда я пытаюсь собирать ссылки на другие полезные статьи для вас и анонсы курсов и интернатуры в компаниях.

Поделиться ссылкой:

Понравилось это:

Нравится Загрузка…

Похожее

Спецификация языка Java®

Спецификация языка Java®

Java SE 14, выпуск

Джеймс Гослинг

Билл Джой

Гай Стил

Гилад Браха

Алекс Бакли

Дэниел Смит

Гэвин Бирман

2020-02-20

Официальное уведомление


Содержание

1.Введение
1.1. Организация спецификации
1.2. Примеры программ
1,3. Обозначение
1,4. Связь с предопределенными классами и интерфейсами
1,5. Предварительный просмотр Особенности
1,6. Отзыв
1,7. Список литературы
2.Грамматики
2.1. Контекстно-свободные грамматики
2.2. Лексическая грамматика
2.3. Синтаксическая грамматика
2.4. Грамматическая запись
3. Лексическая структура
3.1. Юникод
3.2. Лексические переводы
3.3. Экранирование Unicode
3.4. Терминаторы линии
3.5. Элементы ввода и токены
3.6. Белое пространство
3,7. Комментарии
3.8. Идентификаторы
3.9. Ключевые слова
3.10. Литералы
3.10.1. Целочисленные литералы
3.10.2. Литералы с плавающей запятой
3.10.3. Логические литералы
3.10.4. Символьные литералы
3.10.5. Строковые литералы
3.10.6. Последовательности выхода для символьных и строковых литералов
3.10.7. Нулевой литерал
3.11. Сепараторы
3.12. Операторы
4. Типы, значения и переменные
4.1. Виды типов и значений
4.2. Примитивные типы и значения
4.2.1. Целочисленные типы и значения
4.2.2. Целочисленные операции
4.2.3. Типы, форматы и значения с плавающей запятой
4.2.4. Операции с плавающей запятой
4.2.5. Тип boolean и логические значения
4.3. Справочные типы и значения
4.3.1. Объекты
4.3.2. Класс Объект
4.3.3. Класс Строка
4.3.4. Когда ссылочные типы одинаковы
4.4. Переменные типа
4.5. Параметризованные типы
4.5.1. Типовые аргументы параметризованных типов
4.5.2. Члены и конструкторы параметризованных типов
4.6. Тип Erasure
4.7. Реифицируемые типы
4.8. Необработанные типы
4.9. Типы перекрестков
4.10. Подтип
4.10.1. Подтип среди примитивных типов
4.10.2. Подтип среди типов классов и интерфейсов
4.10.3. Подтип среди типов массивов
4.10.4. Наименьшая верхняя граница
4.10.5. Тип Проекции
4.11. Где используются типы
4.12. Переменные
4.12.1. Переменные примитивного типа
4.12.2. Переменные ссылочного типа
4.12.3. Виды переменных
4.12.4. final Переменные
4.12.5. Начальные значения переменных
4.12.6. Типы, классы и интерфейсы
5. Конверсии и контексты
5.1. Виды конверсии
5.1.1. Преобразование идентичности
5.1.2. Расширяющееся примитивное преобразование
5.1.3. Сужающее примитивное преобразование
5.1.4. Расширяющее и сужающее примитивное преобразование
5.1.5. Расширяющееся преобразование ссылки
5.1.6. Преобразование сужения ссылки
5.1.6.1. Допустимое сужающее преобразование ссылки
5.1.6.2. Проверенные и непроверенные преобразования сужающих ссылок
5.1.6.3. Сужение опорных преобразований во время выполнения
5.1.7. Бокс конверсия
5.1.8. Распаковка конверсии
5.1.9. Непроверенное преобразование
5.1.10. Захват преобразования
5.1.11. Преобразование строки
5.1.12. Запрещенные преобразования
5.1.13. Преобразование набора значений
5.2. Контексты присвоения
5.3. Контексты вызова
5.4. Строковые контексты
5.5. Приведение контекстов
5.6. Числовые контексты
6.Имена
6.1. Объявления
6.2. Имена и идентификаторы
6.3. Объем декларации
6.4. Затенение и затемнение
6.4.1. Затенение
6.4.2. Затемняющий
6.5. Определение значения имени
6.5.1. Синтаксическая классификация имени в соответствии с контекстом
6.5.2. Реклассификация контекстуально неоднозначных имен
6.5.3. Значение имен модулей и имен пакетов
6.5.3.1. Простые имена пакетов
6.5.3.2. Квалифицированные имена пакетов
6.5.4. Значение PackageOrTypeNames
6.5.4.1. Простой PackageOrTypeNames
6.5.4.2. Квалифицированный PackageOrTypeNames
6.5.5. Значение названий типов
6.5.5.1. Имена простых типов
6.5.5.2. Квалифицированные имена типов
6.5.6. Значение названий выражений
6.5.6.1. Имена простых выражений
6.5.6.2. Квалифицированные имена выражений
6.5.7. Значение названий методов
6.5.7.1. Имена простых методов
6,6. Контроль доступа
6.6.1. Определение доступности
6.6.2. Подробная информация о protected Access
6.6.2.1. Доступ к защищенному члену
6.6.2.2. Доступ к защищенному конструктору
6.7. Полные имена и канонические имена
7. Пакеты и модули
7.1. Участники пакета
7.2. Хост-поддержка модулей и пакетов
7.3. Единицы компиляции
7.4. Декларации упаковки
7.4.1. Именованные пакеты
7.4.2. Безымянные пакеты
7.4.3. Наблюдаемость и видимость пакета
7,5. Декларации об импорте
7.5.1. Объявления импорта одного типа
7.5.2. Декларации типа «импорт по требованию»
7.5.3. Объявления одиночного статического импорта
7.5.4. Декларации статического импорта по запросу
7,6. Объявления типа верхнего уровня
7.7. Декларации модуля
7.7.1. Зависимости
7.7.2. Экспортированные и открытые пакеты
7.7.3. Потребление услуг
7.7.4. Предоставление услуг
7.7.5. Неназванные модули
7.7.6. Наблюдаемость модуля
8. Классы
8.1. Декларация класса
8.1.1. Модификаторы класса
8.1.1.1. аннотация классы
8.1.1.2. финал классы
8.1.1.3. strictfp Классы
8.1.2. Общие классы и параметры типов
8.1.3. Внутренние классы и закрывающие экземпляры
8.1.4. Суперклассы и подклассы
8.1.5. Суперинтерфейсы
8.1.6. Декларации тела и членов класса
8.2. Члены класса
8.3. Полевые объявления
8.3.1. Модификаторы поля
8.3.1.1. статический Поля
8.3.1.2. финал поля
8.3.1.3. переходное Поля
8.3.1.4. летучие поля
8.3.2. Инициализация поля
8.3.3. Ограничения на ссылки на поля в инициализаторах
8.4. Объявления метода
8.4.1. Формальные параметры
8.4.2. Подпись метода
8.4.3. Модификаторы метода
8.4.3.1. аннотация Методы
8.4.3.2. статический Методы
8.4.3.3. финал Методы
8.4.3.4. родной Методы
8.4.3.5. strictfp Методы
8.4.3.6. синхронизировано Методы
8.4.4. Общие методы
8.4.5. Результат метода
8.4.6. Броски метода
8.4.7. Тело метода
8.4.8. Наследование, переопределение и скрытие
8.4.8.1. Переопределение (методами экземпляра)
8.4.8.2. Скрытие (методами класса)
8.4.8.3. Требования к переопределению и скрытию
8.4.8.4. Методы наследования с замещающими эквивалентными подписями
8.4.9. Перегрузка
8,5. Объявления типов элементов
8.5.1. Объявления типов статических элементов
8,6. Инициализаторы экземпляра
8.7. Статические инициализаторы
8,8. Объявления конструктора
8.8.1. Формальные параметры
8.8.2. Подпись конструктора
8.8.3. Модификаторы конструктора
8.8.4. Универсальные конструкторы
8.8.5. Конструктор бросает
8.8.6. Тип конструктора
8.8.7. Конструктор Body
8.8.7.1. Явные вызовы конструктора
8.8.8. Конструктор Перегрузка
8.8.9. Конструктор по умолчанию
8.8.10. Предотвращение создания класса
8.9. Типы перечислений
8.9.1. Константы перечисления
8.9.2. Объявления тела Enum
8.9.3. Члены Enum
9. Интерфейсы
9.1. Декларации интерфейса
9.1.1. Модификаторы интерфейса
9.1.1.1. аннотация Интерфейсы
9.1.1.2. strictfp Интерфейсы
9.1.2. Общие интерфейсы и параметры типов
9.1.3. Суперинтерфейсы и субинтерфейсы
9.1.4. Объявления тела интерфейса и элементов
9.2. Члены интерфейса
9.3. Объявления полей (констант)
9.3.1. Инициализация полей в интерфейсах
9.4. Объявления метода
9.4.1. Наследование и переопределение
9.4.1.1. Переопределение (методами экземпляра)
9.4.1.2. Требования при замене
9.4.1.3. Методы наследования с замещающими эквивалентными подписями
9.4.2. Перегрузка
9.4.3. Тело метода интерфейса
9,5. Объявления типов элементов
9,6. Типы аннотаций
9.6.1. Элементы типа аннотации
9.6.2. Значения по умолчанию для элементов типа аннотации
9.6.3. Типы повторяющихся аннотаций
9,6.4. Предопределенные типы аннотаций
9.6.4.1. @Target
9.6.4.2. @Retention
9.6.4.3. @Inherited
9.6.4.4. @Override
9.6.4.5. @SuppressWarnings
9.6.4.6. @ Устаревшая
9.6.4.7. @SafeVarargs
9.6.4.8. @ Повторяемый
9.6.4.9. @ Функциональный интерфейс
9,7. Аннотации
9.7.1. Нормальные аннотации
9.7.2. Аннотации к маркерам
9.7.3. Одноэлементные аннотации
9.7.4. Где могут появляться аннотации
9.7.5. Несколько аннотаций одного типа
9,8. Функциональные интерфейсы
9.9. Типы функций
10.Массивы
10.1. Типы массивов
10.2. Переменные массива
10.3. Создание массива
10.4. Доступ к массиву
10,5. Исключение хранилища массивов
10,6. Инициализаторы массива
10,7. Члены массива
10,8. Класс Объекты для массивов
10.9. Массив символов не является строкой
11. Исключения
11.1. Виды и причины исключений
11.1.1. Виды исключений
11.1.2. Причины исключений
11.1.3. Асинхронные исключения
11.2. Проверка исключений во время компиляции
11.2.1. Анализ исключений для выражений
11.2.2. Анализ исключений для заявлений
11.2.3. Проверка исключений
11.3. Обработка исключения во время выполнения
12. Исполнение
12.1. Запуск виртуальной машины Java
12.1.1. Загрузите тест класса
12.1.2. Ссылка Тест : Проверить, подготовить, (необязательно) разрешить
12.1.3. Тест инициализации: выполнение инициализаторов
12.1.4. Invoke Test.main
12.2. Загрузка классов и интерфейсов
12.2.1. Процесс загрузки
12,3. Связывание классов и интерфейсов
12.3.1. Проверка двоичного представления
12.3.2. Подготовка класса или интерфейса типа
12.3.3. Разрешение символических ссылок
12,4. Инициализация классов и интерфейсов
12.4.1. Когда происходит инициализация
12.4.2. Подробная процедура инициализации
12,5. Создание экземпляров нового класса
12.6. Доработка экземпляров класса
12.6.1. Осуществление доработки
12.6.2. Взаимодействие с моделью памяти
12,7. Выгрузка классов и интерфейсов
12,8. Программа выхода
13. Двоичная совместимость
13.1. Форма двоичного файла
13.2. Что такое двоичная совместимость, а что нет
13,3. Эволюция пакетов и модулей
13,4. Эволюция классов
13.4.1. аннотация классы
13.4.2. финал классы
13.4.3. общественные классы
13.4.4. Суперклассы и суперинтерфейсы
13.4.5. Параметры типа класса
13.4.6. Декларации тела и членов класса
13.4.7. Доступ к членам и конструкторам
13.4.8. Полевые объявления
13.4.9. final Поля и static Constant Variables
13.4.10. статический Поля
13.4.11. переходное Поля
13.4.12. Объявления метода и конструктора
13.4.13. Параметры типа метода и конструктора
13.4.14. Формальные параметры метода и конструктора
13.4.15. Тип результата метода
13.4.16. аннотация Методы
13.4.17. финал Методы
13.4.18. родной Методы
13.4.19. статический Методы
13.4.20. синхронизировано Методы
13.4.21. Броски метода и конструктора
13.4.22. Метод и тело конструктора
13.4.23. Перегрузка метода и конструктора
13.4.24. Переопределение метода
13.4.25. Статические инициализаторы
13.4.26. Эволюция перечислений
13,5. Эволюция интерфейсов
13.5.1. общедоступные интерфейсы
13.5.2. Суперинтерфейсы
13.5.3. Члены интерфейса
13.5.4. Параметры типа интерфейса
13.5.5. Полевые объявления
13.5.6. Объявления метода интерфейса
13.5.7. Эволюция типов аннотаций
14. Блоки и утверждения
14.1. Нормальное и внезапное завершение заявлений
14.2. Блоки
14.3. Декларации местного класса
14.4. Заявления декларации локальных переменных
14.4.1. Деклараторы и типы локальных переменных
14.4.2. Выполнение объявлений локальных переменных
14,5. Заявления
14,6. Пустое заявление
14.7. Заявления с пометкой
14,8. Выражения
14.9. if Заявление
14.9.1. , если , то Заявление
14.9.2. , если , то , иначе Заявление
14.10. утверждает заявление
14.11. Коммутатор Заявление
14.11.1. Блоки переключателей
14.11.2. Блок переключателя переключателя Заявление
14.11.3. Выполнение переключателя Заявление
14.12. , а Заявление
14.12.1. Внезапное завершение , в то время как Заявление
14,13. do Заявление
14.13.1. Неожиданное завершение от до Заявление
14.14. для Заявление
14.14.1. Базовый для Заявление
14.14.1.1. Инициализация для Заявление
14.14.1.2. Итерация для заявления
14.14.1.3. Внезапное завершение для заявления
14.14.2. Расширенный для выписки
14.15. Разрыв Заявление
14.16. Модель продолжить Заявление
14,17. Возвращает Заявление
14.18. Бросок Заявление
14.19. синхронизированный Заявление
14.20. Заявление try
14.20.1. Исполнение попытка улов
14.20.2. Выполнение попробуйте наконец и попробуйте поймать наконец
14.20.3. попробуйте -with-resources
14.20.3.1. Базовый попробуйте -with-resources
14.20.3.2. Расширенный try -with-resources
14.21. Модель yield Заявление
14,22. Недостижимые заявления
15. Выражения
15,1. Оценка, обозначение и результат
15.2. Формы выражений
15.3. Тип выражения
15.4. FP-строгие выражения
15.5. Выражения и проверки времени выполнения
15.6. Нормальное и внезапное завершение оценки
15.7. Приказ об оценке
15.7.1. Вычислить сначала левый операнд
15.7.2. Вычислить операнды перед операцией
15.7.3. Оценка с учетом скобок и приоритета
15.7.4. Списки аргументов оцениваются слева направо
15.7.5. Порядок оценки других выражений
15.8. Первичные выражения
15.8.1. Лексические литералы
15.8.2. Литералы классов
15.8.3. это
15.8.4. Квалифицировано это
15.8.5. Выражения в скобках
15,9. Создание экземпляра класса
Выражения
15.9.1. Определение экземпляра класса
15.9.2. Определение закрывающих экземпляров
15.9.3. Выбор конструктора и его аргументов
15.9.4. Оценка во время выполнения выражений создания экземпляра класса
15.9.5. Анонимные объявления классов
15.9.5.1. Анонимные конструкторы
15.10. Выражения создания и доступа к массиву
15.10.1. Выражения создания массива
15.10.2. Оценка во время выполнения выражений создания массива
15.10.3. Выражения доступа к массиву
15.10.4. Оценка во время выполнения выражений доступа к массиву
15.11. Выражения доступа к полю
15.11.1. Доступ к полю с использованием первичного
15.11.2. Доступ к членам суперкласса с помощью super
15.12. Выражения вызова метода
15.12.1. Шаг 1 во время компиляции: определение класса или интерфейса для поиска
15.12.2. Шаг 2 во время компиляции: определение
Подпись метода
15.12.2.1. Определить потенциально применимые методы
15.12.2.2. Этап 1. Определение соответствия арности
Методы, применяемые при строгом обращении
15.12.2.3. Фаза 2: определение соответствия арности
Методы, применяемые при свободном вызове
15.12.2.4. Этап 3: определение методов
Применимо с помощью вызова переменной арности
15.12.2.5. Выбор наиболее точного метода
15.12.2.6. Тип вызова метода
15.12.3. Шаг 3 на этапе компиляции: подходит ли выбранный метод?
15.12.4. Оценка времени выполнения вызова метода
15.12.4.1. Вычислить целевую ссылку (при необходимости)
15.12.4.2. Вычислить аргументы
15.12.4.3. Проверить доступность типа и метода
15.12.4.4. Найдите метод для вызова
15.12.4.5. Создание кадра, синхронизация, управление передачей
15,13. Справочные выражения метода
15.13.1. Объявление метода во время компиляции Ссылка
15.13.2. Тип метода Ссылка
15.13.3. Оценка во время выполнения ссылок на методы
15,14. Постфиксные выражения
15.14.1. Имена выражений
15.14.2. Постфиксный оператор инкремента ++
15.14.3. Постфиксный оператор декремента -
15.15. Унарные операторы
15.15.1. Оператор приращения префикса ++
15.15.2. Оператор уменьшения префикса -
15.15.3. Оператор Unary Plus +
15.15.4.Оператор унарного минуса -
15.15.5. Оператор побитового дополнения ~
15.15.6. Оператор логического дополнения !
15,16. Cast Expressions
15,17. Мультипликативные операторы
15.17.1. Оператор умножения *
15.17.2. Оператор отдела /
15.17.3. Оператор остатка %
15.18. Аддитивные операторы
15.18.1. Оператор конкатенации строк +
15.18.2. Аддитивные операторы ( + и - ) для числовых типов
15.19. Операторы смены
15.20. Операторы отношения
15.20.1. Операторы численного сравнения <,
<= , > и > =
15.20.2. Оператор сравнения типов instanceof
15.21. Операторы равенства
15.21.1. Операторы числового равенства == и ! =
15.21.2. Операторы логического равенства == и ! =
15.21.3. Ссылочные операторы равенства == и ! =
15,22. и |
15. и |
15.23. Оператор условного И &&
15,24. Оператор условного ИЛИ ||
15,25. Условный оператор ? :
15.25.1. Логические условные выражения
15.25.2. Числовые условные выражения
15.25.3. Ссылочные условные выражения
15.26. Операторы присвоения
15.26.1. Оператор простого присваивания =
15.26.2. Операторы составного присваивания
15.27. Лямбда-выражения
15.27.1. Лямбда-параметры
15.27.2. Лямбда-тело
15.27.3. Тип лямбда-выражения
15.27.4. Оценка во время выполнения лямбда-выражений
15.28. переключатель Выражения
15.28.1. Блок переключателя переключателя Expression
15.28.2. Оценка времени выполнения коммутатора Выражения
15.29. Постоянные выражения
16. Определенное назначение
16,1. Определенное присвоение и выражения
16.1.1. Логические постоянные выражения
16.1.2. Оператор условного И &&
16.1.3. Оператор условного ИЛИ ||
16.1.4. Оператор логического дополнения !
16.1.5. Условный оператор ? :
16.1.6. переключатель Выражения
16.1.7. Другие выражения типа boolean
16.1.8. Выражения присваивания
16.1.9. Операторы ++ и -
16.1.10. Другие выражения
16.2. Определенное присвоение и утверждения
16.2.1. Пустые отчеты
16.2.2. Блоки
16.2.3. Заявления местного класса
16.2.4. Заявления декларации локальных переменных
16.2.5. Помеченные заявления
16.2.6. Выражения
16.2.7. если Заявления
16.2.8. assert Утверждения
16.2.9. переключатель Заявления
16.2.10. , а Заявления
16.2.11. до Заявления
16.2.12. для отчетов
16.2.12.1. Часть инициализации для заявления
16.2.12.2. Часть приращения для заявления
16.2.13. break , yield , continue , return , and throw Statement
16.2.14. синхронизировано Выписки
16.2.15. попробуйте Заявления
16,3. Определенное назначение и параметры
16,4. Определенное присвоение и инициализаторы массива
16.5. Константы с определенным присваиванием и перечислением
16.6. Определенное присвоение и анонимные классы
16,7. Определенное присвоение и типы элементов
16.8. Определенное присвоение и статические инициализаторы
16,9. Определенное присвоение, конструкторы и инициализаторы экземпляра
17. Резьба и замки
17.1. Синхронизация
17,2. Наборы ожидания и уведомление
17.2.1. Подождите
17.2.2. Уведомление
17.2.3. Прерывания
17.2.4. Взаимодействие ожидания, уведомления и прерывания
17,3. Сон и урожай
17.4. Модель памяти
17.4.1. Общие переменные
17.4.2. Действия
17.4.3. Программы и заказ программы
17.4.4. Порядок синхронизации
17.4.5. Произойдет до заказа
17.4.6. Казни
17.4.7. Грамотные казни
17.4.8. Требования к казням и причинно-следственной связи
17.4.9. Наблюдаемое поведение и нескончаемые исполнения
17,5. финал Полевая семантика
17.5.1. Семантика финал Поля
17.5.2. Чтение final Поля во время строительства
17.5.3. Последующая модификация окончательная поля
17.5.4. Поля, защищенные от записи
17,6. Слово разрыв
17,7. Безатомная обработка двойной и длинной
18. Определение типа
18,1. Понятия и обозначения
18.1.1. Переменные вывода
18.1.2. Ограничение для

Введение в язык программирования Java

Введение в язык программирования Java

Java — это объектно-ориентированный язык программирования общего назначения, предназначенный для разработки программного обеспечения для бытовых электронных устройств, таких как телевизоры, видеомагнитофоны, тостеры и т. Д.

Java — это платформенно-нейтральный язык, что означает, что он не привязан к какому-либо конкретному оборудованию или операционной системе.Это гарантирует, что пользователи «напишут один раз, запустят где угодно». Язык Java поддерживается практически всеми операционными системами, такими как Sun Solaris, RedHat, Windows и т. Д.

Язык программирования Java был разработан Sun Microsystems в США в 1991 году. Первоначально он назывался Oak Джеймсом Гослингом, который был одним из изобретателей языка. Основная цель разработчиков заключалась в том, чтобы сделать язык надежным, портативным и простым.

В команду разработчиков языка Java входил Патрик Нотон, который обнаружил, что существующие языки, такие как C и C ++, имеют некоторые серьезные недостатки с точки зрения надежности и переносимости.Они смоделировали новый язык Java на C и C ++, удалив при этом некоторые функции, которые считали ограничениями. Это сделало Java действительно простым, портативным и мощным языком. Чтобы изучить основы Java, давайте пересмотрим синтаксис Java.

История Явы

Есть хроника событий, произошедших в процессе развития языка Java.

  • 1990: Группа программистов Sun Microsystems решила разработать специальное программное обеспечение для управления бытовыми электронными устройствами.Команду возглавил Джеймс Гослинг.
  • 1991: Команда изучила различные языки, существовавшие в то время, а именно C и C ++, и объявила новым языком «Oak».
  • 1992: Команда Sun, известная как Green Project, продемонстрировала применение своего нового языка, например, для управления списком бытовой техники с помощью ручного устройства с крошечным сенсорным экраном.
  • 1993: Всемирная паутина пришла в Интернет и превратила текстовый Интернет в графическую, богатую среду.Команда Green Project пришла к идее разработки веб-апплетов (крошечных программ), которые могли бы работать на всех типах компьютеров, подключенных к Интернету.
  • 1994: Команда разработала веб-браузер под названием «HotJava» для поиска и запуска программ-апплетов в Интернете. Это сделало его чрезвычайно популярным среди пользователей Интернета.
  • 1995: Дуб был переименован в «Ява» из-за некоторых юридических затруднений. Java — это имя, а не акроним.
  • 1996: Java-программирование было признано лидером в области программирования в Интернете, а также как объектно-ориентированный язык программирования общего назначения.Sun выпустила Java Development Kit 1.0.
  • 1997: Sun выпускает Java Development Kit 1.1 (JDK 1.1)
  • 1998: Sun выпускает Java 2 с версией 1.2 пакета разработки программного обеспечения (SD K 1.2)
  • 1999: Sun выпускает платформу Java 2, Standard Edition (J2SE) и Enterprise Edition (J2EE)
  • 2000: Sun выпускает J2SE с SDK 1.3.
  • 2002: Sun выпускает J2SE с SDK 1.4.
  • 2004: Это ознаменовало выпуск J2SE с JDK 5.0 (вместо JDK 1.5), известный как J2SE 5.0.
  • 2006 — Sun выпускает Java SE 6.
  • 2011: Sun выпускает Java SE 7.
  • 2014: Sun выпускает Java SE 8.
  • 2017: Sun выпускает Java SE 9.

Особенности программирования на Java

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

Составлено и интерпретировано

Язык

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

Во-первых, компилятор Java переводит исходный код в инструкции байт-кода; байт-коды не являются машинными командами.

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

Независимый и переносной

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

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

Объектно-ориентированный

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

Надежный и безопасный

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

Системы

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

Распределенный

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

Простой, маленький и знакомый

Java — это упрощенная версия C ++, поэтому она знакома и в то же время отличается, поскольку устраняет весь избыточный и ненадежный код.Например, Java не использует указатели, файлы заголовков препроцессора и многие другие. Это также исключает перегрузку операторов и множественное наследование в Java.

Многопоточный и интерактивный

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

Высокая производительность

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

Динамический и расширяемый

Java — динамический язык; он может динамически связываться с новыми библиотеками классов, методами и объектами. Он также может определить тип класса с помощью запроса.

Простота разработки

Стандартная версия Java 2 (J2SE) 5.0 поддерживает такие функции, как Generics, Enhanced для цикла , Autoboxing или unboxing, Typesafe enums, varargs, Static import и Annotation. Эти функции Java упрощают работу программистов на Java, перекладывая ответственность за создание повторно используемого кода на компилятор, а также в конечном коде отсутствуют ошибки.

Масштабируемость и производительность

J2SE 5.0 сокращает время запуска и уменьшает объем памяти, используемой в среде выполнения Java 2.Узнайте больше о возможностях Java здесь.

Сравнение: C Vs. Java против. C ++

C Vs. Java

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

  • Нет уникальных ключевых слов операторов размера C и typedef
  • Нет типов данных, таких как struct и union .
  • Java не определяет ключевые слова модификатора типа, такие как auto , extern , register , signed и unsigned .
  • Нет поддержки указателя Тип
  • Отсутствие препроцессора
  • Java требует, чтобы функция без аргументов объявлялась с пустыми скобками и ключевым словом void.
  • Новые операторы Java , , такие как instanceof и >>> .
  • Программирование на Java помечено операторами break и continue.

Java Vs. C ++

Основное различие между C ++ и Java заключается в том, что Java является истинно объектно-ориентированным языком, а C ++ просто добавляет объектно-ориентированное расширение к C.Оператор инкремента в C ++ указывает на то же самое.

Перечисленные ниже функции намеренно исключены из Java для улучшения.

  • Нет поддержки перегрузки оператора.
  • Нет шаблонных классов, как в C ++.
  • Новая функция, называемая «интерфейсом» в программировании на Java, которая не поддерживает множественное наследование.
  • Язык Java не поддерживает глобальные переменные.
  • Java использует функцию finalize () вместо функции деструктора .
  • В программировании на Java нет файлов заголовков.

Давайте обсудим Java Regular Expression и Java Array здесь.

Язык Java и Интернет

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

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

Программирование на Java и World Wide Web

World Wide Web (www) — это информационно-поисковая система, в которой любая информация или файл идентифицируются как унифицированные указатели источника (URL-адреса) и связаны между собой посредством гипертекстовых ссылок. Доступ к WWW можно получить через Интернет.

У программирования

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

Для связи с любой веб-страницей Java использует APPLET. Необходимые шаги:

  1. Пользователь запрашивает документ с гиперссылкой на веб-сервер удаленного компьютера. (веб-сервер получает, обрабатывает и отправляет запрошенный документ)
  2. Документ содержит тег APPLET, который идентифицирует апплет.
  3. Файл исходного кода Java компилирует байт-код для этого апплета, который затем передается на компьютер пользователя.
  4. Браузер включен Java, а затем интерпретирует байт-код и предоставляет выходные данные.

Системы поддержки Java

Для работы браузеров с поддержкой Java и Java в Интернете требуются различные системы поддержки, а именно:

  • Подключение к Интернету
  • Веб-сервер
  • Веб-браузер
  • HTML — язык для создания гипертекста для Интернета
  • APPLET tag
  • Код Java
  • Байт-код
  • Прокси-сервер — промежуточный сервер между запрашивающей клиентской рабочей станцией и исходным сервером
  • Почтовый сервер

Среда Java

Среда Java включает в себя большое количество инструментов разработки Java, а также классов и методов Java.

Инструменты разработки Java являются частью системы, известной как Java Development Kit (JDK), а классы и методы в Java являются частью стандартной библиотеки Java (JSL), также известной как интерфейс прикладного программирования ( API).

Комплект для разработки Java (JDK)

Набор для разработки Java включает:

  • appletviewer (для просмотра Java-апплетов)
  • javac (компилятор Java)
  • java (интерпретатор Java)
  • javap (дизассемблер Java)
  • javah (для файлов заголовков C)
  • javadoc (для создания файлов HTML)
  • jdb (отладчик Java)

Интерфейс прикладного программирования

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

  • Пакет служебных программ — для предоставления служебных функций Java
  • Пакет ввода / вывода — для управления вводом / выводом Java
  • Сетевой пакет — для связи через Интернет
  • AWT Package — пакет инструментов абстрактного окна содержит классы, реализующие платформенно-независимый графический пользовательский интерфейс.
  • Пакет апплета — это позволяет нам создавать апплеты Java.

Среда выполнения Java

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

  • Библиотеки классов среды выполнения — это набор базовых библиотек классов Java для выполнения программы Java.
  • Наборы инструментов пользовательского интерфейса — используются для взаимодействия с прикладной программой Java.
  • Технологии развертывания

1) Плагин Java — позволяет запускать Java-апплет.

2) Запуск Java Web — это позволяет приложению запускаться напрямую из веб-браузера без установки. Узнайте больше о типах данных Java и модификаторах Java здесь.

Конструкции Java

Конструкции — это в основном зарезервированные ключевые слова на любом языке, которые не могут использоваться в остальных программах, то есть имя переменных в Java, классе или методе. Таких слов в Java около 50, среди них:

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

Заключение

Наконец, в этом руководстве по Java мы узнали об истории языка программирования Java, важных функциях Java, о том, чем Java отличается от C и C ++, о том, как она встроена во всемирную паутину с помощью веб-браузеров, а также о среде, необходимой для запуск приложений Java.Надеюсь это поможет. Дайте нам знать, что вы думаете, в комментариях ниже!

Учебное пособие по Java — изучение языка программирования Java с примерами

Добро пожаловать в учебное пособие по Java от TutorialKart!

Java — широко используемый язык программирования при разработке программного обеспечения. Это руководство по Java призвано помочь новичкам начать работу с языком программирования Java.

Java Tutorial

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

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

Учебные пособия по Java

Следующие ниже учебные пособия помогут вам освоить основы Java и объектно-ориентированные концепции в Java.

Начало работы с Java на вашем ПК

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

Основы Java

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

String

Строки и различные операции со строками обычно чаще всего используются Java-программистами при разработке программного обеспечения.

Java Array

Array — это набор элементов.

Элементы в массиве упорядочены. Итак, вы можете получить доступ к элементам массива с помощью index.

Массив имеет фиксированную длину. После инициализации массива с определенным размером вы не можете изменить его размер.

Следующие руководства по Java помогут вам понять, что такое массив и как его использовать в программах.

Операции с файлами

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

Java ArrayList Operations

ArrayList — это класс в Java, который используется как коллекция. Следующие руководства помогут вам разобраться с некоторыми операциями, которые можно выполнять с ArrayLists.

Java Date Operations

Шаблоны проектирования в Java

Обработка исключений в Java

Исключения Java

Java StringBuilder

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

Полезные ресурсы

Заключение После

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

Что такое Ява? | Открытый источник.com

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

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

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

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

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

Для чего используется Java?

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

Вы также можете использовать Java на своем рабочем столе, даже не подозревая об этом.На Java работают всевозможные приложения, от бешено популярных игр, таких как Minecraft, до интегрированной среды разработки Eclipse, используемой разработчиками для многих различных языков и платформ. Java также поддерживает ряд приложений, созданных специально для Интернета. Хотя с улучшениями в JavaScript и HTML, Java-апплеты больше не являются стандартом де-факто для интерактивных веб-приложений, многие по-прежнему полагаются на Java для обеспечения интерактивного взаимодействия в браузере.

Но даже несмотря на то, что в наши дни Java не так часто встречается, как интерфейсная часть для веб-приложений, он по-прежнему остается очень популярным языком на многих веб-сайтах и ​​веб-приложениях.Благодаря возможностям Java Enterprise Edition и серверов приложений Java с открытым исходным кодом, таких как WildFly и Apache Tomcat, Java имеет богатую экосистему инструментов для включения и подключения крупномасштабируемых приложений, которые поддерживают работу некоторых крупнейших веб-сайтов и бизнес-операций.

Является ли Java открытым исходным кодом?

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

Sun, первые разработчики Java, поместили большую часть Java под Стандартную общественную лицензию GNU в 2006 году. Такие проекты, как IcedTea, заполнили пробелы в части Java Development Kit, недоступной по открытой лицензии, что означает, что сегодня это возможно для запуска приложений Java без использования какого-либо проприетарного кода.

Как запустить приложение Java

Начиная с Java 9, язык движется в сторону модульной конструкции. Многие современные Java-приложения включают в себя небольшой Java-модуль как часть самого программного обеспечения.Это означает, что есть некоторые приложения, которые можно запускать, даже не загружая Java.

Однако это отнюдь не универсально. Для запуска многих приложений Java у вас должна быть установлена ​​среда выполнения Java (JRE). Поскольку Java является открытым исходным кодом, существует не одна JRE, поэтому вы можете выбрать JRE, которая лучше всего соответствует вашим потребностям. Дистрибутивы Linux обычно предоставляют OpenJDK или IcedTea JRE. Пользователи Windows могут загрузить установщик JRE с портала разработчиков Red Hat. Пользователи MacOS (а также Windows и Linux) также могут загрузить установщики JRE из OpenJDK.java.net или зулусское сообщество на Azul.

Поскольку устанавливаемая вами JRE была создана специально для вашей ОС, любое приложение Java может работать на вашем компьютере. Устанавливая Java, вы предоставляете своей системе слой (технически виртуальную машину Java или JVM), на котором может работать любое приложение Java.

Как программировать на Java

Java — это объектно-ориентированный язык со строгой типизацией, популярный почти во всех отраслях — от финансовой до издательской и ИТ. Поскольку он изначально кроссплатформенный, его аудитория огромна.Базовые курсы программирования во многих университетах начинаются с Java, потому что в нем используются лучшие практики (такие как определение объема и типизация переменных), которые другие языки, такие как Python или Go, позволяют программисту в основном игнорировать. Java достаточно популярна и устарела, поэтому в ней есть библиотеки практически для любых задач, поэтому даже начинающий программист имеет доступ к богатому набору готовых к использованию методов.

Если вы разрабатываете на Java, вы должны установить комплект разработчика Java (JDK). Есть несколько вариантов на выбор, включая OpenJDK и Zulu (JDK включает в себя JRE, поэтому вы можете запускать разрабатываемые вами приложения).

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

Шагом вперед от Greenfoot является BlueJ, Java IDE, разработанная Королевским колледжем в Лондоне как многословная и полезная среда IDE, которая выделяет важные элементы кода в качестве пользовательских программ.

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

Будущее Java

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

Где я могу узнать больше?

В дополнение к тегу Java здесь, на Opensource.com, вот некоторые ресурсы, которые вы, возможно, захотите проверить.

Что такое Java?

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

Характеристики
языка Java
.

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

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

Ява
является многопоточным. Программа Java может иметь несколько потоков
(части), т.е. многие разные вещи обрабатываются независимо и
непрерывно.

Почему
Ява крутая?

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

Альтернативы
на Java.

Один
альтернативной технологией является ActiveX, продукт Microsoft для
включая мультимедийные эффекты на веб-страницах. Другой конкурент
Macromedia’s Shockwave, плагин, который позволяет анимировать изображения,
добавлять звук и даже делать интерактивные страницы, чтобы люди могли играть
игры на сайтах.

Пр.
1. Все эти утверждения о Java ложны. Поправьте их.

    1. Ява
      был изобретен Microsoft.

    2. Маленький
      приложения, написанные на Java, называются «анимациями».

    3. С участием
      В интерпретаторе программа сначала преобразуется в байт-коды Java.

    4. Ява
      не совместим с большинством вычислительных платформ.

    5. В
      Язык Java является однопоточным, при этом выполняется одна часть за раз.

    6. Ява
      не позволяет смотреть анимированных персонажей на своих веб-страницах.

    7. ActiveX
      и Shockwave не являются реальными конкурентами Java.

Пр.
2. Решите анаграммы в правом столбце и сравните их с
слова в левом столбце, чтобы завершить фразы. Первое
один был сделан для вас.

  1. высокого уровня а.
    mestnttae

  2. машина b.тирмацит

  3. системы c.
    торф

  4. объект d.
    тапореор

  5. связь e.
    омелуд

  6. магнитный f.
    эгюанал язык

  7. двоичный g.
    тродит

  8. декларация h.
    деко

  9. комментарий i.енил

  10. реляционный j.
    нитурое

Пр.
3. а) Сопоставьте каждое слово слева с его партнером, чтобы получилось общее
технический термин.

  1. программирование a.
    браузер

  2. паутина b.
    ошибка

  3. Java c.
    код

  4. мультимедиа d.
    защита

  5. источник e.формат

  6. вирус f.
    эффекты

  7. сжатие g.
    апплет

б)
Какие глаголы слева часто встречаются с существительными справа?

1.
чтобы скачать. Интернет

2.
играть б. исходная программа

3.
запустить c. файлы

4.
просматривать d. приложение

5.
для компиляции e. данные

6.
для обработки f. музыка

.

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

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