Язык программирования Java (Ява). Как научиться программировать на Java — полное руководство Что такое язык программирования java

Последнее обновление: 15.04.2018

На сегодняшний момент язык Java является одним из самых распространенных и популярных языков программирования. Первая версия языка появилась еще в 1996 году в недрах компании Sun Microsystems, впоследствии поглощенной компанией Oracle. Java задумывался как универсальный язык программирования, который можно применять для различного рода задач. И к настоящему времени язык Java проделал большой путь, было издано множество различных версий. Текущей версией является Java 12, которая вышла в марте 2019 года. А Java превратилась из просто универсального языка в целую платформу и экосистему, которая объединяет различные технологии, используемые в целого ряда задач: от создания десктопных приложений до написания крупных веб-порталов и сервисов. Кроме того, язык Java активно применяется для создания программного обеспечения для целого ряда устройств: обычных ПК, планшетов, смартфонов и мобильных телефонов и даже бытовой техники. Достаточно вспомнить популярность мобильной ОС Android, большинство программ для которой пишутся именно на Java.

Особенности Java

Ключевой особенностью языка Java является то, что его код сначала транслируется в специальный байт-код, независимый от платформы. А затем этот байт-код выполняется виртуальной машиной JVM (Java Virtual Machine). В этом плане Java отличается от стандартных интерпретируемых языков как PHP или Perl, код которых сразу же выполняется интерпретатором. В то же время Java не является и чисто компилируемым языком, как С или С++.

Подобная архитектура обеспечивает кроссплатформенность и аппаратную переносимость программ на Java, благодаря чему подобные программы без перекомпиляции могут выполняться на различных платформах - Windows, Linux, Mac OS и т.д. Для каждой из платформ может быть своя реализация виртуальной машины JVM, но каждая из них может выполнять один и тот же код.

Java является языком с Си-подобным синтаксисом и близок в этом отношении к C/C++ и C#. Поэтому, если вы знакомы с одним из этих языков, то овладеть Java будет легче.

Еще одной ключевой особенностью Java является то, что она поддерживает автоматическую сборку мусора. А это значит, что вам не надо освобождать вручную память от ранее использовавшихся объектов, как в С++, так как сборщик мусора это сделает автоматически за вас.

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

Установка Java

Для работы программ на языке Java на целевой машине должна быть установлена JRE (Java Runtime Environment). JRE представляет минимальную реализацию виртуальной машины, а также библиотеку классов. Поэтому, если мы хотим запускать программы, то нам надо установить JRE. Для каждой конкретной платформы имеется своя версия JRE.

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

Загрузить и установить соответствующую версию JDK можно с с официального сайта Oracle: http://www.oracle.com/technetwork/java/javase/downloads/index.html

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

Затем нас перебросит на страницу, где надо выбрать версию для целевой ОС - Windows, MacOS или Linux:

Для каждой ОС есть два варианта загрузки: в виде установщика, либо в виде архива, который не надо устанавливать. Например, моя ОС - Windows, поэтому я загружаю файл jdk_12_windows-x64_bin.exe, который представляет программу установки.

После загрузки запустим программу установки:

Нажмем на кнопку Next. На следующем экране необходимо указать, в какую папку будет производиться установка:

Оставим выбор папки по умолчанию и нажмем на Next для выполнения установки.

После завершения установки JDK мы увидим вот такое окно:

Итак, после установки JDK создадим первую программу на Java.

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

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

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

Итак, вот ваша первая Java-программа

:

class HelloWorld {

System. out. println ("Hello World");

Для того, чтобы поработать с приведенными в книге примерами вам нужно получить по сети из Sun Microsystems и установить Java Developers Kit - пакет для разработки Java-приложений (

http://java.sun.com/products/jdk ). Полное описание утилит пакета JDK – в Приложении 1 .

Язык Java требует, чтобы весь программный код был заключен внутри поименованных классов. Приведенный выше текст примера надо записать в файл HelloWorld.java. Обязательно проверьте соответствие прописных букв в имени файла тому же в названии содержащегося в нем класса. Для того, чтобы оттранслировать этот пример необходимо запустить транслятор Java - javac, указав в качестве параметра имя файла с исходным текстом:

\> javac HelloWorld.Java

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

> java HelloWorld

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

Шаг за шагом

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

class HelloWorld {

В этой строке использовано зарезервированное слово

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

public static void main (String args ) {

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

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

Разбивая эту строку на отдельные лексемы, мы сразу сталкиваемся с ключевым словом

public. Это - модификатор доступа, который позволяет программисту управлять видимостью любого метода и любой переменной. В данном случае модификатор доступа public означает, что метод main виден и доступен любому классу. Существуют еще 2 указателя уровня доступа - private и protected, с которыми мы более детально познакомимся в главе 8 .

Следующее ключевое слово -

static. С помощью этого слова объявляются методы и переменные класса, используемые для работы с классом в целом. Методы, в объявлении которых использовано ключевое слово static, могут непосредственно работать только с локальными и статическими переменными.

У вас нередко будет возникать потребность в методах, которые возвращают значение того или иного типа: например,

int для целых значений, float - для вещественных или имя класса для типов данных, определенных программистом. В нашем случае нужно просто вывести на экран строку, а возвращать значение из метода main не требуется. Именно поэтому и был использован модификатор void. Более детально этот вопрос обсуждается в главе 4 .

Наконец, мы добрались до имени метода

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

Все параметры, которые нужно передать методу, указываются внутри пары круглых скобок в виде списка элементов, разделенных символами ";" (точка с запятой). Каждый элемент списка параметров состоит из разделенных пробелом типа и идентификатора. Даже если у метода нет параметров, после его имени все равно нужно поставить пару круглых скобок. В примере, который мы сейчас обсуждаем, у метода

main только один параметр, правда довольно сложного типа. String args объявляет параметр с именем args, который является массивом объектов - представителей класса String. Обратите внимание на квадратные скобки, стоящие после идентификатора args. Они говорят о том, что мы имеем дело с массивом, а не с одиночным элементом указанного типа. Мы вернемся к обсуждению массивов в следующей главе, а пока отметим, что тип String - это класс. Более детально о строках мы поговорим в главе 9 .

System. out. prlntln("Hello World!");

В этой строке выполняется метод

println объекта out. Объект out объявлен в классе OutputStream и статически инициализируется в классе System. В главах 9 и 13 у вас будет шанс познакомиться с нюансами работы классов String и OutputStream.

Закрывающей фигурной скобкой в строке 4 заканчивается объявление метода

main, а такая же скобка в строке 5 завершает объявление класса HelloWorld.

Лексические основы

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

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

Комментарии

Хотя комментарии никак не влияют на исполняемый код программы,

при правильном использовании они оказываются весьма существенной частью исходного текста. Существует три разновидности комментариев: комментарии в одной строке, комментарии в нескольких строках и, наконец, комментарии для документирования. Комментарии, занимающие одну строку, начинаются с символов // и заканчиваются в конце строки. Такой стиль комментирования полезен для размещения кратких пояснений к отдельным строкам кода:

а = 42; // если

42 - ответ, то каков же был вопрос?

Для более подробных пояснений вы можете воспользоваться комментариями, размещенными на нескольких строках, начав текст комментариев символами /* и закончив символами */ При этом весь текст между этими парами символов будет расценен как комментарий и транслятор его проигнорирует.

* Этот код несколько замысловат...

* Попробую объяснить:

Третья, особая форма комментариев, предназначена для сервисной программы

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

* Этот класс умеет делать замечательные вещи. Советуем всякому, кто

* захочет написать еще более совершенный класс, взять его в качестве

* базового.

* @see Java. applet. Applet

* ©author Patrick Naughton

class CoolApplet extends Applet { /**

* У этого метода два параметра:

key - это имя параметра. - это значение параметра с именем key.

*/ void put (String key, Object value) {

Зарезервированные ключевые слова

Зарезервированные ключевые слова - это специальные идентификаторы, которые в языке

Java используются для того, чтобы идентифицировать встроенные типы, модификаторы и средства управления выполнением программы. На сегодняшний день в языке J ava имеется 59 зарезервированных слов (см. таблицу 2). Эти ключевые слова совместно с синтаксисом операторов и разделителей входят в описание языка Java. Они могут применяться только по назначению, их нельзя использовать в качестве идентификаторов для имен переменных, классов или методов.

Таблица 2

Зарезервированные слова Java

Отметим, что слова

byvalue, cast, const, future, generic, goto, inner, operator, outer, rest, var зарезервированы в Java, но пока не используются Кроме этого, в Java есть зарезервированные имена методов (эти методы наследуются каждым классом, их нельзя использовать, за исключением случаев явного переопределения методов класса Object).

Таблица 3

Зарезервированные имена методов

Java

Идентификаторы

Идентификаторы используются для именования классов, методов и переменных. В качестве идентификатора может использоваться любая последовательность строчных и прописных букв, цифр и символов _ (подчеркивание) и $ (доллар). Идентификаторы не должны начинаться с цифры, чтобы транслятор не перепутал их с числовыми литеральными константами, которые будут описаны ниже.

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

Литералы

Константы в

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

Целые литералы

Целые числа - это тип, используемый в обычных программах наиболее часто. Любое целочисленное значение, например, 1, 2, 3, 42 - это целый литерал. В данном примере приведены десятичные числа, то есть числа с основанием 10 - именно те, которые мы повседневно используем вне мира компьютеров. Кроме десятичных, в качестве целых литералов могут использоваться также числа с основанием 8 и 16 - восьмеричные и шестнадцатиричные. Java распознает восьмеричные числа по стоящему впереди нулю. Нормальные десятичные числа не могут начинаться с нуля, так что использование в программе внешне допустимого числа 09 приведет к сообщению об ошибке при трансляции, поскольку 9 не входит в диапазон 0..

7, допустимый для знаков восьмеричного числа. Шестнадцатиричная константа различается по стоящим впереди символам нуль-х (0х или 0Х). Диапазон значений шестнадцатиричной цифры - 0.. 15, причем в качестве цифр для значений 10.. 15 используются буквы от А до F (или от а до f). С помощью шестнадцатиричных чисел вы можете в краткой и ясной форме представить значения, ориентированные на использование в компьютере, например, написав Oxffff вместо 65535.

Целые литералы являются значениями типа

int, которое в Java хранится в 32-битовом слове. Если вам требуется значение, которое по модулю больше, чем приблизительно 2 миллиарда, необходимо воспользоваться константой типа long. При этом число будет храниться в 64-битовом слове. К числам с любым из названных выше оснований вы можете приписать справа строчную или прописную букву L, указав таким образом, что данное число относится к типу long. Например, Ox7ffffffffffffffL или 9223372036854775807L - это значение, наибольшее для числа типа long.

Литералы с плавающей точкой

Числа с плавающей точкой представляют десятичные значения, у которых есть дробная часть. Их можно записывать либо в обычном, либо экспоненциальном форматах. В обычном формате число состоит из некоторого количества десятичных цифр, стоящей после них десятичной точки, и следующих за ней десятичных цифр дробной части. Например, 2.0, 3.14159 и.6667 - это допустимые значения чисел с плавающей точкой, записанных в стандартном формате. В экспоненциальном формате после перечисленных элементов дополнительно указывается десятичный порядок. Порядок определяется положительным или отрицательным десятичным числом, следующим за символом Е или е. Примеры чисел в экспоненциальном формате: 6.022е23, 314159Е-05, 2е+100. В

Java числа с плавающей точкой по умолчанию рассматриваются, как значения типа double. Если вам требуется константа типа float, справа к литералу надо приписать символ F или f. Если вы любитель избыточных определений - можете добавлять к литералам типа double символ D или d. Значения используемого по умолчанию типа double хранятся в 64-битовом слове, менее точные значения типа float - в 32-битовых.

Логические литералы

У логической переменной может быть лишь два значения -

true (истина) и false (ложь). Логические значения true и false не преобразуются ни в какое числовое представление. Ключевое слово true в Java не равно 1, a false не равно 0. В Java эти значения могут присваиваться только переменным типа boolean либо использоваться в выражениях с логическими операторами.

Символьные литералы

Символы в

Java - это индексы в таблице символов UNICODE. Они представляют собой 16-битовые значения, которые можно преобразовать в целые числа и к которым можно применять операторы целочисленной арифметики, например, операторы сложения и вычитания. Символьные литералы помещаются внутри пары апострофов (" "). Все видимые символы таблицы ASCII можно прямо вставлять внутрь пары апострофов: - "a", "z", "@". Для символов, которые невозможно ввести непосредственно, предусмотрено несколько управляющих последовательностей.

Таблица 3.

2. Управляющие последовательности символов

Управляющая последовательность

Описание

Восьмеричный символ

(ddd)

Шестнадцатиричный символ

UNICODE (xxxx)

Апостроф

Обратная косая черта

Возврат каретки (carriage return)

Перевод строки (line feed, new line)

Перевод страницы

(form feed)

Горизонтальная табуляция

(tab)

Возврат на шаг

(backspace)

Строчные литералы

Строчные литералы в

Java выглядят точно также, как и во многих других языках - это произвольный текст, заключенный в пару двойных кавычек (""). Хотя строчные литералы в Java реализованы весьма своеобразно (Java создает объект для каждой строки), внешне это никак не проявляется. Примеры строчных литералов: “Hello World!”; "две\строки; \ А это в кавычках\"". Все управляющие последовательности и восьмеричные / шестнадцатиричные формы записи, которые определены для символьных литералов, работают точно так же и в строках. Строчные литералы в Java должны начинаться и заканчиваться в одной и той же строке исходного кода. В этом языке, в отличие от многих других, нет управляющей последовательности для продолжения строкового литерала на новой строке.

Операторы

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

главе 5 , их перечень приведен в таблице 3. 3.

Таблица 3.

3. Операторы языка Java

Разделители

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

Название

Для чего применяются

круглые скобки

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

фигурные скобки

квадратные скобки

Используются в объявлениях массивов и при доступе к отдельным элементам массива.

точка с запятой

Разделяет операторы.

Разделяет идентификаторы в объявлениях переменных, также используется для связи операторов в заголовке цикла

for.

Отделяет имена пакетов от имен подпакетов и классов, также используется для отделения имени переменной или метода от имени переменной.

Переменные

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

Объявление переменной

Основная форма объявления переменной такова:

тип идентификатор [ = значение] [, идентификатор [ = значение

7...];

Тип - это либо один из встроенных типов, то есть,

byte, short, int, long, char, float, double, boolean, либо имя класса или интерфейса. Мы подробно обсудим все эти типы в следующей главе . Ниже приведено несколько примеров объявления переменных различных типов. Обратите внимание на то, что некоторые примеры включают в себя инициализацию начального значения. Переменные, для которых начальные значения не указаны, автоматически инициализируются нулем.

В приведенном ниже примере создаются три переменные, соответствующие сторонам прямоугольного треугольника, а затем

c помощью теоремы Пифагора вычисляется длина гипотенузы, в данном случае числа 5, величины гипотенузы классического прямоугольного треугольника со сторонами 3-4-5.

class Variables {

public static void main (String args ) {

= Math.sqrt (a* a + b* b);

System.out.println ("c = "+ c);

Ваш первый шаг

Мы уже многого достигли: сначала написали небольшую программу на языке

Java и подробно рассмотрели, из чего она состоит (блоки кода, комментарии). Мы познакомились со списком ключевых слов и операторов, чье назначение будет подробно объяснено в дальнейших главах. Теперь вы в состоянии самостоятельно различать основные части любой Java-программы и готовы к тому, чтобы приступить к чтению главы 4 , в которой подробно рассматриваются простые типы данных.

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

Зачем нужна Java

Друзья, несомненно технология Java Вам нужна, но только последней версии и скачанная на официальном сайте www.java.com/ru . Почему? Покажу простой пример и всё объясню.

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

Java это объектно-ориентированный язык программирования разработанный Sun Microsystems в 1995г. Огромное количество веб-сайтов, игр и различных приложений несут в себе различные элементы разработанные при помощи Java.

Например, установили Вы операционную систему и решили инсталлировать драйвер на вашу видеокарту, для этого идём на сайт видеокарты, к примеру http://www.nvidia.ru , нажимаем Драйверы . Вручную мы свои драйверы искать не хотим и выбираем

Вариант 2: Автоматически найти драйверы NVIDIA и жмём на кнопку Графические драйверы

И получаем вот такой ответ:

Служба NVIDIA Smart Scan требует последней версии ПО Java. Нажмите на значок «Java» для установки .

Если нажать на кнопку Java, то вы будете переадресованы на сайт www.java.com/ru и чтобы установить себе платформу Java нужно лишь нажать на кнопку Загрузить Java бесплатно .

Та же самая ситуация может произойти со многими онлайн играми, если вы захотите поиграть вот в эту онлайн игру,

То игра вас сразу переадресует на страницу установки платформы Java.

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

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

Как проверить установлена ли на компьютере последняя версия платформы Java

Идём на сайт www.java.com/ru и нажимаем на кнопку Установлено ли на моем компьютере программное обеспечение Java ?

Проверьте версию Java.

Красноречиво. Java не установлена совсем.

Устанавливаем себе Java. Возвращаемся на главную страницу www.java.com/ru и жмём

Последним релизом является версия 1.6 , в которой было произведено улучшение системы безопасности, улучшение поддержки скриптового языка Mozilla Rhino (англ.), улучшена интеграция с рабочим столом, добавлены некоторые новые возможности в создании графических интерфейсов.

Java и Microsoft

Следующие компании в основном фокусируются на Java (J2EE) технологиях, а не на .NET , хотя имеют дело также и с последними: IBM, Oracle . В частности, СУБД Oracle включает JVM как свою составную часть, обеспечивающую возможность непосредственного программирования СУБД на языке Java, включая, например, хранимые процедуры .

Основные возможности

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

Программа, выводящая «Hello, World!»:

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

Пример использования шаблонов:

Import java.util.*; public class Sample { public static void main(String args) { // Создание объекта по шаблону. List strings = new LinkedList() ; strings.add ("Hello" ) ; strings.add ("world" ) ; strings.add ("!" ) ; for (String s: strings) { System .out .print (s) ; System .out .print (" " ) ; } } }

Основные идеи

Примитивные типы

В языке Java только 8 скалярных типов : boolean, byte , char , short, int , long, float , double .

Классы-обёртки примитивных типов

Длины и диапазоны значений примитивных типов определяются стандартом , а не реализацией и приведены в таблице. Тип char сделали двухбайтовым для удобства локализации (один из идеологических принципов Java): когда складывался стандарт, уже существовал Unicode -16, но не Unicode-32. Поскольку в результате не осталось однобайтового типа, добавили новый тип byte. Типы float и double могут иметь специальные значения , и «не число» (

Тип Длина (в байтах) Диапазон или набор значений
boolean не определено true, false
byte 1 −128..127
char 2 0..2 16 -1, или 0..65535
short 2 −2 15 ..2 15 -1, или −32768..32767
int 4 −2 31 ..2 31 -1, или −2147483648..2147483647
long 8 −2 63 ..2 63 -1, или примерно −9.2·10 18 ..9.2·10 18
float 4 -(2-2 -23)·2 127 ..(2-2 -23)·2 127 , или примерно −3.4·10 38 ..3.4·10 38 , а также , , NaN
double 8 -(2-2 -52)·2 1023 ..(2-2 -52)·2 1023 , или примерно −1.8·10 308 ..1.8·10 308 , а также , , NaN

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

Преобразования при математических операциях

В языке Java действуют следующие правила:

  1. Если один операнд имеет тип double, другой тоже преобразуется к типу double.
  2. Иначе, если один операнд имеет тип float, другой тоже преобразуется к типу float.
  3. Иначе, если один операнд имеет тип long, другой тоже преобразуется к типу long.
  4. Иначе оба операнда преобразуется к типу int.

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

Short x = 50 , y = 1000 ; int z = x*y;

переменной z присваивается значение 50000, а не −15536, как в большинстве безнадёжно устаревших реализаций C и C++. В программе, скомпилированной MS VC++ , начиная с версии 7, а также многими другими современными компиляторами (gcc , Intel C++, Borland C++, Comeau и т. д.), значение будет также равно 50000.

Объектные переменные, объекты, ссылки и указатели

В языке Java имеются только динамически создаваемые объекты. Причем переменные объектного типа и объекты в Java - совершенно разные сущности. Переменные объектного типа являются ссылками , то есть неявными указателями на динамически создаваемые объекты. Это подчёркивается синтаксисом описания переменных. Так, в Java нельзя писать:

Double a[ 10 ] [ 20 ] ; Foo b(30 ) ;

Double a = new double [ 10 ] [ 20 ] ; Foo b = new Foo(30 ) ;

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

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

  • Нельзя преобразовывать объект типа int или любого другого примитивного типа в указатель или ссылку и наоборот.
  • Над ссылками запрещено выполнять операции ++, −−, +, − или любые другие арифметические операции.
  • Преобразование типов между ссылками жёстко регламентировано. За исключением ссылок на массивы, разрешено преобразовывать ссылки только между наследуемым типом и его наследником, причём преобразование наследуемого типа в наследующий должно быть явно задано и во время выполнения производится проверка его осмысленности. Преобразования ссылок на массивы разрешены лишь тогда, когда разрешены преобразования их базовых типов, а также нет конфликтов размерности.
  • В Java нет операций взятия адреса (&) или взятия объекта по адресу (*). Звёздочка в Java означает умножение, и только. Амперсанд (&) означает всего лишь «побитовое и» (двойной амперсанд - «логическое и»).

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

Дублирование ссылок и клонирование

Из-за того, что объектные переменные являются ссылочными, при присваивании не происходит копирования объекта. Так, если написать

Foo foo, bar; … bar = foo;

то произойдет копирование адреса из переменной foo в переменную bar . То есть foo и bar будут указывать на одну и ту же область памяти, то есть на один и тот же объект; попытка изменить поля объекта, на который ссылается переменная foo , будет менять объект, с которым связана переменная bar , и наоборот. Если же необходимо получить именно ещё одну копию исходного объекта, пользуются или методом (функцией-членом, в терминологии C++) clone() , создающим копию объекта, или же копирующим конструктором .

Метод clone() требует, чтобы класс реализовывал интерфейс Cloneable (об интерфейсах см. ниже). Если класс реализует интерфейс Cloneable , по умолчанию clone() копирует все поля (мелкая копия ). Если требуется не копировать, а клонировать поля (а также их поля и так далее), надо переопределять метод clone() . Определение и использование метода clone() часто является нетривиальной задачей .

Сборка мусора

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

Классы и функции

Java не является процедурным языком: любая функция может существовать только внутри класса. Это подчёркивает терминология языка Java, где нет понятий «функция» или «функция-член» (англ. member function ), а только метод . В методы превратились и стандартные функции. Например, в Java нет функции sin() , а есть метод Math.sin() класса Math (содержащего, кроме sin() , методы cos() , exp() , sqrt() , abs() и многие другие).

Статические методы и поля

Для того чтобы не надо было создавать объект класса Math (и других аналогичных классов) каждый раз, когда надо вызвать sin() (и другие подобные функции), введено понятие статических методов (англ. static method ; иногда в русском языке они называются статичными). Статический метод (отмечаемый ключевым словом static в описании) можно вызвать, не создавая объекта его класса. Поэтому можно писать

Double x = Math .sin (1 ) ;

Math m = new Math () ; double x = m.sin (1 ) ;

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

Статические поля имеют тот же смысл, что и в C++: каждое существует только в единственном экземпляре.

Финальность

Ключевое слово final (финальный) означает разные вещи при описании переменной, метода или класса. Финальная переменная (именованная константа) инициализируется при описании и дальше не может быть изменена. Финальный метод не может быть переопределён при наследовании. Финальный класс не может иметь наследников вообще.

Абстрактность

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

Ссылки

  • developers.sun.ru - Российский портал разработчиков на русском от Sun Microsystems
  • Bruce Eckel’s Free Electronic Books (англ.) - свободно распространяемые электронные версии книг Брюса Эккеля по C++ и Java вместе с исходным кодом
  • http://bruceeckel.by.ru - переводы на русский язык некоторых свободно распространяемых книг Брюса Эккеля по Java
  • Canadian Mind Products Java & Internet Glossary - понятно о базовых аспектах Java-технологий

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

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

Java как язык с поддержкой объектного ориентирования отвечает основным принципам ООП:

  • наследование;
  • полиморфизм;
  • инкапсуляция.

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

Особенности

Код на языке программирования Java транслируется в байт-код, затем выполняется на виртуальной машине JVM. Преобразование в байт-код осуществляется на Javac, Jikes, Espresso, GCJ. Существуют такие компиляторы, которые транслируют язык «Си» в Java байт-код. Таким образом, приложение на «Си» может работать на любых платформах.

Синтаксис «Джава» характеризуется следующим:

  1. Имена классов должны начинаться с большой буквы. Если название состоит из нескольких слов, то второе должно начинаться с верхнего регистра.
  2. Если для формирования метода используется несколько слов, то второе из них должно начинаться с большой буквы.
  3. Обработка начинается с метода main() - он является частью каждой программы.

Типы

Язык программирования Java имеет 8 примитивных типов. Они представлены ниже.

  • Boolean - логический тип, принимает всего два значения true и false.
  • Byte - наименьший целочисленный тип размером 1 байт. Он используются при работе с или файлов, необработанными двоичными данными. Имеет диапазон от -128 до 127.
  • Short имеет диапазон от -32768 до 32767, используется для представления чисел. Размер переменных этого типа - 2 байта.
  • Int тоже обозначает числа, но его размер - 4 байта. Он чаще остальных используется для работы с целочисленными данными, а byte и short иногда повышаются до int.
  • Long используются для больших целых чисел. Возможные значения находятся в диапазоне от -9223372036854775808 до 9223372036854775807.
  • Float и double применяются для обозначения дробных. Их разница в том, что float удобен, когда не требуется высокая точность в дробной части числа.
  • Double выводит на экран все знаки после разделителя «.», а float - только первые.
  • String наиболее используемый примитивный тип, с помощью которого задаются строки.

Классы и объекты

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

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

В «Джава» можно создавать подкласс, который будет наследовать методы родительского. Для этого используется слово extends:

  • class имя_класса extends имя_суперкласса {};

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

  • public class Class{ public Class(){ } public Class(String name){ }}

Имя конструктора совпадает с именем класса, по умолчанию у него есть всего один параметр:

  • public Puppy(String name)

Object создается из класса с помощью оператора new():

  • Point р = new Point()

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

    Point р = new Point()

    class TwoPoints {

    public static void main(String args) {

    Point p1 = new Point();

    Point p2 = new Point();

    Объектные переменные и объекты - совершенно разные сущности. Object variables являются ссылками. Они могут указывать на любые переменные непримитивного типа. В отличие от C++ их типовое преобразование жестко регламентировано.

    Поля и методы

    Поля - это все переменные, связанные с классом или объектом. По умолчанию они являются локальными и не могут использовать в других классах. Для доступа к полям используется оператор «.»:

    • classname.variable

    Можно задать статические поля с помощью ключевого слова static. Такие поля являются единственным способом хранить глобальные переменные. Это связано с тем, что в «Джава» попросту нет global variables.

    Реализована возможность импорта переменных для получения доступа из других пакетов:

    • import static classname;

    Метод - подпрограмма для тех классов, в которых объявлена. Описывается на том же уровне, что и переменные. Задается в виде функции и может иметь любой тип, в том числе void:

    • class Point { int х, у;

      void init(int a, int b) {

    В примере выше класс Point имеет integer x и y, метод init(). Доступ к методам, как и к переменным, осуществляется путем использования оператора «.»:

    • Point.init();

    Свойство init ничего не возвращает, поэтому имеет тип void.

    Переменные

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

    Одновременно может быть объявлено несколько переменных. Для их перечисления используется запятая:

    • int a, b, c;

    Инициализации осуществляется после или во время объявления:

    int a = 10, b = 10;

    Существует несколько типов:

    • local variables (локальные);
    • instance variables (переменные экземпляра);
    • static variables (статические).

    Local variables объявляют в методах и конструкторах, они создаются во время запуска последних и уничтожаются после завершения. Для них запрещено указывать access modifiers и управлять уровнем доступности. Они не видимы за пределами объявленного блока. В Java переменные не имеют начального значения, поэтому оно в обязательном порядке присваивается перед первым использованием.

    Instance variables должны быть объявлены внутри класса. Они используются как методы, но получить к ним доступ можно только после создания объекта. Переменная разрушается, когда уничтожается объект. У экземплярных переменных, в отличе от локальных, существуют значения по умолчанию:

    • числа - 0;
    • логика - false;
    • ссылки - null.

    Static variables называются переменными класса. Их имена начинаются с символа в верхнем регистре, конкретизируются модификатором static. Они используются как константы, соответственно, к ним прибавляется один спецификатор из списка:

    • final;
    • private;
    • public.

    Запускаются в начале программы, уничтожаются после остановки выполнения. Так же, как переменные экземпляра, имеют стандартные значения, которые присваиваются пустым переменным. У чисел - значение 0, булевые переменные имеют значение false, ссылки на объект изначально имеют null. Статические переменные вызываются в следующем виде:

    • ClassName.VariableName.

    Сборщик мусора

    В самоучителе "Язык программирования Java для новичков" раздел автоматического сборщика мусора является наиболее интересным.

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

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

    Модификаторы

    Различают разные типы модификаторов. Кроме тех, которые определяют способ доступа, существует модификаторы методов, переменных, класса. Методы, объявленные как private, доступны только в объявленном классе. Такие переменные не могут использоваться в других классах и функциях. Public открывает доступ для любого класса. Если нужно получить Public class из другого пакета, то его следует предварительно импортировать.

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

    Модификатор, который применяется при создании методов, - static. Это означает, что созданный метод существует независимо от экземпляров класса. Модификатор Final не управляет доступом, а указывает на невозможность дальнейшего манипулирования значениями объекта. Он запрещает изменение того элемента, для которого указан.

    Final для полей делает невозможным изменение первого значения переменной:

      public static void mthod(String args) {

      final int Name = 1;

      int Name = 2;// выдаст ошибку

    Переменные с модификатором final являются константами. Их принято писать только заглавными буквами. CamelStyle и другие способы не работают.

    Final для методов указывает запрет на изменение метода в наследуемом классе:

      final void myMethod() {

      System.out.printIn(“Hello world”);

    Final для классов означает, что нельзя создать наследников класса:

      final public class Class {

    Abstract - модификатор создания абстрактных классов. Любой абстрактный класс и абстрактные методы предназначены для дальнейшего расширения в других классах и блоках. Модификатор transient указывает виртуальной машине не обрабатывать заданную переменную. В этом случае та просто не сохранится. Например, transient int Name = 100 не сохранится, а int b сохранится.

    Платформы и версии

    Существующие семейства языка программирования Java:

    • Standard Edition.
    • Enterprise Edition.
    • Micro Edition.
    • Card.

    1. SE - является основным, широко используется для создания пользовательских приложений для индивидуального использования.
    2. EE - набор спецификаций для разработки ПО уровня предприятия. Содержит больше возможностей, чем SE, поэтому используется в коммерческих масштабах на крупных и средних предприятиях.
    3. ME - предназначены для устройств с ограниченной мощностью и памятью, у них, как правило, малый размер дисплея. Такими устройствами являются смартфоны и КПК, ресиверы цифрового телевидения.
    4. Card - предназначена для устройств с крайне ограниченными вычислительными ресурсами, например таких, как смарт-карты, sim-карты, банкоматы. Для этих целей был изменен байт-код, требования к платформе, составляющее библиотек.

    Применение

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

    Активно используется для приложений под Android. Программа компилируется в нестандартный байт-код, выполняется на виртуальной машине ART. Для компиляции применяется Android Studio. Это IDE от компании «Гугл» является официальной для разработки под ОС Android.

    Microsoft разработала собственную реализацию виртуальной машины Java MSJVM. Она имела такие отличия, которые ломали основополагающую концепцию кроссплатформенности - отсутствовала поддержка некоторых технологий и методов, имелись нестандартные расширения, работающие только на платформе Windows. Microsoft выпустил язык J#, синтаксис и работа в целом которого очень напоминает Java. Он не соответствовал официальной спецификации и в итоге был исключен из стандартного инструментария разработчика Microsoft Visual Studio.

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

    Разработка программного обеспечения осуществляется в таких IDE:

    1. NetBeans IDE.
    2. Eclipse IDE.
    3. IntelliJ IDEA.
    4. JDeveloper.
    5. Java для iOS.
    6. Geany.

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

    Удобно писать код на языке программирования Java в среде Netbeans и Eclipse IDE. Это свободные интегрированные среды для разработки, они подходят под все платформы «Джава». Также используются для программирования на Python, PHP, JavaScript, C++.

    IntelliJ IDE от компании Jetbrains распространяется в двух вариантах: бесплатном и коммерческом. Поддерживает написание кода на многих языках программирования, существуют сторонние плагины от разработчиков, в которых реализовано еще большее количество ЯП.

    JDeveloper - еще одна разработка от компании Oracle. Полностью написана на Java, поэтому работает на всех операционных системах.