16+
ComputerPrice
НА ГЛАВНУЮ СТАТЬИ НОВОСТИ О НАС




Яндекс цитирования


Версия для печати

Модуль поиска не установлен.

Учимся программировать на JAVA. Часть 1

07.06.2010

История создания языка Java, его свойства

Цели главы

  • Свойства языка.
  • Области применения языка.
  • Объявление операторов и переменных.
  • Преобразование типов данных.
  • Операторы ветвления программы.
  • Операторы цикла.
  • Объявление строк и массивов.

В 1990 году группа программистов компании Sun Microsystems начала разрабатывать ПО для управления бытовой электроникой. В группу входили Джеймс Гослинг и Патрик Нафтон. Нафтон разрабатывал визуальные интерфейсы, а Гослинг был главным программистом. Они хотели соединить приборы бытовой техники в сеть и управлять ими при помощи контроллера с простым интерфейсом пользователя. Предполагалось широкое использование анимации для отображения подключенных устройств и режимов работы с ними. ПО не должно было зависеть от архитектуры бытовой электроники и легко переноситься на разные устройства. До 1991 года работы велись на С++, но весной 1991 года Гослинг пришел к выводу, что для успешного решения задачи, необходимо разработать новую операционную среду. Это должна быть архитектурно-независимая, распределенная по сети среда которая позволила бы совершенно непохожим устройствам общаться друг с другом. Такой средой, к 1993 году, стал объектно-ориентированный язык Oak. В начале 1994 года Билл Джой и Эрик Щмидт натолкнулись на мысль использовать Oak для программирования в сети Internet. Oak был переименован в Java. Гослинг дополнил Oak классами и методами для работы с Internet, а Нафтон разработал интерфейс пользователя. В 1995 году Sun начала бесплатное распространение Java.

Рассмотрим краеугольные камни Java

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

Это позволило сократить размер программ настолько, что допустило передачу классов по сети в реальном времени и их выполнение в окне броузера. Кроме того, среда сама убирает мусор, оставшийся после окончания классов. Java разрешает ссылки между классами во время выполнения программы (динамическая компоновка), поэтому нижележащие классы могут быть изменены независимо друг от друга без повторной компиляции, а значит классы могут находиться на разных компьютерах, что означает действительно распределенную вычислительную среду. Динамическая компоновка приводит к тому, что вы можете создать строку с именем класса, а затем создать объект типа данного класса. Компоновщик найдет описание класса и загрузит объект. Это позволяет говорить о Java, как о динамическом языке. Запрет на использование указателей приводит к тому, что при программировании вы оперируете объектами и методами, т.е. Java является чисто объектно-ориентированным языком. Для выполнения программы на конкретной платформе требуется Java Virtual Machine (JVM). JVM зависит от платформы и интерпритирует байт-код, полученный после работы компилятора Java. Байт-код не зависит от платформы, что обеспечивает переносимость программ Java. Это означает, что один и тот же класс может работать на разных платформах без перекомпиляции. JVM входит в состав поставки современных броузеров. Например, устанавливая Internet Explorer 5 вы также устанавливаете на компьютер новую JVM, т.е. если компьютер подключен к Internet, значит на нем, скорее всего, уже есть JVM и вам не надо ни о чем беспокоиться. Для увеличения живучести программ в Java запрещено неявное согласование типов данных. Неявное согласование типов может приводить к искажению числовых данных за счет изменения их разрядности. Очень серьезное внимание разработчики языка уделили безопасности. Так как между "железом" и байт-кодом Java находится JVM, байт-код Java не может нанести вред операционной системе компьютера из-за неправильного обращения на низком уровне. Кроме того, JVM проверяет байт-код на подделку, используя технологию шифрования с открытым ключем. Разработчики, сумели добиться высокой производительности Java используя механизм многопоточности. При выполнении программы, одновременно выполняются несколько процессов. Уборка мусора и "медленные" операции (например, ввода/вывода) автоматически выделяются в отдельные процессы и выполняются асинхронно. При этом, пока у вас не кончится оперативная память, для уборки мусора Java ждет свободные циклы процессора. Это помогает сохранить высокое быстродействие, а сама уборка мусора, повышает отказоустойчивость программ.

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

Перейдем к рассмотрению грамматики языка

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

+ - сложение;
- - вычитание;
* - умножение;
/ - деление;
= - присваивание;
% - модуль;
& - побитовое И;
| - побитовое ИЛИ;
>>> - сдвиг вправо с заполнением нулями;
<< - сдвиг влево;
>> - сдвиг вправо с распространением знака;
== - равно (сравнение);
<= - меньше или равно (сравнение);
!= - не равно (сравнение);
&& - логическое И;
|| - логическое ИЛИ;
++ - приращение и т.д.

Всего в Java 37 операторов о которых вы можете прочесть в параграфе 3.12 Java Language Specification. Переменные Java могут иметь примитивный или ссылочный тип. Примитивные типы переменных встроены в язык Java, а ссылочные типы являются классами. К ссылочным типам данных, относятся также строки, структуры и массивы.

Примитивные типы данных:

boolean false, true;
byte от v256 до 255
short от v32768 до 32767;
int от v2147483648 до 2147483647
long от v9223372036854775808 до 9223372036854775807
float мантисса до 2^24, экспонента от -149 до 104
double мантисса до 2^53, экспонента от -1045 до 1000
char символы Unicode.

Пример ссылочных типов данных:

String строка символов
Vector вектор
Boolean класс-оболочка для boolean
Double класс-оболочка для double
Long класс-оболочка для long и т. д.

Конструкции, типа:
a = b * c; // умножение b на c и присвоение результата переменной а
a = b>>c; // побитовый сдвиг b вправо на с разрядов и присвоение результата а
называют выражениями. Выражения получаются при совершении каких-нибудь действий над константами или переменными. При этом константы или переменные Java разделяются операторами, которые показывают, что собственно происходит. Кроме арифметических выражений, приведенных выше, в Java присутствуют логические выражения. В них используются операторы отношений для осуществления сравнения:
a > b // a больше b
a <= 2*b-c // a меньше или равно два умноженного на b минус с
a != b // a не равно b

Результатом логического выражения всегда является true (правда) или false (ложь). true и false v это зарезервированные слова компилятора Java. Компилятор их знает, понимает и компилирует. Кроме них, к зарезервированным словам относятся:

abstractbreakbooleanbytecasecast
catchcharclassconstcontinuedo
doubleelseextendsfinalfinallyfloat
forfuturegenericgoto ifimplements
importinnerinstanceofintinterfacelong
nativenewnulloperatorouter package
privateprotectedpublicrestreturnshort
staticsuperswitchsynchronizedthisthrow
transienttryvarvoidvolatilewhile

Как объявляются переменные в Java? Рассмотрим примеры:

int a; // создается целая переменная а;
int a = 5; // создается целая переменная а и ей присваивается значение 5;
char a = #c#; // создается символьная переменная а и ей присваивается символ с;
double a = 2.57; // создается double переменная а и ей присваивается 2.57;

Константы с плавающей точкой (например, 2.57) имеют по умолчанию тип double , поэтому если вы напишите:
float a = 2.57;
то получите ошибку компилятора. Исправить положение можно при помощи символа #F# дописанного перед точкой с запятой. Строка:
float a = 2.57F;
уже не вызовет нареканий компилятора. При присвоении переменной одного типа значения другого типа, вы должны явно указывать тип преобразования. Например:
float a = (float)(2.57 *2);

Вычисление логических выражений всегда происходит в управляющих конструкциях языка к которым относятся if , for , условный оператор ?: и while . if осуществляет ветвление в программе Java в зависимости от результата логического выражения. Например:
if ( логическое выражение ) {
выполняются эти строки;
. . .
}
else {
выполняются эти строки;
. . .
}
, что можно перевести как:
если ( логическое выражение правда ), то {
выполняются эти строки;
. . .
}
иначе {
выполняются эти строки;
. . .
}

При желании, можно опустить else { }. Тогда получится:
if ( логическое выражение ) {
выполняются эти строки;
. . .
}

Если между скобками {} находится всего одна строка, то скобки можно опустить. Тогда мы получим:
if ( логическое выражение ) выполняется эта строка;

Операторы if могут размещаться внутри других операторов if . Например:
если ( логическое выражение правда ), то {
выполняются эти строки;
. . .
если ( логическое выражение правда ), то {
выполняются эти строки;
. . .
}
}
иначе {
выполняются эти строки;
. . .
}

Отступы при написании вложенных операторов if необязательны, их используют для удобства чтения исходных текстов программ и это хороший тон. В Java существует сокращенная версия оператора if . Это условный оператор ?: , который используется для присваивания переменной одного из двух значений в зависимости от результата логического выражения. Например:
int a = bесли b=c, то a = 8. То же самое можно выразить при помощи оператора if :
if (b < c) {
a = 5;
}
else {
a = 8;
}
for и while v это операторы цикла. Они заставляют многократно повторять какое-то количество строк, которые вложены между скобками. Строки между скобками повторяются до тех пор, пока логическое выражение в for или while равно true . Пример оператора for :
for (int i=0; iвыполняются эти строки;
. . .
}

Это можно перевести как:
Для (целой переменной i равной 0; пока i меньше b; i приращается на 1 при каждом повторе) {
выполняются эти строки
. . .
}

Пример оператора while :
while ( i++ < b) {
выполняются эти строки;
. . .
}

Это можно перевести как:
пока (переменная i приращаемая на 1 при каждом повторе меньше b) {
выполняются эти строки;
. . .
}

Конструкции for и while едины в одном v перед выполнением тела цикла (строк между скобками) всегда проверяется логическое выражение на равенство true. Однако, существуют ситуации, когда тело цикла должно выполниться перед проверкой на true логического выражения. В этих случаях используют оператор do while. Он очень похож на while:
do {
выполняются эти строки;
. . .
} while ( i++ < b);

Это значит:
{
выполняются эти строки;
. . .
} пока (переменная i приращаемая на 1 при каждом повторе меньше b);
Если i меньше b, то строки кода между скобками выполняться всего один раз. Хочу обратить ваше внимание на конструкцию i++ . Это постфиксное приращение на 1, т. е. i вначале сравнивается с b , а затем приращается на 1. Существует еще префиксное приращение. Если мы напишем ++i < b , то i вначале будет приращаться на 1, а затем сравниваться с b. Как говорилось выше, для представления строк в языке Java используется ссылочный тип данных. Строки представляются при помощи класса String. Например:
String vasja = "Здесь был Вася";
String blank = "";

В первом случае, переменной vasja была присвоена строка "Здесь был Вася". Во втором случае переменной blank была присвоена пустая строка "".

Массивами называют последовательность однотипных элементов. Прелесть их в том, сто вы можете обращаться к любому элементу массива по индексу относительно начала массива. Нумерация элементов массива начинается с нуля. Массивы могут быть одномерными, двумерными, трехмерными и т. д. Двумерный массив можно представлять себе в виде плоской таблицы, где строки v одна размерность, а столбцы v другая. Трехмерный массив, соответственно, будет кубом и т.д. Массивы в языке Java, представляют собой ссылочный тип данных и для распределения памяти для них требуется оператор new. Примеры массивов:
int a[] = new int[10]; // целый массив a имеет 10 элементов.
a[9] = 5; // 5 присваивается 10 элементу массива a.
double a[] = new double[3]; // массив a имеет 3 элемента и состоит из элементов double.
long a[][] = new long[3][5]; // массив a имеет 3 строки по 5 элементов типа long.

С массивами в Java можно делать довольно сложные вещи. Например, можно определить многомерный массив с переменной размерностью:
int a[][] = new int [3][]; // массив a имеет 3 строк, размерность строк определяется после
int a[0] = new int[2]; // первая строка имеет размерность 2 элемента
int a[1] = new int[10]; // вторая строка имеет размерность 10 элементов
int a[2] = new int[5]; // третья строка имеет размерность 5 элементов

Если представить такой массив в виде плоской таблицы, то строки такой таблицы будут высовываться из-за первой строки, так как они имеют разное количество столбцов J. Обратите внимание на пример:
String info[][] = {
{"imagesource", "URL", "a directory"},
{"startup", "URL", "image displayed at start-up"} };

Здесь распределяется память под массив 2 на 3 элемента String и отсутствует оператор new. Происходит это потому, что конструкции типа "imagesource" и "image displayed at start-up", являются строчными константами и память под них распределяется неявно, т.е. без оператора new.

Заключение

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

Георгий Полетаев poletaev@kraz.ru



статьи
статьи
 / 
новости
новости
 / 
контакты
контакты