Быстрый старт в Java: от установки необходимого софта до первой программы. Как пользоваться программой Java


Обучение профессии "Веб-разработчик"
Учеба на "Разработчика игр" + трудоустройство

Как использовать JDK и как с ним работать?

Несмотря на то, что набор JDK предназначен для создания программ, работающих в графических средах, таких как MS Windows или X Window System, он ориентирован на выполнение из командной строки окна Command Prompt в MS Windows. В системах UNIX, Linux, BSD можно работать и в текстовом режиме, и в окнеXterm.

Написать программу на Java можно в любом текстовом редакторе, например Notepad, WordPad в MS Windows, редакторах vi, emacs в UNIX. Надо только сохранить файл в текстовом, а не графическом формате и дать ему расширение java. Пусть, для примера, именем файла будет MyProgram.java, а сам файл сохранен в текущем каталоге.

После создания этого файла из командной строки вызывается компилятор javac и ему передается исходный файл как параметр:

javac MyProgram.java

Компилятор создает в том же каталоге по одному файлу на каждый класс, описанный в программе, называя каждый файл именем класса с расширением class. Допустим, в нашем примере имеется только один класс, названный MyProgram, тогда получаем файл с именем MyProgram.class, содержащийбайт-коды.

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

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

Работая в графических оболочках операционных систем, мы привыкли вызывать программу на исполнение двойным щелчком мыши по имени исполнимого файла (в MS Windows у имени исполнимого файла стандартное расширение exe) или щелчком по его ярлыку. В технологии Java тоже есть такая возможность. Надо только упаковать class-файлысбайт-кодамив архив специального вида JAR. Как это сделать, рассказано вглаве 25. При установке JDK на MS Windows для файлов с расширением jar автоматически создается ассоциация с интерпретатором java, который будет вызван при двойном щелчке мыши наjar-архиве.

Кроме того, можно написать командный файл (файл с расширением bat в MS Windows или Shell-файлкомандной оболочки в UNIX), записав в нем строку вызова интерпретатора java со всеми нужными параметрами.

Еще один способ запустить Java-программу средствами операционной системы - написать загрузчик (launcher) виртуальной машины Java. Так и сделано в стандартной поставке JDK: исполнимый файл java.exe содержит программу, написанную на языке С, которая запускает виртуальную машину Java и передает ей на исполнение класс Java с методомmain(). Исходный текст этой программы есть среди исходных текстов Java в каталоге src/launcher. Им можно воспользоваться для написания своего загрузчика. Есть много программ, облегчающих написание загрузчика, например программа Java Launcher фирмы SyncEdit, http://www.syncedit.com/software/javalauncher/ , или Advanced Installer for Java фирмы Caphyon, http://www.advancedinstaller.com/ .

Наконец, существуют компиляторы исходного текста, написанного на языке Java, непосредственно в исполнимый файл операционной системы, с которой вы работаете. Их общее название AOT (Ahead-Of-Time)compiler. Например, у знаменитого компилятора GCC (GNU Compiler Collection) есть вход с именем GCJ, с помощью которого можно сделать компиляцию как вбайт-коды,так и в исполнимый файл, а также перекомпиляциюбайт-кодовв исполнимый файл.

Если работа из командной строки, столь милая сердцу "юниксоидов", кажется вам несколько устаревшей, используйте для разработки интегрированную среду.

Если вы новичок и только начинаете учить Java, вы наверняка задумывались, где именно используют Java? Вы не наблюдаете множество игр, написанных на Java, за исключением Minecraft, такие настольные утилиты, как Adobe Acrobat, Microsoft Office не написаны на Java, так же, как и ваша операционная система, будь то Linux или Windows, так где же всё-таки применяют Java? Имеет ли она какое-либо реальное применение вообще? Что ж, вы не одиноки, многие программисты, только вступившие на IT путь или уже уверенные специалисты, задаются этим вопросом. Между тем, вы можете узнать, где используется Java, просто установив Java на ваш компьютер, Oracle утверждает, что более 3 миллиардов устройств работают на Java, довольно большое число, не так ли? Большинство крупных компаний так или иначе используют Java. Многие серверные приложения, обрабатывающие десятки миллионов запросов в день, написаны на Java, высокочастотные трейдинговые приложения также написаны на Java, например трейдинговые приложения LMAX, использующие их новаторский многопоточный параллельный фреймворк Disruptor . В этой статье мы более подробно рассмотрим, в каких проектах используется Java, в каких областях она доминирует и где вообще применима в реальном мире?

Этот универсальный язык программирования используют компании разного масштаба в своем корпоративном серверном ПО. Написанные на Java приложения можно найти везде: в «умном» чайнике, твоем Android-смартфоне, компьютере или автомобиле Tesla. И поскольку Java есть везде, найти работу, зная этот язык, довольно просто.
Зачем нужно учить Java?
Всё просто: Java - универсальный язык, который используют сотни тысяч компаний. Так что если вы знаете Java, довольно легко найти интересную работу. Java достаточно несложен в освоении, поэтому он подходит тем, кто впервые подошёл к изучению программирования. Этот язык работает на всех платформах, и хотя он постоянно обновляется и модернизируется, старый Java-код совместим с новым.

Реальные Java приложения

Существует множество областей применения Java, от сайтов электронной коммерции до Android приложений, от научных до финансовых приложений, таких как трейдинговые системы, от игр, типа Minecraft, до настольных программных средств, таких как Eclipse, Netbeans и IntelliJ, от open source фреймворков до J2ME приложений и т.д. Давайте детальнее рассмотрим каждое из них.

Android приложения

Если хотите увидеть, где используется Java, не нужно далеко идти. Просто возьмите свой телефон на Android, абсолютно все приложения написаны на Java, с использованием Google и Android API, которые схожи с JDK. Пару лет назад Android предоставил необходимые возможности, благодаря чему сегодня многие Java программисты – Android разработчики. Кстати, Android использует другую JVM и другой и другой способ компановки, но код всё ещё написан на Java.

Серверные приложения в сфере финансовых услуг

Java очень обширно применяется в финансовой сфере. Многие мировые инвестиционные банки, типа Goldman Sachs, Citigroup, Barclays, Standard Charted и другие используют Java для написания фронт-энд и бэк-энд офисных электронных систем, систем регулирования и конфирмации, проектов обработки данных и некоторых других. Преимущественно Java используется при написании серверных приложений, в большинстве своём без какого-либо пользовательского интерфейса, которые получают данные с одного сервера, обрабатывают их и отправляют дальше. Java Swing был также популярен для создания «толстоклиентных» интерфейсоф, но сейчас C# быстро захватывает рынок в этой области, а Swing уже выдыхается.

Вэб-приложения

Также Java широко используется в электронной коммерции и в области вэб-приложений. Огромное количество RESTful сервисов было создано с использованием Spring MVC, Struts 2.0 и похожих фреймворков. Даже простейшие приложения, основанные на Servlet, JSP и Struts, достаточно популярны в различных государственных проектах. Многие вэб-приложения государственных, оздоровительных, страховых, образовательных, оборонительных и некоторых других отделений написаны на Java.

Программные средства

Многие полезные програмные средства и средства разработки написаны и разработаны на Java, например Eclipse, IntelliJ Idea и Netbeans IDE. Мне кажется это, к тому же, наиболее используемые приложения, написанные на Java. Было время, когда Swing был очень популярен при создании «толстых клиентов», преимущественно в финансовой сфере. Сегодня Java FX набирает всё большую популярность, но это всё ещё не замена Swing, к тому же C# практически полностью вытеснил Swing из финансовой области.

Трейдинговые приложения

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

J2ME приложения

Несмотря на то, что появление iOS и Android практически уничтожило J2ME рынок, в мире ещё огромное количество дешёвых телефонов от Nokia и Samsung, использующих J2ME. Было время, когда практически все игры и приложения, доступные на Android, были написаны с использованием MIDP и CLDC, которые являются частью платформы J2ME. J2ME всё ещё популярен в таких средствах, как Blu-ray, карточки и телевизионные приставки. Одна из причин такой популярности WhatsApp – он также доступен на J2ME.

Встраиваемые системы

Обширна Java и в области встраиваемых систем. Можно увидеть на что способна платформа, вам нужно всего 130 KB для использования Java (на смарт-картах и сенсорах). Изначально Java разрабатывалась для встраиваемых систем. В действительности эта область была частью начальной кампании Java «пиши один раз, запускай где-угодно» и похоже, что она приносит свои плоды.

Большие данные

Hadoop и другие технологии обработки больших данных так или иначе используют Java, например Hbase и Accumulo от Apache, или ElasticSearch. Хоть Java и не доминирует в этой области, поскольку существуют такие технологии, как MongoDB, которые написаны на С++. У Java есть потенциал получить большую долю этой растущей области, если Hadoop или ElasticSearch расширятся.

Высокочастотные трейдинговые пространства

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

Научные приложения

В наши дни часто Java – выбор по-умолчанию для научных приложений, включая обработку естественного языка. Основная причина в том, что Java более безопасна, мобильна и надёжна и имеет лучшие инструменты параллелизации, чем С++ и другие языки. В девяностые Java была достаточно популярна в интернете, благодаря апплетам, но спустя годы, апплеты утратили свою популярность, преимущественно из-за различных проблем безопасности. В наши дни настольная Java и апплеты практически мертвы. Java по-умолчанию любимец в индустрии программного обеспечения, и широко используется в финансовой сфере, инвестиционных банках и в области электронной коммерции. Каждый, изучающий Java, имеет яркое будущее. Java 8 только укрепила веру в то, что Java продолжит доминировать в области разработки ещё долгие годы. В комментариях к статье поставили под вопрос реальное применение Java, из-за обилия финансовых примеров в самой статье и задались вопросом, есть ли у Java будущее в настольной разработке, и не лучше ли учить C#? Вот некоторые контраргументы: There is no point for a Java developer to learn C# as they are similar language but just for different technical stack, instead you should learn Python, Ruby or Perl. Scripting language are very good for small tasks. Нет никакого смысла для Java разработчика учить C#, поскольку это похожие языки, но для разных областей. Вместо этого лучше учить Python, Ruby или Perl. Скриптовые языки хороши для небольших заданий. Java is actually used EVERYWHERE, it"s in your phone, it"s in your cable"s settop box, it"s in your credit card, it"s on the server which you are currently connected to, it"s on the browser you are currently using it. Java is the most ubiquitous language ever created. Java фактически используется повсюду, она в вашем телефоне, в вашей телеприставке, в вашей кредитке, на сервере, к которому вы сейчас подключены, в браузере, который вы сейчас используете. Java - наиболее вездесущий язык, который когда-либо создавали. Также в коментариях даются ссылки на пару статей, а именно: Второе пришествие Java и Работодатели хотят знаний Java как ничто другое . Если изъявят желания, то можно перевести и их. P.S.: прошу оценить перевод, сделать замечания, указать на ошибки, потому что появилось желание переводить и хочется, чтобы всё было на подобающем уровне. Перевод и доработка статьи

По прошествию многих лет я подумал, а как бы я разрабатывал свою первую программу на Java, если бы я начал сегодня?

Знакомство с Java было в университете и при воспоминаниях об этом бросает в холодный пот. Кроме нового незнакомого языка, приходилось устанавливать какой-то JDK, потом IDE, потом создавать первый проект и вручную добавлять в него библиотеки. Делать по аналогии с готовыми программами и ловить неизведанные java.lang.ClassNotFoundException и java.lang.NoSuchMethodException и тому подобный ужас. Когда знал как работать только в операционной системе Windows и доступ в интернет был по модему через телефонную линию.

Надеюсь интересно будет как тем, кто делает первые шаги в java и тем, кто помнит jdk 1.4. Попробуем online IDE Eclipse Che.

Оговорюсь про главное условие - сейчас у вас должен быть стабильный доступ в интернет . И конечно же после прочтении статьи вы не получите работу Java архитектором в Нью-Йорке за 180 000 $ в год и даже не выучите Java за 21 день. Просто разработаем в современном окружении свой Hello world в несколько строчек кода, но с веб сервером .

Облачная IDE и разработка в Docker контейнере

Открытое программное обеспечение Eclipse Che - IDE нового поколения для коллективной разработки ПО. Не столь привычно нам «старичкам», но позволяет разрабатывать имея локально лишь современный браузер и стабильный доступ к сети. Сервер Che может быть запущен в локальной сети. Для быстрого старта нам даже не нужно ничего устанавливать!!!

Перейдите по ссылке Eclipse Che . Там возможно создать бесплатный аккаунт на codenvy.com. Можно зарегистрировать его на свою почту, либо воспользоваться OAuth провайдерами: Github, Google или Microsoft online.

На стороне сервера автоматически создается Docker контейнер с уже настроенным окружением для разработки. С помощью агента в контейнере к нему подключается IDE на javascript из вашего браузера.

При создании из шаблона «Java» в контейнере обычная сборка Ubuntu, а это значит что можно устанавливать необходимые вам для работы пакеты. Шаблон «Eclipse Che» основан на Alipine - минималистичной сборке linux под Docker и там такой свободы у вас нет.

Итак о чем я это. Если вы не знаете что это такое, пока можете даже не беспокоиться об этом. Все работает и так «из коробки», пусть на первом шаге это будет казаться магией! Со временем при желании разобраться во всем этом довольно просто.

Создадим новый «Workspace» из шаблона «Java». Прийдется посмотреть мультфильм со строительным краном, пока создается ваше пространство для разработки.

В вашем окружении разработки будут доступны Oracle JDK 8u45 и Maven 3.3.9. Точно также легко можно начать разработку на основе проекта с Github.

Готовим окружение для проекта...


Система управления зависимостями и сборки

Стандартом де-факто в мире Java является Maven и, наверное, самая лучшая поддержка в разных IDE. Gradle более молодой проект и он заслуживает право стать вашим выбором №1. Но при выходе на работу Java разработчиком вероятность встретить Maven гораздо выше, особенно на унаследованных проектах. К тому же он тоже пытается молодиться и уйти от XML формата за счет проекта Polyglot . Atom, Groovy, Clojure, Ruby, Scala, YAML - как основа для написания файла сборки. Тут история как и с языком программирования в JVM. Несмотря на существование Groovy, Scala, JRuby, Jython, Clojure всю их мощь и лаконичность, язык Java живее всех живых. И даже не сравнивайте Java с вождем - язык программирования живой и хоть медленно, но развивается.

Проект по-умолчанию console-java-simple предложит нам любимый Hello World.

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

Магия «верблюда»

Eclipse Che создал для нас нас шаблон проекта, который мы сейчас отредактируем и создадим наше веб приложение.

Apache Camel - это open source интеграционный фреймворк и нам он нужен лишь для простого Hello World. Добавим его библиотеки в pom.xml зависимость на ядро «верблюда» и компонент jetty веб сервера.

org.apache.camel camel-core 2.18.0 org.apache.camel camel-jetty 2.18.0

Для того, чтобы компилировались лямбды добавим в этот же файл:
1.8 1.8

После этого отредактируем файл /console-java-simple/src/main/java/org/eclipse/che/examples/HelloWorld.java заодно прочувствуем как работает эта online IDE.

Package org.eclipse.che.examples; import org.apache.camel.builder.RouteBuilder; import org.apache.camel.main.Main; public class HelloWorld { public static void main(String argvs) throws Exception { Main main = new Main(); main.addRouteBuilder(new RouteBuilder() { @Override public void configure() throws Exception { from("jetty:http://0.0.0.0:8080") .process(exchange -> {exchange.getIn().setBody("Hello World");}); } }); main.run(argvs); } }

Для того чтобы можно было запустить пример командой mvn clean install exec:java нужно добавить в pom.xml exec-maven-plugin

org.codehaus.mojo exec-maven-plugin 1.5.0 java org.eclipse.che.examples.HelloWorld


Запустим проект командой из терминала

Mvn clean install exec:java
Или отредактируем конфигурацию запуска «по щелчку» в IDE.

Подключиться к нашему веб приложению из внешнего мира можно по адресу из столбца «Server Address» для строки «tomcat8». Как это сделать можете посмотреть в видео дальше:

Результат работы нашей программы:

В этом примере создается Apache Camel и его маршрут обработки данных. Маршрут начинается с веб сервера jetty, который слушает http запросы на порту 8080. При получении запроса мы создаем ответ с помощью строчки process(exchange -> {exchange.getIn().setBody(«Hello World»);}) .

Скринкаст процесса написания java кода (без звука и мата) в Che и запуска программы Hello World.

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

Java медленно работает

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

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

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

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

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

На Java сложно программировать

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

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

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

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

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

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

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

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

Java работает везде одинаково

“Создаешь один раз - используешь где угодно” (“Write once - run anywhere”). Вторая часть этого лозунга создателей Java содержит утверждение, что Java-программа работает везде одинаково. К сожалению, в действительности все не так просто. Java-машины различных компаний на различных платформах НЕ стопроцентно совместимы друг с другом.

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

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

В MS JVM вы не увидите поддержки технологий RMI или CORBA, зато здесь можно использовать объекты ActiveX - технологию, специфичную только для платформы Windows и более нигде не существующую. Microsoft расширила стандартную Java-библиотеку классов типами, которые отражают некоторые особенности работы платформы Windows.

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

Java - это язык программирования

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

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

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

Java - младшая сестра Си++

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

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

Некоторые новации были взяты из неизвестных широкой публике языков и систем.

К примеру, принцип интерфейса классов перенесен из языка Objective C, разработанного компанией NeXT. Механизм обработки исключительных ситуаций почти полностью позаимствован из Модулы-3. Принципы внутренней реализации такой важной составляющей языка Java, как “сборка мусора”, почерпнуты прежде всего из Лиспа. Часть “нормальных” языков, таких, как Эйфель, Модула-3, Оберон, также изначально располагала этим механизмом.

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

Язык Java годен только для аплетов и Интернета

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

Идея встраиваемых приложений в гипертекстовые документы (HTML) не так уж и нова. Многие фирмы пытались продвинуть свои технологии на этот сектор рынка, но в настоящее время конкурентов у Java здесь немного. На сегодня это, пожалуй, JavaScript, ActiveX и технология Flash. Две последние, правда, работают только под управлением Windows.

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

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

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

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

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

Java - идеал, она не нуждается в улучшениях

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

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

Существует более мощная технология, чем asset. Это Design By Contract, “программирование по контракту”, позволяющее упростить создание больших приложений, которые используют ранее созданный код. Java же не поддерживает и “программирование по контракту”.

Шаблоны классов в Си++ - это возможность генерации кода “под” указанный пользователем класс (на самом деле разработчики Java вполне осознанно отказались от шаблонов, полагая, что от них больше проблем, чем пользы. - Прим. ред.). Коллекция объектов, реализованная с помощью шаблона, будет компилироваться каждый раз для каждого типа объектов, хранимого в этой коллекции. Типичная коллекция объектов в Java хранит экземпляры класса Object, предка всех Java-классов.

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

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

Java стоит кучу денег

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

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

Среди программистов на Java то и дело слышны разговоры о разработке под Android. Именно Android держит Java на первом плане в последние несколько лет. Насколько же важно понимать или знать Android для разработчиков на Java? Ну, зависит от того, нравится ли вам разработка приложений и хотите ли вы, чтобы вашими приложениями пользовалось множество людей. Если да, то Android даст вам эту возможность. Количество телефонов под управлением операционной системы Android исчисляется миллионами и продолжает расти быстрее, чем число iPhone с iOS. Это значит, что для Java-разработчика очень даже имеет смысл научиться программировать под Android, чему эта статья как раз и посвящена. Кроме того, это одна из хороших причин вообще научиться программировать на Java. Из этого обзора вы узнаете основы работы Android, без лишних подробностей, но в достаточном объеме. Одно очевидное преимущество Java-разработчиков над остальными – то, что API Android очень похоже на API языка Java, и Android поддерживает если не все доступные в J2SE SDK классы, то, по крайней мере, наиболее важные. Еще одно преимущество: вы можете использовать для разработки под Android те же инструменты, что и для Java. Например, IDE Eclipse, ведь Google предоставляет для Eclipse плагин для разработки приложений Android. В начале работы с Android, имеет смысл заглянуть в такие руководства, как и Android in Action (3-е изд.) – две лучшие книги по Android для Java-разработчиков.

Напротив, если вы захотите заняться разработкой под iOS, вас ждёт непростой процесс изучения языка Objective-C и SDK iOS. Мне кажется, переход на Objective-C и iOS имеет больше смысла для C++-разработчика, чем для «джависта». Так что классическая война между Java и C++ продолжается благодаря разработке приложений для смартфонов. В любом случае давайте разберемся в особенностях внутреннего функционирования Android.

Как работает Android?

Как я уже упоминал, в операционной системе Android для разработки приложений используется Java. Вы можете написать код приложения для Android с помощью предоставляемого Google API Java , который затем будет скомпилирован в файлы классов. На этом схожесть заканчивается. Android не использует виртуальную машину Java (JVM) для выполнения файлов классов, вместо этого, в нём используется виртуальная машина Dalvik , не являющаяся истинной JVM и не работающая с Java-байткодом. Для выполнения на виртуальных машинах Dalvik, файлы классов компилируются в формат DEX (Dalvik EXecutable – исполняемые файлы Dalvik). После преобразования в формат DEX, файлы классов вместе с другими ресурсами объединяются в пакеты Android (APK) для распространения и инсталляции на различных устройствах. Главное, что следует знать: в основе базовой библиотеки классов виртуальной машины Dalvik лежит подмножество проекта Apache Harmony, вследствие чего она не поддерживает всё API J2SE. Если вы используете для написания кода приложений под Android IDE Eclipse, можете особо не волноваться, поскольку там есть автодополнение кода. Теперь давайте разберемся, как приложения Android выполняются на устройствах.

Как приложения Android выполняются на устройствах?

Если вам знакома операционная система Linux и понятие процесса, вам будет несложно понять, как выполняются Android-приложения. По умолчанию, операционная система Android присваивает каждому приложению уникальный идентификатор пользователя. После запуска приложений Android, каждое из них выполняется в своём процессе, в своей собственной виртуальной машине.

По мере необходимости, операционная система Android управляет запуском и остановом процессов приложений. Это значит, что все приложения Android работают изолированно друг от друга, но, разумеется, могут запрашивать доступ к аппаратным и другим системным ресурсам. Если вы знакомы с разработкой мобильных приложений, допустим, в J2ME, то, наверняка, сталкивались с понятием прав доступа (permissions). При установке или запуске приложения Android, оно запрашивает права, необходимые для доступа к интернету, телефонной книге или другим системным ресурсам. Пользователь явным образом предоставляет эти права, иначе в действии будет отказано. Все эти права доступа описываются в файле манифеста приложения Android. В отличие от Java, манифест Android представляет собой XML-файл , в котором перечислены все компоненты приложения и настройки для них. Четыре основных компонента приложения Android: активности, сервисы, поставщики контента и широковещательные приемники (broadcast receivers). Из них чаще всего встречаются активности, соответствующие отдельной экранной форме приложения Android. Например, в игре для операционной системы Android может быть несколько экранов: для входа в систему, рекордов, инструкций и экран самой игры. Каждый из этих элементов соответствует различным активностям в вашем приложении.

Как и в Java, в ОС Android хорошо то, что она выполняет некоторые задачи вместо разработчика, например, создает объекты активностей. За организацию активностей отвечает класс System . Если нужно запустить активность, достаточно вызвать метод startActivity() с объектом Intent в качестве параметра. В ответ на этот вызов, класс System или создаст новый объект активности или повторно использует старый. Аналогично сборке мусора в языке Java, отвечающей за чрезвычайно важную задачу повторного использования памяти, Android управляет запуском, остановом, созданием и уничтожением приложений. Может показаться, что он слишком сильно их ограничивает, но это не так. Android предоставляет события жизненного цикла, которые можно переопределять для вмешательства в этот процесс. Вот и всё о том, как работает Android . Java-разработчику, безусловно, имеет смысл изучить Android, поскольку эта система использует Java, так что вы сможете воспользоваться своими знаниями методик программирования на Java, паттернами проектирования и рекомендуемыми практиками для создания хороших приложений Android. Конечно, вам придется приспособиться к некоторым специфическим для Android вещам, но это придёт само собой со временем. Итак, чего же вы ждёте? Вперёд, изучайте Android и пишите ваше первое Android-приложение HelloWorld! Наконец, можете взглянуть на некоторые хорошие книги, посвященные основам разработки на Android, например, Head First Android Development – лучшую из посвященных Android книг.