Раздел "Язык программирования Java. Основы" основывается на материале, изложенном в следующих источниках:
Приведем некоторые характерные особенности языка Java:
Синтаксис Java представляет собой упрощенный вариант синтаксиса языка C++. В этом языке отсутсвует потребность в файлах заголовков, арифметике (и даже в синтаксисе) указателей, структурах, объединениях, перегрузке операций виртуальных базовых классах и т.п. При этом, создатели Java не стремились исправить все недостатки языка C++. Например, систаксис оператора switch в java остался неизменным. Зная C++, нетрудно перейти на Java.
Если вы привыкли к визуальной среде программирования (например, Visual Basic), язык Java может показаться вам сложным. Его синтаксис некоторые считают странным, хотя понять его не составляет большого труда. Но важнее другое: пользуясь Java, приходиться больше программировать. Начинающие программисты нередко прелпочитают язык Visual Basic, поскольку его визуальная среда программирования позволяет почти автоматически создавать инфраструктуру приложения. Чтобы достичь того же результата средствами Java, приходится вручную писать довольно большой объем кода. Существуют, однако, интрегрированные среды разработки от независимых производителей, которые позволяют программировать в стиле перетаскивания.
За прошедшие тридцать лет объектно-ориентированный подход уже доказал свое право на существование, и без него невозможно представить себе современный язык программирования. Особенности Java, связанные с объектами, сравнимы с языком C++. Основное отличие между ними заключается в механизме множественного наследования, который в языке Java заменен более простым понятием интерфейсов, а также в модели метакласов в Java.
Язык Java представляет эффективные и удобные средства для работы в сети. Всякий, когда-либо пытавшийся писать программы на других языках для работы в Интернете, будет приятно удивлен тем, насколько просто на Java решаются самые трудные задачи, например установление сокетных соединений. Связь между распределенными объектами в Java обеспечивается механизмом вызова удаленных методов.
Эта характеристика языка очень полезна. Компилятор Java выявляет такие ошибки, которые в других языках обнаруживаются только на этапе выполнения программы. Кроме того, программисты, потратившие многие часы на поиски ошибки, вызвавшей нарушения данных памяти из-за неверного указателя, будут обрадованы тем, что в работе с Java подобные осложнения не могут даже в принципе возникнуть.
Программирующий на Java полностью защищен, поскольку он ни когда не обратится к неправильному указателю, не допустит ошибок выделения памяти, и ему не придется искать причины утечек памяти.
Язык Java предназначен для использования в сетевой или распределенной среде. По этой причине большое внимание было уделено безопасности. Java позволяет создавать системы, защищенные от вирусов и несанкционированного доступа.
Компилятор генерирует объектный файл, формат которого не зависит от архитектуры компьютера. Скомпилированная программа может выполняться на любых процессорах, а для ее работы требуется лишь исполняющая система Java. Код, генерируемый компилятором Java, называется байт-кодом. Он разработан таким образом, чтобы его можно было легко интерпретировать на любой машине или оперативно преобразовывать в собственный машинный код.
Тип int в C и C++ может означать как 16-, так и 32-разрядное целое число. В Java тип int всегда означает 32-разрядное целое число. Фиксированная разрядность числовых типов данных позволяет избежать многих неприятностей, связанных с выполнением программ на разных компьютерах. Двоичные данные хранятся и передаются в неизменном формате, что также позволяет избежать недоразумений, связанных с разным порядком следования байтов на различных платформах. Строки сохраняются в стандартном формате Unicode.
На ранней стадии развития Java многие пользователи были не согласны с утверждением, что производительности "более чем достаточно". Но теперь динамические компиляторы (JIT - компиляторы) настолько усовершенствованы, что могут конкурировать с традиционными компиляторами, а в некоторых случаях они даже дают выигрышь в производительности, поскольку имеют больше доступной информации. Так, например, динамический компилятор может отслеживать код, который выполняется чаще, и оптимизировать по быстродействию только эту часть кода. Динамическому компилятору известно, какие именно классы были загружены. Он может сначала применить встраивание, когда определенная функция вообще не переопределяется на основании загруженной коллекции классов, а затем отменить, если потребется, такую оптимизацию.
Если вы когда-либо пытались организовать многопоточную обработку на каком-нибудь из языков программирования, то будете приятно удивлены тем, насколько это легко сделать на Java. В потоках, организуемых на Java, могут быть использованы преимущества многопроцессорных систем, если операционная система допускает такую возможность. К сожалению, реализация потоков в большинстве систем сильно отличаются друг от друга, а разработчики Java не предпринимают должных усилий, чтобы достич независимости от платформы и в этом вопросе. Только код для вызова потоков остается одинаковым для всех машин, а ответсвенность за их поддержку возлагается на операционную систему или библиотеку потоков. Несмотря на это, именно простота организации многопоточной обработки делает язык Java таким привлекательным для разработки серверного программного обеспечения.
Это очень важно в тех случаях, когда требуется добавить код в уже выполняющуюся программу. Ярким тому примером примером служит код, загружаемый из Интернета для выполнения браузером. В версии Java 1.0 получить информацию о работающей программе было не просто, но в последних версиях Java (на данный момент доступна Java 1.8) программирующий получает полное представление как о структуре, так и о поведении объектов. Это весьма ценно для систем, которые должны анализировать объекты в ходе выполнения программы. К таким системам относятся средства построения графического пользовательского интерфейса, интеллектуальные отладчики, подключаемые компоненты и объектные базы данных.
Java можно разделить на несколько частей:
Для успешного прохождения нашего курса потребуется:
На следующем шаге мы приведем текст первой программы