Вы находитесь на странице: 1из 37

ЛЕКЦИЯ 2

ОСНОВЫ
ПРОГРАММИРОВАНИЯ
НА JAVA
ИСТОРИЯ ВОЗНИКНОВЕНИЯ JAVA
•Java был задуман Джеймсом Гослингом, Патриком Ноутоном, Крисом
Картом, Эдом Франком и Майком Шериданом из компании Sun
Microsystems Inc. в 1991 г. Через 1,5 года была создана первая рабочая
версия, которая называлась Oak. В 1995 г. язык был переименован в Java.
•Первым побуждением для создания Java была потребность в независимом
от платформы языке для программирования бытовых электронных
устройств.
•Своим успехом язык Java обязан Internet. Когда Java уже сформировался,
появились Internet и всемирная паутина WWW, которым был необходим
независимый от платформы полнофункциональный язык
программирования. Это заставило создателей Java сосредоточиться не на
микропроцессорах, а на Internet-программировании.

2
ОБЛАСТИ ПРИМЕНЕНИЯ JAVA
Локальные консольные приложения.
Локальные приложения с графическим интерфейсом.
Разработка программных компонентов.
Работа с базами данных.
Internet-программирование на стороне клиента - апплеты.
Internet-программирование на стороне сервера - сервлеты.
Разработка масштабируемых серверных приложений уровня предприятия.

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

Java-приложения могут выполняться в любых операционных системах: системах уровня предприятия, таких, как Unix, Linux, OS/390,
Windows 2000, или HP-UX; операционных системах для настольных компьютеров, таких как MacOS, Windows или Linux; а также в
операционных системах для мобильных устройств, таких как PalmOS или Symbian's ЕРОС.

Технология Java является открытой и построена на внутриотраслевых стандартах для программного обеспечения. Любой желающий
может загрузить и изучать код Java-платформы.
3
ОСОБЕННОСТИ ЯЗЫКА
•Простой (нет указателей, освобождения памяти, перегрузки операций,
шаблонов, множественного наследования).
•Объектно-ориентированный, в Java даже нет глобальных переменных или
функций, есть только поля и методы классов.
•Архитектурно-нейтральный, т.е. не ориентирован на какую-то одну
аппаратную или программную архитектуру.
•Устойчивый (проверяет выход за границу массива, не только предоставляет
аппарат исключений, но и требует от программиста их обработки).
•Многопоточный, средства работы с потоками встроены в язык.
•Интерпретируемый, выполнение программы происходит путем интерпретации
частично откомпилированного кода.
•Распределенный (позволяет выполнять удаленные вызовы методов).
•Динамический (использует информацию о типах). 4
ОСОБЕННОСТИ ЯЗЫКА
Главной же особенностью Java является независимость программ от той
программно-аппаратной среды, в которой они будут выполняться. Это
достигается разделением процесса исполнения программы на два этапа:
1. На первом этапе (компиляция) исходный код переводится в
нормализованную форму - байт-код.
2. На втором этапе (интерпретация) байт-код мелкими порциями превращается
в инструкции процессора, и эти инструкции тут же выполняются.
Для каждой известной платформы существует свой интерпретатор байт-кода,
который называют виртуальной машиной Java - JVM (Java Virtual Machine).

5
JAVA DEVELOPMENT KIT (JDK)
Так называют инструментарий разработчика Java-приложений. Он состоит из
библиотек, которые может и должен использовать всякий программист, и набора
программ-утилит, таких как:
компилятор (javac),
интерпретатор (java),
отладчик (jdb),
архиватор (jar),
документатор (javadoc) и других.
В эволюции Java имеется несколько поворотных пунктов, которые можно
представить как различные версии JDK. Все это можно бесплатно загрузить с
сайта компании Sun Microsystems http://java.sun.com. Там имеются варианты JDK
для всех основных операционных систем.

1
ПРОСТЫЕ ТИПЫ ДАННЫХ
В Java есть две разновидности данных простые типы и ссылочные. Простые типы
языка сведены в таблицу:

Размер каждого типа определен в самом языке и не зависит от реализации.


7
ПРОСТЫЕ ТИПЫ ДАННЫХ
Логические значения
boolean не являются целыми и не могут быть преобразованы в числовой тип или из него.
Кодировка символов
Символы в Java являются 16-разрядными символами Unicode. Первые 256 символов
Unicode совместимы с кодировкой ISO8859-1.
Поскольку не все символы можно отобразить на экране, применяются Escape-
последовательности Unicode.
\uxxxx - где хххх - четыре 16-ичных цифры - код символа.
Применяются также Escape-последовательности в стиле С:
\ooo - трехзначное восьмеричное число, \t - символ табуляции, \n - перевод строки, \” –
кавычка, \\ - обратная косая черта.
Escape-последовательности Unicode могут находиться в любом месте программы, а не
только в строковых константах.
8
ПРОСТЫЕ ТИПЫ ДАННЫХ
Вещественные числа
Представлены в формате IEEE (Institute of Electrical and Electronics Engineers), который
для вещественного числа float отводит 1 бит на знак, 8 битов на порядок и 23 бита на
мантиссу.
Порядок смещен на -127, т.е. нуль означает 2 в -127-й степени, а мантисса заключена в
диапазоне от 1.0 до 2.0, причем старшая единица не записывается в разрядную сетку.
Такое представление дает диапазон чисел от 3.4Е-38 до 3.4Е+38.
Числа формата double хранятся аналогичным образом, но распределение битов между
порядком и мантиссой 11:52.
В результате выполнения операций над числами с плавающей точкой могут получиться
особые значения: плюс бесконечность; минус бесконечность; минус ноль; не число (NaN
- Not a Number).
Число NaN не сравнимо ни с чем, даже с самим собой.
При делении на ноль целых чисел генерируется исключение ArithmeticException, при
делении на ноль вещественных чисел исключение не возникает, а результат будет
равен плюс или минус бесконечности.
9
ОПЕРАЦИИ
Любая операция характеризуется приоритетом и ассоциативностью. Все операции
вырабатывают значение.
Приоритет определяет порядок выполнения операций в выражении, когда нет скобок.
Ассоциативность говорит, какая из двух рядом стоящих операций с равным
приоритетом выполняется раньше, левая или правая.

10
11
ОПЕРАЦИИ
Несколько замечаний относительно некоторых операций:
Деление целых чисел дает целый же результат: System.out.println(12/5); //
напечатает 2
Преобразование числовых типов выполняется неявно, если переводит более узкий тип в
более широкий (расширяющее преобразование типа). Противоположное сужающее
преобразование должно выполняться явно. Исключение составляет случай, когда
преобразуется небольшая целая константа к типу short, byte или char.
Операции деления нацело х / у и взятия остатка от деления х % у определены так,
чтобы выполнялось тождество (х / у) у + х % у = х.

12
КОММЕНТАРИИ
Java допускает комментарии в исходном коде программы:
многострочные в стиле языка С: /* Любое количество любых строк лишь бы
там не было сочетания звездочки и косой черты */
однострочные в стиле языка C++:
//все написанное до конца строки-комментарий
комментарии документатора:

/**Многострочный комментарий,
*который войдет
*в программный документ. */

13
СИМВОЛЫ
Для хранения символов в Java используется тип данных char.
Для представления символов типа char в Java используется кодировка в Юникод
(Unicode), определяющем полный набор международных символов на всех известных
языках мира. Для хранения этих символов требуется 16 бит, и поэтому в Java тип char
является 16-разрядным.
Диапазон допустимых значений этого типа составляет от 0 до 65536.
Отрицательных значений типа char не существует.
Стандартный набор символов, известный как код ASCII, содержит значения от 0 до 127,
а расширенный 8-разрядный набор символов ISO-Latin-1 - значения от 0 до 255.
Поскольку язык Jаvа предназначен для написания программ, которые можно применять
во всем мире, употребление в нем кодировки в Юникоде для представления символов
вполне обоснованно.
Пользоваться кодировкой в Юникоде для локализации программ на таких языках, как
английский, немецкий, испанский или французский, не совсем эффективно, поскольку
для представления символов из алфавита этих языков достаточно и 8 бит. Но это та цена,
которую приходится платить за переносимость программ в глобальном масштабе.
14
СИМВОЛЫ
Использование переменных типа char:
1.

Результат программы:
ch1 и ch2: X Y
15
СИМВОЛЫ
2.

Результат программы:
ch1 содержит Х
Ch1 теперь содержит Y
16
ПЕРЕМЕННЫЕ
Переменная служит основной единицей хранения данных в программе нa Java.
Переменная определяется в виде сочетания типа, идентификатора и необязательного
начального значения. Кроме того, у всех переменных имеется своя область действия,
которая определяет их доступность для других объектов и продолжительность
существования.
Объявление переменной
В Java все переменные должны быть объявлены до их использования. Основная форма
объявления переменных выглядит следующим образом:

где параметр
тип обозначает один из примитивных типов данных в Java, имя класса или интерфейса.
идентификатор - это имя переменной.
Любой переменной можно присвоить начальное значение (инициализировать ее) через
знак равенства. Инициализирующее выражение должно возвращать значение того же
самого (или совместимого) типа, что и у переменной.
17
ПЕРЕМЕННЫЕ
Примеры объявления переменных:

В языке Jаvа допускается наличие любого объявленного типа в каком угодно правильно
оформленном идентификаторе.

Динамическая инициализация
В Java допускается динамическая инициализация переменных с помощью любого
выражения, действительного в момент объявления переменной, в том числе вызовы
методов, другие переменные или константы: 18
ПЕРЕМЕННЫЕ
В качестве примера ниже приведена краткая программа, в которой длина гипотенузы
прямоугольного треугольника вычисляется по длине его катетов.

19
ОБЛАСТЬ И СРОК ДЕЙСТВИЯ ПЕРЕМЕННЫХ
В Java допускается объявление переменных в любом блоке кода.
Блок кода заключается в фигурные скобки, задавая тем самым областъ действия. Она
определяет, какие именно объекты доступны для других частей программы. Таким
образом, при открытии каждого нового блока кода создается новая область действия.
Область действия определяет также продолжительность существования этих
объектов.
Две основные области действия в Java определяются классом и методом, т.к. область
действия класса обладает рядом характерных особенностей и свойств, не
распространяющихся на область действия метода.
Область действия, определяемая методом, начинается с его открывающей фигурной
скобки. Но если у метода имеются параметры, то они также включаются в область
действия метода. Параметры методов действуют точно так же, как и любая другая
переменная в методе.

20
ОБЛАСТЬ И СРОК ДЕЙСТВИЯ ПЕРЕМЕННЫХ
Переменные, объявленные в области действия, не доступны из кода за пределами этой
области. Это обеспечивает переменной локальность и защиту от несанкционированного
доступа и/или внешних изменений. Т.е. правила функционирования области действия
составляют основу инкапсуляции.
Области действия могут быть вложенными. Так, вместе с каждым блоком кода создается
новая, вложенная область действия. При этом внешняя область действия включает в
себя внутреннюю область. Это означает, что объекты, объявленные во внешней области
действия, будут доступны для кода из внутренней области действия, но объекты,
объявленные во внутренней области действия, будут недоступны за ее пределами.
Переменные можно объявлять в любом месте блока кода, но они действительны
только после объявления.
Переменные создаются при входе в их область действия и уничтожаются при выходе из
нее. Следовательно, переменные, объявленные в теле метода, не будут хранить свои
значения в промежутках между последовательными обращениями к этому методу.
Срок действия переменной ограничивается ее областью действия. Если объявление
переменной включает в себя ее инициализацию, то инициализация переменной будет
повторяться при каждом вхождении в блок кода, где она объявлена. 2
ОБЛАСТЬ И СРОК ДЕЙСТВИЯ ПЕРЕМЕННЫХ

22
ОБЛАСТЬ И СРОК ДЕЙСТВИЯ ПЕРЕМЕННЫХ

23
ОБЛАСТЬ И СРОК ДЕЙСТВИЯ ПЕРЕМЕННЫХ
Во внутреннем блоке нельзя объявлять переменные с тем же именем, что и во
внешней области действия. Следующая программа ошибочна:

24
ПРЕОБРАЗОВАНИЕ И ПРИВЕДЕНИЕ ТИПОВ
Автоматическое преобразование типов в Java
Автоматическое преобразование типов выполняется, если удовлетворяются два условия:
• оба типа совместимы;
• длина целевого типа больше длины исходного типа.
При соблюдении этих условий выполняется расширяющее преобразование.
Приведение несовместимых типов
Чтобы выполнить преобразование двух несовместимых типов данных, нужно воспользоваться
приведением типов. Приведение - это явное преобразование типов.
Этот вид преобразования называется сужающим преобразованием, поскольку значение явно
сужается, чтобы уместиться в целевом типе данных.
Общая форма приведения типов имеет следующий вид:
(целевой_тип) значение
где параметр целевой_ тип обозначает тип, в который нужно преобразовать указанное
значение.
При присваивании значения с плавающей точкой переменной целочисленного типа
выполняется другой вид преобразования типов - усечение. Когда значение с плавающей
точкой присваивается переменной целочисленного типа, его дробная часть отбрасывается. 25
ПРЕОБРАЗОВАНИЕ И ПРИВЕДЕНИЕ ТИПОВ

//остаток от деления я 257 на 256 (диапазон допустимых значений типа byte)

//дробная часть отбрасывается


//и значение уменьшается до результата деления по модулю на 256 26
УПРАВЛЯЮЩИЕ КОНСТРУКЦИИ
Оператор if /else

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

Операторы while и do/while

27
УПРАВЛЯЮЩИЕ КОНСТРУКЦИИ

28
УПРАВЛЯЮЩИЕ КОНСТРУКЦИИ
Оператор for
Оператор цикла.

Смысл оператора передается следующим псевдокодом:

29
УПРАВЛЯЮЩИЕ КОНСТРУКЦИИ
Примеры циклов:

Операторы break и continue


Чтобы прекратить последовательность повторений любого цикла используется оператор
break.
Чтобы перейти к следующей итерации цикла, не завершая текущую используется
оператор continue. 30
УПРАВЛЯЮЩИЕ КОНСТРУКЦИИ
Примеры:
1. Цикл прекратится, когда х превысит 99

2. Второй десяток слагаемых в сумму не войдет

Операторы return
Обеспечивает возврат из вызываемой функции в вызывающую.

31
УПРАВЛЯЮЩИЕ КОНСТРУКЦИИ
Для работы с вложенными циклами имеется вариант этих операторов с меткой. Метка L
помечает блок кода, внутри которого располагаются операторы «break L;» или «continue
L;».
Оператор «break L;» передает управление оператору, следующему за помеченным
блоком.
Оператор «continue L;» продолжает помеченный цикл.
Пример. Применение оператора break для досрочного выхода из вложенных циклов.

32
МАССИВЫ
Ссылочные типы данных
Все типы, которые не являются простыми, называются ссылочными, т.к. в переменных
этих типов хранятся не сами значения, а только ссылки на них (ссылкой называется адрес
памяти).
Ссылочные типы Java делятся на три группы: массивы, классы, строки.
При работе со ссылочными типами нужно помнить следующее.
 Операторы "=" и "==" присваивают и сравнивают ссылки, а не значения.
 Значение простого типа не может быть преобразовано к ссылочному типу.
 Значение ссылочного типа не может быть преобразовано к простому типу.
 Специальное значение null представляет пустую ссылку.

Одномерные массивы
Чтобы воспользоваться массивом в программе, необходимо:
1. Определить ссылку на массив элементов заданного типа;
2. Разместить в памяти необходимое количество элементов.
После размещения в памяти элементы всегда инициализируются - по умолчанию или
при помощи списка инициализации. Количество элементов массива не может быть
изменено, но переменной можно присвоить ссылку на другой массив. 33
МАССИВЫ
Примеры объявления и размещения массивов:

34
МАССИВЫ
Размер массива хранится в поле length. Это единственное поле массива и оно - только
для чтения.
Пример. Заполнить массив значениями:

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

Многомерные массивы
Многомерный массив - это массив, элементами которого служат массивы меньшей
размерности, например, элементами двухмерного массива служат одномерные массивы.
Поскольку одномерный массив в Java представлен ссылкой, двухмерный массив является
массивом ссыпок на одномерные массивы. Это позволяет организовывать
“непрямоугольные" массивы.
35
МАССИВЫ
Пример. Объявление многомерных массивов:

В Java при объявлении многомерных массивов не обязательно задавать сразу все


размерности, можно только левые.
Многомерные массивы инициализируют при помощи вложенных списков
инициализации.
Пример. Объявление, размещение и инициализация «треугольного» массива:

Массивы-параметры и возвращаемые значения


Массивы могут быть параметрами функций и теми значениями, которые функции
возвращают.

36
МАССИВЫ
Пример. Определим функцию, которая принимает целый массив и возвращает другой
массив, который является инвертированным аргументом (в инвертированном массиве
элементы расположены в обратном порядке).

Анонимные массивы
При вызове методов и передаче им параметров часто применяют анонимные, т.е.
безымянные, массивы.
Пример. Вызовем функцию из предыдущего примера, дав ей анонимный массив в
качестве аргумента.

37