Платформа и язык программирования
[Link]
[Link] EPAM
EPAM Systems
Systems
• Объектная ориентированность - не ОО программа на Java
выглядит совсем не естественно, кроме того присутствует
богатая библиотека стандартных компонентов
• Переносимость - написанный байткод может
выполняться на любой платформе (Windows, Linux)
• Простота - основан на синтаксисе C++, но не использует
его сложности
• Безопасность - сборка мусора позволяет во многих
случаях избежать утечек памяти
• Многопоточность - поддержка «из коробки»
[Link] EPAM Systems
История
• Авторы: Джеймс Гослинг (James Gosling), Патрик Ноутон
(Patrick Naughton), Крис Варт (Chris Warth), Эд Франк (Ed
Frank), Майк Шеридан (Mike Sheridan), etc.
• 1991 – начало работы, первая версия – Oak
• 1995 – официальный релиз Java 1.0
• 1997 – Java 1.1
• 1999 – Java 1.2 (Java2)
• 2000 – Java2 1.3
• 2001 – Java2 1.4
• 2004 – Java 5.0
• 2006 – Java 6
• 2011 – Java 7
• 2014 – Java 8 ?
[Link] EPAM Systems
3
Платформа Java
• Платформа Java отличается тем, что
выполняется поверх других платформ и не
зависит от конкретной операционной системы
• Платформа Java состоит из двух компонентов:
– Виртуальная Java Машина (JVM)
– Интерфейсы прикладного программирования Java
(Java API)
• JVM – это основа платформы Java
• Существуют версии JVM для различных
платформ
[Link] EPAM Systems
4
Платформа Java
Java
Java
Enterprise CDC
Standard CLDC
Edition
Edition
Java Micro Edition Java Card
Язык Java
Java Virtual Machine KVM Card VM
[Link] EPAM Systems
5
Платформа Java
[Link] EPAM Systems
6
Особенности платформы
Свойства Достоинства Недостатки
Виртуальная машина Кроссплатформенность Скорость
Отсутствие прямой работы Уменьшение количества Скорость
с памятью ошибок
Сборка мусора Уменьшение количества Скорость
ошибок
Байткод Простота отладки, Проблема защиты кода,
рефлексия потеря скорости
JIT-компилятор Увеличение скорости
Стандартная библиотека Ускорение разработки,
уменьшение количества
кода
[Link] EPAM Systems
7
Процесс разработки программного обеспечения
«Исходники» «Байт-код»
Компилятор
(Source) (Byte-code)
(Java Compiler)
[Link] [Link]
Среда исполнения
Java (Java Runtime
Environment)
Виртуальная
Операционная «Код ОС»
машина Java (JVM)
система (OS) (Native code)
Приложение (Application)
[Link] EPAM Systems
8
Основы языка Java
• Hello, world!
• Переменные
• Операции
• Выражения и блоки
• Операторы управления
• Метод main
• Комментарии
[Link] EPAM Systems
9
Hello, world!
/**
* This is our first Java class.
*/
public class HelloWorld {
public static void main(String[] args) {
// Just printing of text "Hello, world!"
[Link]("Hello, world!");
}
}
[Link] EPAM Systems
10
Терминология
• Алфавит - набор допустимых символов
– Практически все символы Unicode
– Реально используют только ANSI символы
• Лексема (token) - неделимый элемент языка
– Отделяются пробелами и знаками препинания
• Идентификатор - лексема, обозначающая некоторый
объект, имеющий смысл
• Аналог слова в естественном языке
• Ключевое слово - идентификатор,
зарезервированный языком программирования
– Имеет некоторый специальный смысл
[Link] EPAM Systems
11
Переменные
• Переменная – объект программы, имеющий
имя, занимающий некоторый участок
памяти и хранящий некоторые данные
• У переменной есть
– Имя
– Тип
– Область видимости
тип имя = инициализатор;
[Link] EPAM Systems
12
Типы данных
int count = 1;
int count;
• Тип данных переменной определяет:
– какие могут храниться значения
– какие можно выполнять операции
• Примитивные типы предопределены
в языке и обозначается ключевым словом
[Link] EPAM Systems
13
Примитивные типы данных
Тип Описание По умолчанию
byte 8-битное знаковое целое число. Значения от -128 до 0
127 (включительно).
short 16-битное знаковое целое число. Значения от -32768 0
до 32767 (включительно).
int 32-битное знаковое целое число. Значения от - 0
2147483648 до 2147483647 (включительно)
long 64-битное знаковое целое число. Значения от 0L
-9223372036854775808 до 9223372036854775807
(включительно)
float 32-битное число с плавающей точкой, 0.0f
соответствующее IEEE 754.
double 64-битное число с плавающей точкой двойной 0.0
точности, соответствующее IEEE 754.
boolean Логический тип данных с двумя возможными false
значениями: true и false
char 16-битный символ Unicode ‘\u0000’
[Link] EPAM Systems
14
Ссылочные типы данных
• Остальные типы являются ссылочными
• Значение ссылочной переменной
– может быть null
– может ссылаться на объект в куче
• Ссылка может быть на новый созданный объект (с
помощью оператора new):
Object object = new Object();
• Или на уже существующий объект:
Object reference = object;
[Link] EPAM Systems
15
Типы данных
Типы данных
Примитивные Ссылочные
boolean char byte float Массивы
short double Классы
int Интерфейсы
long Перечисления
[Link] EPAM Systems
16
Именование переменных
• Имя переменной – • count
последовательность из • gearRatio Допустимо
латинских букв и цифр, • currentValue
начинающаяся с буквы
– Могут также встречаться
подчеркивания, знак $, • gr
Допустимо,
буквы других алфавитов • ses но
непонятно
• c_r
• Чувствительно к
регистру
• 1a
• s*s Не
допустимо
• Не должно совпадать с
• dd
ключевыми словами
[Link] EPAM Systems
17
Литералы (неименованные константы)
boolean result = true;
char capitalC = 'C';
int i = 100000;
long l = 1L;
int decVal = 26;
int octVal = 032;
int hexVal = 0x1a;
int binVal = 0b1010;
double d1 = 123.4;
double d2 = 1.234e2;
float f1 = 123.4f;
String s1 = "Hello, World!";
String s2 = "S\u00ED se\u00F1or";
[Link] EPAM Systems
18
Final переменные
Значение переменной примитивного типа,
объявленной с модификатором final, нельзя
изменить.
final int myConst = 1;
myConst = 2; // ОШИБКА
Если переменная ссылочного типа объявлена
как final, то нельзя изменить значение ссылки,
но можно изменить состояние объекта, на
который ссылается переменная.
[Link] EPAM Systems
19
Преобразование типов
Автоматическое Явное
• Два типа совместимы Формат:
• (target-type) value
• Целевой тип шире
Пример:
исходного
• int a;
• byte b;
• Выполняется • b = (byte) a;
автоматически
Усечение:
• byte → short → int → long • int a;
→ float → double • double b;
• a = (int) d;
[Link] EPAM Systems
20
Повышающие преобразования
char
byte short int long
float double
[Link] EPAM Systems
21
Массивы
• Массив – это контейнерный объект, содержащий
фиксированное количество значений одного типа
– Длина массива устанавливается при его создании (во время
выполнения)
– После создания длину массива изменить нельзя
• Элемент массива – это одно из значений в массиве, к
которому можно обратиться, используя его позицию внутри
массива - индекс элемента
– Нумерация элементов начинается с 0
[Link] EPAM Systems
22
Массивы
• Неинициализированная ссылка на массив
int[] array;
• Создание массива
int[] array = new int[10];
• Доступ к элементам
array[0] = 100;
[Link]("1st element: " + array[0]);
[Link] EPAM Systems
23
Массивы
• Инициализация при создании
int[] array = {100, 200, 300, 400, 500, 600};
• Длина массива
int size = [Link];
for (int i = 0; i < [Link]; i++) {
[Link](array[i]);
}
[Link] EPAM Systems
24
Массивы
• Массивы могут быть многомерными
String[][] names = {
{"Mr. ", "Mrs. ", "Ms. "},
{"Smith", "Jones"},
};
• Копирование массивов – это стандартная операция
public static void arraycopy(Object src,
int srcIndex,
Object dest,
int destIndex,
int length)
[Link] EPAM Systems
25
Перебор элементов массива
int[] array = {100, 200, 300, 400, 500, 600, 700};
for (int i = 0; i < [Link]; i++) {
[Link](array[i]);
}
for (int value : array) {
[Link](value);
}
[Link] EPAM Systems
26
Операции
Приоритет операций
постфиксные expr++ expr--
унарные ++expr --expr +expr -expr ~ !
мультипликативные * / %
аддитивные + -
сдвиговые << >> >>>
относительные < > <= >= instanceof
сравнения == !=
побитовое И (AND) &
побитовое исключающее ИЛИ (XOR) ^
побитовое включающее ИЛИ (OR) |
логическое И (AND) &&
логическое ИЛИ (OR) ||
тернарная ? :
присваивания = += -= *= /= %= &= ^= |=
<<= >>= >>>=
[Link] EPAM Systems
27
Операторы ветвления и цикла
Операторы, позволяющие изменять
последовательный порядок выполнения
программ (создавая циклы и организовывая
ветвления):
• операторы ветвления (if-then, if-then-else,
switch)
• операторы цикла (for, while, do-while)
• операторы перехода (break, continue, return)
[Link] EPAM Systems
28
Оператор if-then
if (условие) {
// операторы, выполняемые
// если условие истинно
}
if (isMoving) {
// Если велосипед движется
// уменьшить его скорость
currentSpeed--;
}
[Link] EPAM Systems
29
Оператор if-then-else
if (условие) {
// операторы, выполняемые
// если условие истинно
} else {
// операторы, выполняемые
// если условие ложно
}
if (isMoving) {
currentSpeed--;
} else {
[Link]("The bicycle "
+ "has already stopped!");
}
[Link] EPAM Systems
30
Оператор if-then-else
if (testscore >= 90) {
grade = 'A';
} else if (testscore >= 80) {
grade = 'B';
} else if (testscore >= 70) {
grade = 'C';
} else if (testscore >= 60) {
grade = 'D';
} else if (testscore >= 50) {
grade = 'E';
} else {
grade = 'F';
}
[Link] EPAM Systems
31
Оператор switch
switch (place) {
case 1:
medal = "Gold";
break;
case 2:
medal = "Silver";
break;
case 3:
medal = "Bronze";
break;
default:
medal = "No medal";
break;
}
[Link] EPAM Systems
32
Оператор ? : (Тернарная операция)
условие
? значение_если_истина
: значение_если_ложь
int max = x > y ? x : y;
if (x > y) {
max = x;
} else {
max = y;
}
int a = x > ((y != 0) ? y : 1)
? (y - 2 > 0) ? y - 2 : - (y - 2) : 0;
[Link] EPAM Systems
33
Цикл while
while (условие) {
// операторы тела цикла
}
int count = 0;
while (count < 10) {
[Link]("Count is: "
+ count);
count++;
}
[Link] EPAM Systems
34
Цикл do-while
do {
// операторы тела цикла
} while (условие);
int count = 0;
do {
[Link]("Count is: "
+ count);
count++;
} while (count <= 10);
[Link] EPAM Systems
35
Цикл for
for (инициализация;
условие;
изменение) {
// операторы тела цикла
}
for (int i = 0; i < 10; i++) {
[Link]("Count is: " + i);
}
[Link] EPAM Systems
36
Цикл for each
int[] numbers = {1, 2, 3, 4, 5,
6, 7, 8, 9, 10};
for (int item : numbers) {
[Link]("Count is: "
+ item);
}
[Link] EPAM Systems
37
Оператор break
int searchfor = 12;
int index = -1;
for (int i = 0; i < [Link]; i++) {
if (numbers[i] == searchfor) {
index = i;
break;
}
}
[Link] EPAM Systems
38
Оператор continue
int numPs = 0;
for (int i = 0; i < max; i++) {
// Игнорируем все не p
if ([Link](i) != 'p') {
continue;
}
// Выполняем обработку p
numPs++;
}
[Link] EPAM Systems
39
Метод main
• В Java выполнение приложений начинается с
метода main
public static void main(String[] args)
• В приложении может быть несколько
методов main (по одному на класс)
• Аргументы командной строки, указанные
при запуске приложения доступны через
переменную args.
[Link] EPAM Systems
40
Параметры командной строки
public static final void main(String[] args) {
for (String arg : args) {
[Link](arg);
}
}
[Link] EPAM Systems
41
Простой консольный ввод-вывод
public static final void main(String[] args) {
Scanner scanner = new Scanner([Link]);
int i = [Link]();
String text = [Link]();
[Link]("Integer: " + i);
[Link]("String: " + text);
[Link]("This is error stream");
[Link]();
}
[Link] EPAM Systems
42
Комментарии
/* text */
/** documentation */
// text
[Link] EPAM Systems
43
Классы и объекты
• Класс – описание нового ссылочного типа
– Содержит описание полей и методов
• Классы позволяют организовать приложение
как набор взаимодействующих объектов
• Объект (экземпляр) – переменная нового
ссылочного типа (класса)
– Поля характеризуют состояние объекта
– Методы обеспечивают поведение объекта
– Каждый объект уникален
[Link] EPAM Systems
44
Пример класса
Модификаторы Имя класса
public class Point {
private double x;
private double y; Поля
public double getX() {
return x;
}
public void setX(double x) {
this.x = x;
}
public double getY() { Методы
return y;
}
public void setY(double y) {
this.y = y;
}
}
[Link] EPAM Systems
45
Пример использования класса
Point point = new Point();
[Link](0.0);
Ошибка!
[Link](1.0);
point.x = 1.0; // Ошибка
[Link]("(" + [Link]() + ", "
+ [Link]() + ")");
[Link] EPAM Systems
46
Методы
Тип
Модификатор Список
возвращаемого Название
доступа параметров
значения
public double calculateAnswer(double wingSpan,
int numberOfEngines, double length,
double grossTons) throws SomeException {
// вычисления
}
Список
Тело метода исключений
[Link] EPAM Systems
47
Методы
• Название и список параметров составляют
сигнатуру метода
• Примеры названий
– run
– runFast
– getBackground
– getFinalData
– compareTo
– isEmpty
[Link] EPAM Systems
48
Перегрузка (Overloading) методов
• Могут существовать методы с одинаковым названием,
но разной сигнатурой
public static void print() {
[Link]("");
}
public static void print(int i) {
[Link](i);
}
public static void print(String text) {
[Link](text);
}
public static final void main(String[] args) {
print();
print(1);
print("Hello");
}
[Link] EPAM Systems
49
Конструкторы
• Конструктор по умолчанию
public Point() {
x = 0;
y = 0;
}
• Конструктор с параметрами
public Point(double x, double y) {
this.x = x;
this.y = y;
}
[Link] EPAM Systems
50
Передача параметров в методы
• Параметры в методы всегда передаются
по значению
– Изменения в методе примитивных параметров
не влияют на вызывающий код
– Изменения объекта, ссылка на который
передается в метод, будут доступны в
вызывающем коде
– Если изменить ссылочный параметр (настроить
ссылку на другой объект) , то это не скажется на
вызывающем коде
[Link] EPAM Systems
51
Методы с переменным числом параметров
• Определение метода
public double sum(double... values) {
double sum = 0.0;
for (double v : values) {
sum += v;
}
return sum;
}
• Вызов метода
sum();
sum(1.0);
sum(1.0, 2.0);
sum(1.0, 2.0, 3.0);
[Link] EPAM Systems
52
Оператор return
• В каждом методе, возвращающем
некоторое значение, должен быть хотя бы
один оператор возврата:
return выражение;
• Если типом возвращаемого значения
является void, то может присутствовать
такой оператор возврата:
return;
[Link] EPAM Systems
53
Завершение работы метода
• Метод возвращает управление в код,
которые его вызвал, если
– выполнены все операторы метода
– достигнут оператор return
– брошено исключение
[Link] EPAM Systems
54
Создание объектов
• Объявление переменной
• Инстанцирование (создание объекта)
• Инициализация
Point originOne = new Point(23, 94);
Rectangle rectOne = new Rectangle(originOne,
100, 200);
Rectangle rectTwo = new Rectangle(50, 100);
[Link] EPAM Systems
55
Использование объектов
• Обращение к полям и методам
– [Link]
– [Link](arguments);
– [Link]();
• Когда объект становится не нужным (на него
нет больше ссылок) он может быть собран
сборщиком мусора (garbage collector)
[Link] EPAM Systems
56
Сборщик мусора
• Не нужно явно удалять объекты
• Память, занятая неиспользуемыми объектами,
освобождается сборщиком мусора (garbage
collector)
• Сбор мусора происходит в фоновом режиме
– Нельзя точно сказать, когда именно будет
выполняться сборка
– Можно лишь рекомендовать запустить сборку
мусора ([Link]() или [Link]().gc())
[Link] EPAM Systems
57
Ключевое слово this
• this – это ссылка на объект, для которого вызывается
метод
• this определен только для нестатических методов
public Rectangle(int width, int height) {
this(0, 0, width, height);
}
public Rectangle(int x, int y,
int width, int height) {
this.x = x;
this.y = y;
[Link] = width;
[Link] = height;
}
[Link] EPAM Systems
58
Спецификатор static
• Статические поля
static int x;
MyClass.x = 5;
• Статические методы
static int method() { ... }
[Link]();
• Константы
static final int WIDTH = 800;
[Link]([Link]);
• Статический блок инициализации
static {
// операторы инициализации
}
[Link] EPAM Systems
59
Спецификаторы
abstract static final
Класс Нельзя Только у вложенных У класса не может
инстанцировать классов иметь наследников
Можно
наследоваться
Метод Не имеет тела Общий для всех Нельзя
Реализуется экземпляров класса переопределять
в наследниках (override)
в наследниках
Поле Не применим Общее для всех Константа
экземпляров класса В случае ссылок
можно изменять
объект, на который
она ссылается
[Link] EPAM Systems
60
Пакеты
• Пакет – это группа связанных типов с защитой
доступа и управлением пространством имен
• Основные задачи:
– Логическая структура проекта
– Избежание конфликтов имен
• Правило:
– название пакета совпадает с названием папки
– структуры папок и пакетов совпадают
[Link] EPAM Systems
61
Пакеты
• Объявление пакета
package [Link];
• Импорт пакета
import [Link];
import [Link];
import [Link];
import [Link];
• Правило для имен: доменное имя наоборот
– URL: [Link]
– Пакет: [Link]
[Link] EPAM Systems
62
Пакеты
Пакеты
Классы
в пакете
[Link] EPAM Systems
63
Пример класса
Пакет
package [Link];
Импорт классов
import [Link]; зависимостей
public class Person { Имя класса
private final String name;
private final Date birthDate;
Поля
public Person(String name, Date birthDate) {
[Link] = name;
[Link] = birthDate;
}
Конструктор(ы)
public String getName() {
return name;
}
public Date getBirthDate() {
return birthDate; Методы
}
}
[Link] EPAM Systems
64
СПАСИБО ЗА ВНИМАНИЕ!
ВОПРОСЫ?
Платформа и язык программирования
Author: Alexander Lotsmanov
E-mail: Alexander_Lotsmanov@[Link]
[Link] EPAM Systems
65