- •Введение в Java-технологии
- •If (условие) {
- •Массивы и строки
- •Import имя.Пакета1.ИмяКласса1;
- •Import имя.Пакета2.ИмяКласса2;
- •Import имя.Пакета.*;
- •If ("женат".EqualsIgnoreCase(state) ||
- •If ("неженат".EqualsIgnoreCase(state) ||
- •Потоковый ввод-вывод
- •Коллекции
- •Графический пользовательский интерфейс
- •События
- •JavaСтандартная библиотека Java включает в себя набор классов, реализующих богатый набор средств для разработки графических приложений, включая
- •Совокупность данных средств принято называть Java2d.
- •Потоки исполнения
Язык программирования Java
План
Введение в Java-технологии
Синтаксис языка Java
Массивы и строки
Объектно-ориентированное программирование
Исключения
Потоковый ввод-вывод
Коллекции
Графический пользовательский интерфейс
События
Java2D
Потоки исполнения
Введение в Java-технологии
Хронология развития языка Java
1991 Проект “Oak” – программирование устройств бытовой электроники
1994 Браузер “WebRunner” – интерактивные апплеты для гипертекстовых страниц
1995 Официальное объявление технологии Java
1997 Первые применения Java для разработки корпоративных информационных систем
. . .
Составляющие Java-технологии
Жизненный цикл Java-приложения
Особенности Java-технологии
1. Переносимость Программы, написанные на языке Java, после однократной трансляции в байт-код могут быть исполнены на любой платформе, для которой реализована виртуальная Java-машина.
Особенности Java-технологии
2. Безопасность Функционирование программы полностью определяется (и ограничивается) виртуальной Java-машиной. Отсутствуют указатели и другие механизмы для непосредственной работы с физической памятью и прочим аппаратным обеспечением компьютера.
Особенности Java-технологии
3. Надежность В языке Java отсутствуют механизмы, потенциально приводящие к ошибкам: арифметика указателей, неявное преобразование типов с потерей точности и т.п. Присутствует строгий контроль типов, обязательный контроль исключительных ситуаций. Многие логические ошибки обнаруживаются на этапе компиляции.
Особенности Java-технологии
4. Сборщик мусора Освобождение памяти при работе программы осуществляется автоматически с помощью «сборщика мусора».
(программировать проще и надежнее)
Особенности Java-технологии
5. Самодокументируемый код Имеется механизм автоматического генерирования документации на основе комментариев, размещенных в тексте программ.
Особенности Java-технологии
6. Многообразие типов приложений На языке Java возможно реализовать абсолютно разные по способу функционированию и сфере использования программы.
Типы Java-приложений
1. Приложения (application) обычные прикладные программы, которые запускаются пользователем и имеют доступ ко всем ресурсам компьютера наравне с любыми другими программами.
Типы Java-приложений
2. Мидлеты (midlet) специализированные программы, предназначенные для использования на мобильных устройствах. Структура и возможности мидлетов обусловлены техническими особенностями мобильных устройств.
Типы Java-приложений
3. Апплеты (applet) специализированные программы, обычно небольшого размера, запускаемые браузером внутри web-документа для вывода динамического содержимого и/или интерактивного взаимодействия с пользователем.
Типы Java-приложений
4. JSP-страницы (Java Server Pages) HTML-документы со вставками на языке Java, используемые web-серверами для анализа пользовательских запросов и динамического формирования web-документов на основе результатов обработки этих запросов.
Типы Java-приложений
5. Сервлеты (servlet) специализированные программы, функционирующие в рамках web-сервера и имеющие доступ к его ресурсам: файлам, базам данных и т.п.
Примитивные типы данных аналогичны простым типам, которые используются в других языках программирования. При реализации примитивных типов объектно-ориентированный подход не используется.
Ссылочные типы данных используются для работы с объектами.
Синтаксис языка Java
Язык Java имеет строгую типизацию, т.е. все переменные, константы, выражения имеют свой тип, который должен быть определен еще на этапе трансляции программ.
Тип данных определяет
– набор значений, которые может иметь переменная или которые могут получаться в результате вычисления выражения;
– набор операций, применимый к этим значениям;
– смысл этих операций.
Типы данных языка Java
Логический тип данных (boolean) используется для представления двух логических значений: «истина» или «ложно».
Символьный тип данных (char) используется для представления кодов символов в двухбайтовой кодировке Unicode.
Целочисленные типы данных отличаются диапазонами допустимых значений:
byte |
-27 |
27 – 1 |
short |
-215 |
215 – 1 |
int |
-231 |
231 – 1 |
long |
-263 |
263 – 1 |
Все целочисленные типы знаковые.
Вещественные типы данных отличаются точностью представления значений:
float – одинарная точность (7-8 цифр)
double – двойная точность (17 цифр)
Константы
Константами обычно называют представление значений типов данных в тексте программы.
Логические константы записываются с помощью ключевых слов true – «истина» false – «ложь»
Целочисленные константы могут быть записаны в трех системах счисления:
– десятичной (1, 10, 100);
– восьмеричной (01, 010, 0100);
– шестнадцатеричной (0x1, 0x10, 0x100).
По умолчанию целочисленным константам сопоставляется тип int.
При необходимости использовать константы типа long, следует указывать суффикс типа данных ‘L’.
Например: 2147483648L 0xABCDEFL
Вещественные константы могут быть записаны в десятичной или шестнадцатеричной системах счисления.
Признаком десятичной вещественной константы служит:
– десятичный разделитель ‘.’;
– экспоненциальная часть, начинающаяся с ‘E’;
– суффикс типа данных – ‘F’ (float) или ‘D’ (double).
Если суффикс типа данных явно не указан, то используется тип double.
При записи вещественной константы в шестнадцатеричной системе счисления обязательно должна присутствовать экспоненциальная часть, начинающаяся с ‘P’, которая указывает на степень двойки.
Например: 0x3P-5 → 3 ∙ 2-5 0xB.8P10 → 11.5 ∙ 210.
Символьные константы представляют собой отдельные символы, записанные в одиночных кавычках (апострофах).
Значением символьной константы является целое число от 0 до 65535 – код символа в кодировке Unicode.
Непечатные и специальные символы могут быть представлены с помощью:
– escape-последовательностей, например, '\n' (допускаются значения '\\', '\'', '\"', '\b', '\f', '\n', '\r', '\t');
– кода символа, записанного в восьмеричной системе счисления, например, '\100' (допускаются значения от \000 до \377);
– кода символа, записанного в шестнадцатеричной системе счисления, например, '\u0020' (допускаются значения от '\u0000' до '\uFFFF').
Строковые константы записываются в двойных кавычках и могут содержать как печатные символы, так и символы, задаваемые escape-последовательностями или с помощью кода.
Внутреннее представление строк использует кодировку Unicode и не зависит от программно-аппаратной платформы.
Особенностью строковых констант является то, что они являются записью значений ссылочного типа данных String, т.е. фактически представляют собой ссылки на автоматически создаваемые объекты этого типа.
Специальная константа – пустая ссылка null – совместима с переменными любого ссылочного типа и обозначает отсутствие ссылки на объект.
Операторы
Операторами обычно называют неделимую последовательность символов, используемую для обозначения операции, которая выполняется над данными.
Арифметические операторы применяются к значениям числовых типов данных (в том числе и char).
– операторы инкремента ++ и декремента – –;
– аддитивные операторы + и –;
– мультипликативные операторы *, / и %;
– побитовые операторы ~ («не»), & («и»), | («или»), ^ («исключающее или»);
– операторы битового сдвига <<, >>, >>>.
Особенности выполнения операций:
/ , % действие зависит от типа операндов
>> знаковый сдвиг
>>> беззнаковый сдвиг
Операторы отношения <, >, = =, <=, >=, != позволяют сравнивать значения двух совместимых между собой примитивных типов данных. Операторы отношения = = и != могут применяться к значениям ссылочных типов данных. Результатом операций отношения является значение логического типа.
Логические операторы применяются к значениям логического типа и позволяют выполнить над ними основные логические операции.
– оператор отрицания !;
– операторы полных логических операций & («и»), | («или»), ^ («исключающее или»);
– операторы сокращенных логических операций && («и»), || («или»).
Результатом логических операций является значение логического типа.
Особенность выполнения сокращенных логических операций:
если по левому операнду можно судить об истинности всего выражения, то правый операнд не вычисляется.
Например:
(x==y) || (x==–y)
(n!=0) && (m/n>0)
Условный оператор ? : позволяет вычислить значение одного из двух выражений в зависимости от истинности некоторого условия.
Например: a>b ? a : b
Операторы присваивания позволяют менять значение переменных.
Оператор простого присваивания применяется к переменным любого типа:
a = b;
Операторы составного присваивания позволяют изменить значение числовой переменной, выполнив над ней одну из 11 бинарных арифметических операций
a += b;
Переменные
Переменной называют программный объект (не в смысле ООП), имеющий имя и значение, которое может быть получено и изменено программой.
Синтаксис объявления переменных
[ final ] тип имя [ = значение ]
В зависимости от места объявления переменных различают:
– формальные параметры – объявляются в заголовке метода;
– локальные переменные – объявляются в любом месте внутри тела метода;
(глобальные переменные в языке Java отсутствуют!)
Область видимости переменной простирается от места объявления переменной до конца блока, в котором была объявлена переменная
{
// . . .
int x;
// . . . область
// . . . видимости
// . . . переменной
}
В языке Java не разрешается повторно использовать имена переменных внутри вложенных блоков:
{
// . . .
int x;
// . . .
{
// . . .
double x; // ошибка!
// . . .
}
// . . .
}
Если при объявлении переменной был использован модификатор final, то значение такой переменной изменить нельзя.
final int x;
// . . .
x=18; // ошибка!
До первого использования переменным должно быть присвоено значение.
Переменным с модификатором final значение должно быть присвоено при объявлении.
int x;
x=5;
final int y=6;
Выражения
Выражениями обычно называют конструкцию языка программирования, определяющую способ вычисления некоторого значения с помощью одного или нескольких операндов.
Порядок вычисления выражения, содержащего несколько операций, определяется:
– по приоритету операций: b*b – 4*a*c
– с помощью скобок: b*(b – 4)*a*c
– по ассоциативности операций a+b+c a=b=c
– по форме записи (префиксная или постфиксная): a – b++ a – ++b
Приоритеты операций (от старшего к младшему):
– операции инкремента и декремента;
– мультипликативные операции;
– аддитивные операции;
. . .
– операции отношения;
. . .
– логические операции;
. . .
– операции присваивания.
При вычислении выражений часто происходит неявное преобразование типа операндов:
1. Операнды типа byte, short, char перед выполнением операции всегда приводятся к типу int.
byte a=10; byte b=20; int c=a+b;
2. Если в одной операции смешиваются операнды разных типов, то тип операнда с меньшей точностью приводится к типу операнда с большей точностью:
int ® long int, long ® float int, long, float ® double
3. При присваивании тип значения справа приводится к типу переменной слева (если при этом не происходит потери точности):
double c = 16 / 5;
но
int a = 15.0 / 3.0; // ошибка
В выражениях можно использовать явное преобразование типа операндов:
byte a=10; byte b=20; byte c=(byte)(a+b);
int Summa, Kolichestvo; . . . double Srednee=(double)Summa/Kolichestvo;
int c=(int)(15.0/3.0);
Математические функции и константы
В языке Java математические функции (37 шт.) и константы (2 шт.) доступны посредством объекта Math.
Math.E – число e
Math.PI – число p
Большинство функций соответствуют языку C, например:
Math.abs(x) – модуль числа
Math.sqrt(x) – квадратный корень из числа
и т.д.
Имеются функции для часто выполняемых операций, например:
Math.min(x,y) – минимум из двух чисел
Math.max(x,y) – максимум из двух чисел
Math.hypot(x,y) – гипотенуза прямоугольного треугольника с катетами {x,y}
Math.toRadians(x) – преобразовать из градусов в радианы
Math.toDegrees(x) – преобразовать из радианов в градусы
Структура простейшего Java-приложения
public class HelloWorld {
public static void main(String arg[]) {
System.out.println("Hello, World!");
}
}
Структурные операторы
Язык программирования Java имеет полный набор структурных операторов.
Составной оператор { }
Составной оператор предназначен для логического объединения нескольких операторов. Чаще всего составной оператор используется в других структурных операторах, в которых по правилам языка допускается только один оператор.
Иногда составные операторы применяются для ограничения области видимости переменных.
Оператор ветвления
– краткая форма записи if (условие) оператор;
– полная форма записи if (условие) оператор1; else operator2;
В качестве условия должно выступать логическое (boolean) выражение.
В качестве операторов могут быть использованы составные операторы.
В соответствии с «Code Conventions for the Java Programming Language» рекомендуется оформлять операторы ветвления следующим образом: