Платформа и язык программирования
Что такое Java?
История
Платформа Java
Платформа Java
Платформа Java
Особенности платформы
Процесс разработки программного обеспечения
Основы языка Java
Hello, world!
Терминология
Переменные
Типы данных
Примитивные типы данных
Ссылочные типы данных
Типы данных
Именование переменных
Литералы (неименованные константы)
Final переменные
Преобразование типов
Повышающие преобразования
Массивы
Массивы
Массивы
Массивы
Перебор элементов массива
Операции
Операторы ветвления и цикла
Оператор if-then
Оператор if-then-else
Оператор if-then-else
Оператор switch
Оператор ? : (Тернарная операция)
Цикл while
Цикл do-while
Цикл for
Цикл for each
Оператор break
Оператор continue
Метод main
Параметры командной строки
Простой консольный ввод-вывод
Комментарии
Классы и объекты
Пример класса
Пример использования класса
Методы
Методы
Перегрузка (Overloading) методов
Конструкторы
Передача параметров в методы
Методы с переменным числом параметров
Оператор return
Завершение работы метода
Создание объектов
Использование объектов
Сборщик мусора
Ключевое слово this
Спецификатор static
Спецификаторы
Пакеты
Пакеты
Пакеты
Пример класса
952.44K
Категория: ПрограммированиеПрограммирование

Платформа и язык программирования Java

1. Платформа и язык программирования

Java for autotesters
www.epam.com
www.epam.com
EPAM
EPAM Systems
Systems

2. Что такое Java?

• Java - это платформа и язык
программирования
• Основные особенности:
– Объектная ориентированность
– Переносимость
– Простота
– Безопасность
– Поддержка многопоточности
www.epam.com
EPAM Systems
2

3. История

• Авторы: Джеймс Гослинг (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 ?
www.epam.com
EPAM Systems
3

4. Платформа Java

• Платформа Java отличается тем, что выполняется
поверх других платформ и не зависит от
конкретной операционной системы
• Платформа Java состоит из двух компонентов:
– Виртуальная Java Машина (JVM)
– Интерфейсы прикладного программирования Java
(Java API)
• JVM – это основа платформы Java
• Существуют версии JVM для различных платформ
www.epam.com
EPAM Systems
4

5. Платформа Java

Java
Enterprise
Edition
Java
Standard
Edition
CDC
CLDC
Java Micro Edition
Java Card
Язык Java
Java Virtual Machine
www.epam.com
KVM
Card VM
EPAM Systems
5

6. Платформа Java

www.epam.com
EPAM Systems
6

7. Особенности платформы

Свойства
Достоинства
Недостатки
Виртуальная машина
Кроссплатформенность
Скорость
Отсутствие прямой работы
с памятью
Уменьшение количества
ошибок
Скорость
Сборка мусора
Уменьшение количества
ошибок
Скорость
Байткод
Простота отладки,
рефлексия
Проблема защиты кода,
потеря скорости
JIT-компилятор
Увеличение скорости
Стандартная библиотека
Ускорение разработки,
уменьшение количества
кода
www.epam.com
EPAM Systems
7

8. Процесс разработки программного обеспечения

«Исходники»
(Source)
App.java
Компилятор
(Java Compiler)
«Байт-код»
(Byte-code)
App.class
Среда исполнения
Java (Java Runtime
Environment)
Операционная
система (OS)
«Код ОС»
(Native code)
Виртуальная
машина Java (JVM)
Приложение (Application)
www.epam.com
EPAM Systems
8

9. Основы языка Java


Hello, world!
Переменные
Операции
Выражения и блоки
Операторы управления
Метод main
Комментарии
www.epam.com
EPAM Systems
9

10. Hello, world!

/**
* This is our first Java class.
*/
public class HelloWorld {
public static void main(String[] args) {
// Just printing of text "Hello, world!"
System.out.println("Hello, world!");
}
}
www.epam.com
EPAM Systems
10

11. Терминология

• Алфавит - набор допустимых символов
– Практически все символы Unicode
– Реально используют только ANSI символы
• Лексема (token) - неделимый элемент языка
– Отделяются пробелами и знаками препинания
• Идентификатор - лексема, обозначающая некоторый объект,
имеющий смысл
• Аналог слова в естественном языке
• Ключевое слово - идентификатор, зарезервированный языком
программирования
– Имеет некоторый специальный смысл
www.epam.com
EPAM Systems
11

12. Переменные

• Переменная – объект программы, имеющий
имя, занимающий некоторый участок
памяти и хранящий некоторые данные
• У переменной есть
– Имя
– Тип
– Область видимости
тип имя = инициализатор;
www.epam.com
EPAM Systems
12

13. Типы данных

int
int
int
int
count
count = 1;
count;
count;
• Тип данных переменной определяет:
– какие могут храниться значения
– какие можно выполнять операции
• Примитивные типы предопределены
в языке и обозначается ключевым словом
www.epam.com
EPAM Systems
13

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

Тип
Описание
По умолчанию
byte
8-битное знаковое целое число. Значения от -128 до
127 (включительно).
0
short
16-битное знаковое целое число. Значения от -32768
до 32767 (включительно).
0
int
32-битное знаковое целое число. Значения от
-2147483648 до 2147483647 (включительно)
0
long
64-битное знаковое целое число. Значения от
-9223372036854775808 до 9223372036854775807
(включительно)
0L
float
32-битное число с плавающей точкой, соответствующее 0.0f
IEEE 754.
double
64-битное число с плавающей точкой двойной
точности, соответствующее IEEE 754.
0.0
boolean
Логический тип данных с двумя возможными
значениями: true и false
false
char
16-битный символ Unicode
‘\u0000’
www.epam.com
EPAM Systems
14

15. Ссылочные типы данных

• Остальные типы являются ссылочными
• Значение ссылочной переменной
– может быть null
– может ссылаться на объект в куче
• Ссылка может быть на новый созданный объект (с
помощью оператора new):
Object
Object object
object == new
new Object();
Object();
• Или на уже существующий объект:
Object
Object reference
reference == object;
object;
www.epam.com
EPAM Systems
15

16. Типы данных

Типы данных
Примитивные
boolean
www.epam.com
char
Ссылочные
byte
float
Массивы
short
double
Классы
int
Интерфейсы
long
Перечисления
EPAM Systems
16

17. Именование переменных

• Имя переменной –
последовательность из
латинских букв и цифр,
начинающаяся с буквы
– Могут также встречаться
подчеркивания, знак $,
буквы других алфавитов
• Чувствительно к
регистру
• Не должно совпадать с
ключевыми словами
www.epam.com
• count
• gearRatio
• currentValue
• gr
• ses
• c_r
• 1a
• s*s
• dd
Допустимо
Допустимо,
но
непонятно
Не
допустимо
EPAM Systems
17

18. Литералы (неименованные константы)

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";
www.epam.com
EPAM Systems
18

19. Final переменные

Значение переменной примитивного типа,
объявленной с модификатором final, нельзя
изменить.
final int myConst = 1;
myConst = 2; // ОШИБКА
Если переменная ссылочного типа объявлена
как final, то нельзя изменить значение ссылки,
но можно изменить состояние объекта, на
который ссылается переменная.
www.epam.com
EPAM Systems
19

20. Преобразование типов

Автоматическое
Явное
• Два типа совместимы
Формат:
• (target-type) value
• Целевой тип шире
исходного
• Выполняется
автоматически
• byte short int long float
double
www.epam.com
Пример:
• int a;
• byte b;
• b = (byte) a;
Усечение:
• int a;
• double b;
• a = (int) d;
EPAM Systems
20

21. Повышающие преобразования

char
byte
www.epam.com
short
int
long
float
double
EPAM Systems
21

22. Массивы

• Массив – это контейнерный объект, содержащий
фиксированное количество значений одного типа
– Длина массива устанавливается при его создании (во время
выполнения)
– После создания длину массива изменить нельзя
• Элемент массива – это одно из значений в массиве, к
которому можно обратиться, используя его позицию внутри
массива - индекс элемента
– Нумерация элементов начинается с 0
www.epam.com
EPAM Systems
22

23. Массивы

• Неинициализированная ссылка на массив
int[] array;
array;
• Создание массива
int[] array = new int[10];
• Доступ к элементам
array[0]
array[0] == 100;
100;
System.out.println("1st
System.out.println("1st element:
element: "" ++ array[0]);
array[0]);
www.epam.com
EPAM Systems
23

24. Массивы

• Инициализация при создании
int[]
int[] array
array == {100,
{100, 200,
200, 300,
300, 400,
400, 500,
500, 600};
600};
• Длина массива
int
int size
size == array.length;
array.length;
for
for (int
(int ii == 0;
0; ii << array.length;
array.length; i++)
i++) {{
System.out.println(array[i]);
System.out.println(array[i]);
}}
www.epam.com
EPAM Systems
24

25. Массивы

• Массивы могут быть многомерными
String[][] names
names == {{
{"Mr. ",
", "Mrs.
"Mrs. ",
", "Ms.
"Ms. "},
"},
{"Smith",
{"Smith", "Jones"},
"Jones"},
};
• Копирование массивов – это стандартная операция
public static void arraycopy(Object src,
int srcIndex,
Object dest,
int destIndex,
int length)
www.epam.com
EPAM Systems
25

26. Перебор элементов массива

int[]
int[] array
array == {100,
{100, 200,
200, 300,
300, 400,
400, 500,
500, 600,
600, 700};
700};
for
for (int
(int ii == 0;
0; ii << array.length;
array.length; i++)
i++) {{
System.out.println(array[i]);
System.out.println(array[i]);
}}
for
for (int
(int value
value :: array)
array) {{
System.out.println(value);
System.out.println(value);
}}
www.epam.com
EPAM Systems
26

27. Операции

Приоритет операций
expr++ expr-постфиксные
++expr --expr +expr -expr
унарные
* / %
мультипликативные
+ аддитивные
<< >> >>>
сдвиговые
< > <= >= instanceof
относительные
== !=
сравнения
&
побитовое И (AND)
побитовое исключающее ИЛИ (XOR) ^
побитовое включающее ИЛИ (OR)
логическое И (AND)
логическое ИЛИ (OR)
тернарная
присваивания
www.epam.com
|
&&
||
? :
= += -= *= /=
<<= >>= >>>=
%=
&=
~
^=
!
|=
EPAM Systems
27

28. Операторы ветвления и цикла

Операторы, позволяющие изменять
последовательный порядок выполнения
программ (создавая циклы и организовывая
ветвления):
• операторы ветвления (if-then, if-then-else,
switch)
• операторы цикла (for, while, do-while)
• операторы перехода (break, continue, return)
www.epam.com
EPAM Systems
28

29. Оператор if-then

if (условие)
(условие) {
//
// операторы,
операторы, выполняемые
выполняемые
//
// если
если условие
условие истинно
истинно
}
if (isMoving)
(isMoving) {
//
// Если
Если велосипед
велосипед движется
движется
//
// уменьшить
уменьшить его
его скорость
скорость
currentSpeed--;
currentSpeed--;
}
www.epam.com
EPAM Systems
29

30. Оператор if-then-else

if
if (условие)
(условие) {{
//
// операторы,
операторы, выполняемые
выполняемые
//
// если
если условие
условие истинно
истинно
}} else
else {{
//
// операторы,
операторы, выполняемые
выполняемые
//
// если
если условие
условие ложно
ложно
}}
if
if (isMoving)
(isMoving) {{
currentSpeed--;
currentSpeed--;
}} else
else {{
System.err.println("The
System.err.println("The bicycle
bicycle ""
++ "has
"has already
already stopped!");
stopped!");
}}
www.epam.com
EPAM Systems
30

31. Оператор if-then-else

if (testscore >= 90)
grade = 'A';
} else if (testscore
grade = 'B';
} else if (testscore
grade = 'C';
} else if (testscore
grade = 'D';
} else if (testscore
grade = 'E';
} else {
grade = 'F';
}
www.epam.com
{
>= 80) {
>= 70) {
>= 60) {
>= 50) {
EPAM Systems
31

32. Оператор switch

switch
switch (place)
(place) {{
case
case 1:
1:
medal
medal == "Gold";
"Gold";
break;
break;
case
case 2:
2:
medal
medal == "Silver";
"Silver";
break;
break;
case
case 3:
3:
medal
medal == "Bronze";
"Bronze";
break;
break;
default:
default:
medal
medal == "No
"No medal";
medal";
break;
break;
}}
www.epam.com
EPAM Systems
32

33. Оператор ? : (Тернарная операция)

условие
? значение_если_истина
значение_если_истина
: значение_если_ложь
значение_если_ложь
int
int max
max == xx >> yy ?? xx :: y;
y;
if
if (x
(x >> y)
y) {{
max
max == x;
x;
}} else
else {{
max
max == y;
y;
}}
int
int aa == xx >> ((y
((y !=
!= 0)
0) ?? yy :: 1)
1)
?? (y
(y -- 22 >> 0)
0) ?? yy -- 22 :: -- (y
(y -- 2)
2) :: 0;
0;
www.epam.com
EPAM Systems
33

34. Цикл while

while (условие)
(условие) {{
//
// операторы
операторы тела
тела цикла
цикла
}
int count
count == 0;
0;
while (count
(count << 10)
10) {{
System.out.println("Count
System.out.println("Count is:
is: ""
+ count);
count);
count++;
count++;
}
www.epam.com
EPAM Systems
34

35. Цикл do-while

do {{
//
// операторы
операторы тела
тела цикла
цикла
} while (условие);
(условие);
int count
count == 0;
0;
do {{
System.out.println("Count
System.out.println("Count is:
is: ""
+ count);
count);
count++;
count++;
} while (count
(count <=
<= 10);
10);
www.epam.com
EPAM Systems
35

36. Цикл for

for (инициализация;
(инициализация;
условие;
условие;
изменение)
изменение) {{
//
// операторы
операторы тела
тела цикла
цикла
}
for
for (int
(int ii == 0;
0; ii << 10;
10; i++)
i++) {{
System.out.println("Count
System.out.println("Count is:
is: "" ++ i);
i);
}}
www.epam.com
EPAM Systems
36

37. Цикл for each

int[] numbers = {1, 2,
6, 7,
3,
8,
4,
9,
5,
10};
for (int item : numbers) {
System.out.println("Count is: "
+ item);
}
www.epam.com
EPAM Systems
37

38. Оператор break

int
int
searchfor = 12;
index = -1;
for (int i = 0; i < numbers.length; i++) {
if (numbers[i] == searchfor) {
index = i;
break;
}
}
www.epam.com
EPAM Systems
38

39. Оператор continue

int
for
numPs = 0;
(int i = 0; i < max; i++) {
// Игнорируем все не p
if (searchMe.charAt(i) != 'p') {
continue;
}
// Выполняем обработку p
numPs++;
}
www.epam.com
EPAM Systems
39

40. Метод main

• В Java выполнение приложений начинается с
метода main
public
public static
static void main(String[]
main(String[] args)
args)
• В приложении может быть несколько
методов main (по одному на класс)
• Аргументы командной строки, указанные
при запуске приложения доступны через
переменную args.
www.epam.com
EPAM Systems
40

41. Параметры командной строки

public static final void main(String[] args) {
for (String arg : args) {
System.out.println(arg);
}
}
www.epam.com
EPAM Systems
41

42. Простой консольный ввод-вывод

public
public static
static final
final
Scanner
Scanner scanner
scanner
void
void main(String[]
main(String[] args)
args) {{
== new
new Scanner(System.in);
Scanner(System.in);
int
int ii == scanner.nextInt();
scanner.nextInt();
String
String text
text == scanner.next();
scanner.next();
System.out.println("Integer:
System.out.println("Integer: "" ++ i);
i);
System.out.println("String:
System.out.println("String: "" ++ text);
text);
System.err.println("This
System.err.println("This is
is error
error stream");
stream");
scanner.close();
scanner.close();
}}
www.epam.com
EPAM Systems
42

43. Комментарии

/* text */
/** documentation */
// text
www.epam.com
EPAM Systems
43

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

• Класс – описание нового ссылочного типа
– Содержит описание полей и методов
• Классы позволяют организовать приложение как
набор взаимодействующих объектов
• Объект (экземпляр) – переменная нового
ссылочного типа (класса)
– Поля характеризуют состояние объекта
– Методы обеспечивают поведение объекта
– Каждый объект уникален
www.epam.com
EPAM Systems
44

45. Пример класса

Модификаторы
public
public class
class Point
Point
private
private double
double
private
private double
double
{{
x;
x;
y;
y;
public
public double
double getX()
getX() {{
return
return x;
x;
}}
public
public void
void setX(double
setX(double x)
x) {{
this.x
this.x == x;
x;
}}
public
public double
double getY()
getY() {{
return
return y;
y;
}}
public
public void
void setY(double
setY(double y)
y) {{
this.y
this.y == y;
y;
}}
Имя класса
Поля
Методы
}}
www.epam.com
EPAM Systems
45

46. Пример использования класса

Point point = new Point();
point.setX(0.0);
Ошибка!
point.setY(1.0);
point.x = 1.0; // Ошибка
System.out.println("(" + point.getX() + ", "
+ point.getY() + ")");
www.epam.com
EPAM Systems
46

47. Методы

Модификатор
доступа
Тип
возвращаемого
значения
Название
Список
параметров
public double calculateAnswer(double wingSpan,
int numberOfEngines, double length,
double grossTons) throws SomeException {
// вычисления
}
Тело метода
www.epam.com
Список
исключений
EPAM Systems
47

48. Методы

• Название и список параметров составляют
сигнатуру метода
• Примеры названий
– run
– runFast
– getBackground
– getFinalData
– compareTo
– isEmpty
www.epam.com
EPAM Systems
48

49. Перегрузка (Overloading) методов

• Могут существовать методы с одинаковым названием,
но разной сигнатурой
public
public static
static void
void print()
print() {{
System.out.println("");
System.out.println("");
}}
public
public static
static void
void print(int
print(int i)
i) {{
System.out.println(i);
System.out.println(i);
}}
public
public static
static void
void print(String
print(String text)
text) {{
System.out.println(text);
System.out.println(text);
}}
public
public static
static final
final void
void main(String[]
main(String[] args)
args) {{
print();
print();
print(1);
print(1);
print("Hello");
print("Hello");
}}
www.epam.com
EPAM Systems
49

50. Конструкторы

• Конструктор по умолчанию
public Point() {
x = 0;
y = 0;
}
• Конструктор с параметрами
public Point(double x, double y) {
this.x = x;
this.y = y;
}
www.epam.com
EPAM Systems
50

51. Передача параметров в методы

• Параметры в методы всегда передаются
по значению
– Изменения в методе примитивных параметров не
влияют на вызывающий код
– Изменения объекта, ссылка на который передается
в метод, будут доступны в вызывающем коде
– Если изменить ссылочный параметр (настроить
ссылку на другой объект) , то это не скажется на
вызывающем коде
www.epam.com
EPAM Systems
51

52. Методы с переменным числом параметров

• Определение метода
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);
www.epam.com
EPAM Systems
52

53. Оператор return

• В каждом методе, возвращающем
некоторое значение, должен быть хотя бы
один оператор возврата:
return выражение;
• Если типом возвращаемого значения
является void, то может присутствовать
такой оператор возврата:
return;
www.epam.com
EPAM Systems
53

54. Завершение работы метода

• Метод возвращает управление в код,
которые его вызвал, если
– выполнены все операторы метода
– достигнут оператор return
– брошено исключение
www.epam.com
EPAM Systems
54

55. Создание объектов

• Объявление переменной
• Инстанцирование (создание объекта)
• Инициализация
Point originOne = new Point(23, 94);
Rectangle rectOne = new Rectangle(originOne,
100, 200);
Rectangle rectTwo = new Rectangle(50, 100);
www.epam.com
EPAM Systems
55

56. Использование объектов

• Обращение к полям и методам
– objectReference.fieldName
– objectReference.methodName(arguments);
– objectReference.methodName();
• Когда объект становится не нужным (на него
нет больше ссылок) он может быть собран
сборщиком мусора (garbage collector)
www.epam.com
EPAM Systems
56

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

• Не нужно явно удалять объекты
• Память, занятая неиспользуемыми объектами,
освобождается сборщиком мусора (garbage
collector)
• Сбор мусора происходит в фоновом режиме
– Нельзя точно сказать, когда именно будет
выполняться сборка
– Можно лишь рекомендовать запустить сборку
мусора (System.gc() или Runtime.getRuntime().gc())
www.epam.com
EPAM Systems
57

58. Ключевое слово this

• this – это ссылка на объект, для которого вызывается
метод
• this определен только для нестатических методов
public Rectangle(int width, int height) {
this(0, 0, width, height);
}
public Rectangle(int x, int
int width,
this.x = x;
this.y = y;
this.width = width;
this.height = height;
}
www.epam.com
y,
int height) {
EPAM Systems
58

59. Спецификатор static

• Статические поля
static int x;
MyClass.x = 5;
• Статические методы
static int method() { ... }
MyClass.method();
• Константы
static final int WIDTH = 800;
System.out.println(MyClass.WIDTH);
• Статический блок инициализации
static {
// операторы инициализации
}
www.epam.com
EPAM Systems
59

60. Спецификаторы

abstract
Класс
Нельзя
инстанцировать
Можно
наследоваться
static
final
Только у вложенных
классов
У класса не может
иметь наследников
Метод Не имеет тела
Реализуется
в наследниках
Общий для всех
экземпляров класса
Нельзя
переопределять
(override)
в наследниках
Поле
Общее для всех
экземпляров класса
Константа
В случае ссылок
можно изменять
объект, на который
она ссылается
Не применим
www.epam.com
EPAM Systems
60

61. Пакеты

• Пакет – это группа связанных типов с защитой
доступа и управлением пространством имен
• Основные задачи:
– Логическая структура проекта
– Избежание конфликтов имен
• Правило:
– название пакета совпадает с названием папки
– структуры папок и пакетов совпадают
www.epam.com
EPAM Systems
61

62. Пакеты

• Объявление пакета
package com.epam.weather;
• Импорт пакета
import
import
import
import
java.io.IOException;
java.io.InputStreamReader;
java.io.Reader;
java.io.StringWriter;
• Правило для имен: доменное имя наоборот
– URL: www.epam.com
– Пакет: com.epam
www.epam.com
EPAM Systems
62

63. Пакеты

Пакеты
Классы
в пакете
www.epam.com
EPAM Systems
63

64. Пример класса

package
package com.epam.samples;
com.epam.samples;
import
import java.util.Date;
java.util.Date;
Пакет
Импорт классов
зависимостей
public
public class
class Person
Person {{
private
private final
final String
String name;
name;
private
private final
final Date
Date birthDate;
birthDate;
public
public Person(String
Person(String name,
name, Date
Date birthDate)
birthDate) {{
this.name
this.name == name;
name;
this.birthDate
this.birthDate == birthDate;
birthDate;
}}
Имя класса
Поля
Конструктор(ы)
public
public String
String getName()
getName() {{
return
return name;
name;
}}
public
public Date
Date getBirthDate()
getBirthDate() {{
return
return birthDate;
birthDate;
}}
Методы
}}
www.epam.com
EPAM Systems
64

65.

СПАСИБО ЗА ВНИМАНИЕ!
ВОПРОСЫ?
Платформа и язык программирования
Author: Alexander Lotsmanov
E-mail: Alexander_Lotsmanov@epam.com
www.epam.com
EPAM Systems
65
English     Русский Правила