The 1-st lecture from the course "Java Core".
Chair of Information Net Technologies.
St-Petersburg State University Of Aerospace Instrumentation.
Russia
The 1st part of the 3rd lecture from the course "Java Core".
The Department of Information and Network Technologies.
St-Petersburg State University Of Aerospace Instrumentation.
Russia
The 2-nd lecture from the course "Java Core".
The Department of Information and Network Technologies.
St-Petersburg State University Of Aerospace Instrumentation.
Russia
The 2nd part of the 6th lecture from the course "Java Core".
The Department of Information and Network Technologies.
St-Petersburg State University Of Aerospace Instrumentation.
Russia
The 3rd part of the 6th lecture from the course "Java Core".
The Department of Information and Network Technologies.
St-Petersburg State University Of Aerospace Instrumentation.
Russia
The 3rd part of the 3rd lecture from the course "Java Core".
The Department of Information and Network Technologies.
St-Petersburg State University Of Aerospace Instrumentation.
Russia
The 2nd part of the 3rd lecture from the course "Java Core".
The Department of Information and Network Technologies.
St-Petersburg State University Of Aerospace Instrumentation.
Russia
Вступительная лекция по Java. История появления, идеи, сферы применения, место среди других языков, экосистема. Структурированная информация о Java, как о языке программирования.
Под эту лекцию имеется более развёрнутый материал. Кому интересно - пишите.
Конструктивная критика приветствуется.
The 5-th lecture from the course "Java Core".
The Department of Information and Network Technologies.
St-Petersburg State University Of Aerospace Instrumentation.
Russia
The 1st part of the 3rd lecture from the course "Java Core".
The Department of Information and Network Technologies.
St-Petersburg State University Of Aerospace Instrumentation.
Russia
The 2-nd lecture from the course "Java Core".
The Department of Information and Network Technologies.
St-Petersburg State University Of Aerospace Instrumentation.
Russia
The 2nd part of the 6th lecture from the course "Java Core".
The Department of Information and Network Technologies.
St-Petersburg State University Of Aerospace Instrumentation.
Russia
The 3rd part of the 6th lecture from the course "Java Core".
The Department of Information and Network Technologies.
St-Petersburg State University Of Aerospace Instrumentation.
Russia
The 3rd part of the 3rd lecture from the course "Java Core".
The Department of Information and Network Technologies.
St-Petersburg State University Of Aerospace Instrumentation.
Russia
The 2nd part of the 3rd lecture from the course "Java Core".
The Department of Information and Network Technologies.
St-Petersburg State University Of Aerospace Instrumentation.
Russia
Вступительная лекция по Java. История появления, идеи, сферы применения, место среди других языков, экосистема. Структурированная информация о Java, как о языке программирования.
Под эту лекцию имеется более развёрнутый материал. Кому интересно - пишите.
Конструктивная критика приветствуется.
The 5-th lecture from the course "Java Core".
The Department of Information and Network Technologies.
St-Petersburg State University Of Aerospace Instrumentation.
Russia
Презентация с Highload++ 2011
---
Принципы работы сборщика мусора в JVM. Использование принципа поколений. Параллельная и фоновая сборка мусора. Особенности реализации алгоритмов сборки мусора в HostSpot и JRockit JVM. Причины пауз сборки мусора и способы борьбы с ними. Особенности работы с "большими" JVM - 32 гигабайта и больше. Альтернативы сборщике мусора, прямое управление памятью в Java.
WDB005.1 - JavaScript for Java Developers (Lecture 1)Igor Khotin
This document provides an overview of JavaScript for Java developers. It discusses the origins and history of JavaScript, including how it was influenced by Java syntax but developed separately. The document outlines similarities and differences between JavaScript and Java, as well as features of JavaScript like dynamic typing, prototypes, closures, and this keyword context. It recommends leveraging good JavaScript features like objects, functions, and JSON while avoiding bad patterns like direct DOM manipulation. Resources for further learning are also provided.
Keynote on JavaDay Omsk 2014 about new features in Java 8Alexey Zinoviev
Zinoviev Alexey presented this paper on JavaDay Omsk 2014. Paper covers next topics: Java 8, Stream API, Method reference, roadmap for Java 9, default methods in interfaes, SAM, functional interface.
Презентация с Highload++ 2011
---
Принципы работы сборщика мусора в JVM. Использование принципа поколений. Параллельная и фоновая сборка мусора. Особенности реализации алгоритмов сборки мусора в HostSpot и JRockit JVM. Причины пауз сборки мусора и способы борьбы с ними. Особенности работы с "большими" JVM - 32 гигабайта и больше. Альтернативы сборщике мусора, прямое управление памятью в Java.
WDB005.1 - JavaScript for Java Developers (Lecture 1)Igor Khotin
This document provides an overview of JavaScript for Java developers. It discusses the origins and history of JavaScript, including how it was influenced by Java syntax but developed separately. The document outlines similarities and differences between JavaScript and Java, as well as features of JavaScript like dynamic typing, prototypes, closures, and this keyword context. It recommends leveraging good JavaScript features like objects, functions, and JSON while avoiding bad patterns like direct DOM manipulation. Resources for further learning are also provided.
Keynote on JavaDay Omsk 2014 about new features in Java 8Alexey Zinoviev
Zinoviev Alexey presented this paper on JavaDay Omsk 2014. Paper covers next topics: Java 8, Stream API, Method reference, roadmap for Java 9, default methods in interfaes, SAM, functional interface.
Готовимся к Java SE 7 Programmer: от новичка до профессионала за 45 днейSkillFactory
Дмитрий Андрушко, инструктор Академии Oracle по Java-технологиям – о том, как подготовиться к первой ступени в непростой системе сертификации Oracle (Oracle Certified Associate, Java SE 7 Programmer), стать успешным Java-разработчиком и работать в крупнейших банках и корпорациях, если вы только начинаете знакомство с этим языком программирования.
Программирование как способ выражения мыслей. Levon Avakyan
Я расскажу на простейших примерах как функционирует современный компьютер, какие языки программирования бывают, для чего они используются, какие парадигмы лежат в их основе. По сути, язык программирования это инструмент, с помощью которого можно рассказать машине, чего же мы от неё хотим, тем самым воплотив свои мысли.
Видеозапись встречи:
http://getdev.net/Event/typescript
TypeScript - язык программирования от Microsoft, который является надмножеством JavaScript. Он поддерживает статическую типизацию, модули, определение классов и интерфейсов и транслируется в чистый JS. Спецификации языка открыты, а код компилятора распространяется под лицензией Apache.
Готов ли JUnit 5 к использованию в production? Как на него перевести большой проект и сделать тесты лаконичнее? В своем докладе я выскажу свои мысли о концепциях, заложенных в JUnit 5 и поделюсь нашим успешным опытом миграции на новую платформу
2. Содержание курса
■ Введение. Базовый синтаксис и типы данных.
Управление выполнением программ.
■ Создание собственных классов. Работа со
строками. Внутренние классы.
■ Наследование и полиморфизм. Массивы и
коллекции.
■ Абстрактные классы и интерфейсы.
■ Обработка исключений.
■ Создание интерфейса пользователя.
■ Работа с потоками ввода/вывода.
■ Мультизадачность в Java.
3. Что такое JAVA?
• Язык программирования
• Платформа
• Технологии
• Сообщество
разработчиков
4. Что такое JAVA?
■ Объектно-ориентированный язык
программирования
■ Изначально был разработан для
управления бытовой электроникой
■ Поставляется с большой
библиотекой классов
■ Использует виртуальную машину
(JVM) для выполнения программ
5. Популярность JAVA технологий
• 6 млн. Java разработчиков.
• 2.5 млн. серверов используют GlassFish.
• 5 млрд. устройств снабжены Java.
• 800 млн. настольных систем с установленной
JVM.
• 2.1 млрд. телефонов с поддержкой Java.
• 11 млн. пользователей используют JavaTV.
• Популярность курсов по Java технологиям в
ведущих университетах.
• >472,000 выданных сертификатов.
6. Платформа Java
• Средства разработки существуют для
большинства аппаратных платформ.
• Виртуальная машина Java (Java Virtual Machine,
JVM) гарантирует единообразие интерфейса с
операционной системой.
• Переносимость: «Write once, run everywhere».
• Поставляется с богатой библиотекой классов
JDK (Java Development Kit).
• JRE (Java Runtime Environment) – среда,
позволяющая запустить программу, написанную
на языке Java.
8. Отличия от С++
• Перегрузка операторов
• Множественное наследование
• Автоматическое согласование типов
• Адресная арифметика
• Деструкторы
9. Инструментарий
В состав JDK входит набор утилит для создания Java
приложений.
Утилита для создания дистрибутивов Java программ.jar
Дизассемблерjavap
утилита создания заголовочные файлов для интеграции.javah
Утилита формирования стандартной документации JavaDoc.javadoc
Интерпретатор байт-кода. Запускает класс на выполнение.java
Компилятор языка Java. Преобразует исходный код в
промежуточный байт-код.
javac
10. Среда разработки
Среда разработки предлагает редактор,
компилятор и набор вспомогательных программ,
упрощающих разработку ПО.
• Eclipse http://www.eclipse.org/
• NetBeans http://www.netbeans.org/
• IntelliJ Idea http://www.jetbrains.com/
• JBuilder, CodeGear http://www.borland.com/
12. Объектно-ориентированный подход
■ Объекты и классы
○ Объект-представление «вещи» в реальном
мире
○ Класс – «шаблон», определяющий «вещи»
■ Модель классов объединяет
○ Существующие классы и объекты
○ Поведение, цели и структуру
○ Отношения между классами
○ Отношения между объектами
■ Модель используется во всем проекте
13. Независимость от платформы
■ Исходные тексты хранятся в текстовом
виде в файле .java
■ Файл .java компилируется в файл .class
■ Этот файл содержит байт-код
(инструкции для выполнения
интерпретатором)
■ Байт-код интерпретируется во время
выполнения
14. Just-In-Time (JIT) компилятор
■ Компилирует байт-код в
исполняемый код для конкретной
платформы
■ Увеличивает производительность
■ Оптимизирует повторяющийся код,
например, циклы
15. Java - приложения
■ Клиентские
○ JVM выполняет отдельное приложение
из командной строки
○ Классы загружаются с локального
диска
■ Серверные
○ Обслуживают несколько клиентов
○ Применяются для многозвенных
приложений
16. Java - апплеты
■ Предназначены для встраивания в
HTML страницы
■ Выполняются внутри браузера и
могут взаимодействовать с
сервером
■ Могут быть преобразованы в
обычное приложение
17. Java SDK (JDK)
■ Sun Java SDK включает в себя
○ Компилятор (javac)
○ Библиотеку классов
○ Отладчик (jdb)
○ Интерпретатор (java)
○ Генератор документации (javadoc)
○ Архиватор (jar)
○ Другое…
18. Варианты поставки
■ J2ME (Micro Edition) – для
мобильных устройств
■ J2SE (Standard Edition) – разработка
обычных приложений
■ J2EE (Enterprise Edition) –
разработка приложений
многозвенной архитектуры
21. Зачем нужна объектная модель?
■ Единое представление об
окружающем мире в одном проекте
■ Простота модификации
■ Расширяемость
22. Объекты и классы
■ Объект – некоторая КОНКРЕТНАЯ
сущность моделируемой
предметной области
■ Класс – шаблон или АБСТРАКЦИЯ
сущности предметной области
Квадрат
23. Свойства классов и объектов
■ Уникальные характеристики,
которые необходимы при
моделировании предметной
области
■ ОБЪЕКТЫ различаются значениями
свойств
■ Свойства отражают состояние
объекта
24. Методы классов и объектов
■ Метод отражает ПОВЕДЕНИЕ
объектов
■ Выполнение методов, как правило,
меняет значение свойств
■ Поведение объекта может меняться
в зависимости от состояния
26. Наследование
■ Класс может иметь
одного или нескольких
потомков. Потомки
(подклассы) содержат
в себе тот же набор
свойств и методов,
что и класс-родитель
(суперкласс).
27. Наследование
■ В Java нет множественного
наследования
■ Все методы в Java – виртуальные
(могут быть перекрыты), если явно
не указано обратное
28. Полиморфизм
■ Технология, позволяющая
задать для одного и того же
(по смыслу) метода
различные способы
выполнения, в зависимости
от класса, в котором этот
метод реализован
■ Основан на наследовании
■ Методы ОБЯЗАНЫ иметь
одно и то же имя и набор
параметров (сигнатуру)
29. Взаимодействие классов
■ Зависимость (uses-a) – класс
использует другой класс
■ Агрегирование (has-a) – класс
содержит объекты другого класса
■ Наследование (is-a) – класс
является наследником (родителем)
другого класса
30. Итоги
■ Java – объектно-ориентированный,
платформонезависимый язык
программирования
■ Выполняется в виртуальной Java
машине (JVM)
■ Программы, написанные на Java,
могут выполняться внутри HTML
страниц (апплеты)
31. Базовый синтаксис языка
■ Ключевые компоненты SDK
■ Структура файла
■ Определение классов
■ Базовые типы данных и операторы
■ Использование переменной
CLASSPATH
■ Компиляция и запуск приложения
32. Ключевые компоненты SDK
■ Компилятор (javac) – создает из
исходного кода байт-код
■ Интерпретатор (java) – выполняет
байт-код
33. Пакеты
■ Классы объединяются в специальные
структуры, называемые пакетами
■ Стандартные пакеты для
○ Поддержки базовых конструкций языка
(java.lang)
○ Создания оконного интерфейса (javax.swing)
○ Управления вводом/выводом (java.io)
34. Структура исходного файла класса Java
■ Исходный файл состоит из следующих частей
○ Необязательное слово package, за которым следует
наименование пакета, в котором содержится класс
○ Необязательный оператор import (может быть
несколько), который указывает, какие классы из
сторонних пакетов используются создаваемым
классом
○ Одно или более определение class или interface,
за которым следует программный блок
○ Файл должен иметь ТО ЖЕ имя, что и создаваемый
класс
■ Ключевые слова языка Java ЧУВСТВИТЕЛЬНЫ
К РЕГИСТРУ
■ В файле может быть ТОЛЬКО ОДИН public класс
35. Пример класса Java
package ru.vsu.test;
import java.util.Date;
public class FirstProgram {
private Date today;
public Date getToday(){
return today;
}
public void setToday(Date aToday){
today = aToday;
}
public static void main (String[] args){
FirstProgram fp = new FirstProgram();
fp.setToday(new Date());
System.out.println (fp.getToday());
}
}
36. Соглашения об именовании
■ Имена файлов
○ Customer.java
○ Person.class
■ Имена пакетов
○ java.util
○ javax.swing
■ Имена классов
○ Customer
○ Person
■ Имена свойств класса
○ firstName
○ id
■ Имена методов
○ getName
○ isAlive
■ Имена констант
○ SQUARE_SIZE
Также могут использоваться цифры 1..9, _, $
37. Определение класса
■ Определение класса включает:
○ Модификатор доступа
○ Ключевое слово class
○ Свойства класса
○ Конструкторы
○ Методы
○ Статические свойства
○ Статические методы
38. Пример
public class FirstProgram {
private Date today;
public Date getToday(){
return today;
}
public static final PROGRAM_SIZE=560;
public static void main (String[] args){
...
}
}
39. Блоки кода
■ Блоки кода обрамляются в
фигурные скобки “{“ “}”
■ Охватывают определение класса
■ Определения методов
■ Логически связанные разделы кода
import java.util.Date;
public class FirstProgram {
public static void main (String[] args){
System.out.println (new Date());
}
}
40. Объявление методов
■ Методы определяются только
внутри класса
■ Указывается
○ Модификатор доступа
○ Слово static
○ Тип возвращаемого значения
○ Аргументы
41. Пример
import java.util.Date;
public class FirstProgram {
private Date today;
public Date getToday(){
return today;
}
public void setToday(Date aToday){
int i = 0;
i++
today = aToday;
}
}
42. Переменные
■ Основное место для хранения
данных
■ Должны быть явно объявлены
■ Каждая переменная имеет тип,
идентификатор и область
видимости
■ Определяются для класса, для
экземпляра и внутри метода
43. Объявление переменных
■ Может быть объявлена в любом месте блока
кода
■ Должна быть объявлена перед использованием
■ Обычно переменные объявляются в начале
блока
■ Область видимости определяется блоком
■ Необходимо инициализировать переменные
перед использованием
■ Переменные простых типов инициализируются
автоматически
44. Объявление переменных
■ Основная форма объявления
○ тип идентификатор [ = значение];
■ При объявлении переменные могут
быть проинициализированы
public class FirstProgram {
public static void main (String[] args){
int itemsSold = 10;
float itemCost = 11.0f;
int i, j, k;
double interestRate;
}
}
45. Именование переменных
■ Имя переменной должно начинаться
с буквы, знака подчеркивания или со
знака “$”
■ Имя переменной может включать
цифры
■ Давайте переменным осмысленные
имена
46. Простые типы данных
■ Восемь простых типов данных
○ Шесть числовых
○ Символьный
○ Логический
■ Определяемые пользователем типы
○ Классы
○ Интерфейсы
○ Массивы
47. Простые типы данных
Целые С плавающей
точкой
Символьный Логический
byte
short
int
long
float
double
char boolean
1, 2, 3, -2
012
0x23f
2553L
3.0F
.9937F
3.455E8
1.0D
‘s’
‘141’
‘u0061’
‘n’
true
false
48. Строки
■ Класс java.lang.String представляет собой хранилище символов
и функциональность для работы с ними.
■ Строка имеет фиксированную длину и не завершается
специальным символом.
■ Объект класса String – неизменяем.
■ Возможности:
– обращение к символу по его номеру,
– поиск,
– выделение подстроки,
– изменение регистра,
– и т.п.
49. Размещение сущностей
• Переменная может быть размещена в одном из
двух хранилищ:
• Стек – расположен в памяти VM и имеет
поддержку в виде указателя стека.
• Куча (heap) – область памяти VM, в которой
хранятся все ссылочные типы.
• Переменной простого типа выделяется память в
стеке.
• Ссылки располагаются в куче.
50. Операторы
■ Пять типов операторов
○ Присваивание
○ Арифметические
○ Побитовый сдвиг
○ Равенство
○ Логические
51. Оператор присваивания
■ Оператор присваивания – выражение и может
использоваться там, где допустимы выражения
■ Сначала вычисляется правая часть, а затем
полученное значение присваивается левой
части
int itemsSold = 10;
double itemCost = 11.0F+12.0D;
int i = i+7;
i = j = k = 100;
52. Арифметические операторы
■ Сложение (+)
■ Умножение (*)
■ Вычитание (-)
■ Деление (/)
■ Остаток от деления (%)
Все арифметические операции производятся над int или long
ВНИМАНИЕ:
byte a = 100;
byte b = 100;
byte c = a+b;
c = -56!!!
53. Операции инкремента и декремента
■ Увеличение на 1 (++)
■ Уменьшение на 1 (--)
int var1 = 3;
int var2 = 0;
var2 = ++var1; //сначала увеличивается var1, а затем
//присваивается var2
var2 = var1++; //сначала присваивается var2, а затем
// увеличивается var1
59. Последовательность
■ Каждый оператор завершается
точкой с запятой
■ Группы операторов обрамляются
фигурными скобками
■ Каждая группа выполняется как
единый оператор внутри
последовательности операторов
60. Оператор if
if (логическое выражение)
оператор1;
[else
оператор2];
if (i % 2 == 0)
System.out.println(“Even”);
else
System.out.println(“Odd”);
if (i % 2 == 0){
System.out.print(i);
System.out.println(“ is even”);
}
61. Оператор switch
■ Используется для
выбора из
счетного
количества
вариантов
■ Выражения const
должны быть типа
byte, int, char или
short
switch (выражение целого типа){
case const1:
statement1;
break;
case const2:
statement2;
break;
default:
statement3;
}
62. Циклы
■ Три типа
○ while
○ do..while
○ for
■ Все циклы имеют две части
○ Условие выполнения
○ Тело
63. Цикл while
while (логическое выражение)
оператор;
int i = 0;
while (i < 100){
System.out.println(“i = ”+i);
i++;
}
65. Цикл for
for (инициализация; условие выхода; условие итерации)
оператор;
for (int i = 0; i < 10; i++)
{
System.out.println(“i = ”+i);
}
for (int i = 0, j = 10; i < j; i++, j--)
{
System.out.println(“i = ”+i);
System.out.println(“j = ”+j);
}
66. Массивы
■ Для хранения нескольких однотипных
значений используется ссылочный тип –
массив:
//примитивный тип, размер массива задан явно
int price[] = new int[10];
//неявное задание размера
int rooms[] = new int[]{1, 2, 3};
//содержит ссылочные переменные
Item [] items = new Item[10];
Item [] undefinedItems = new Item[]{
new Item(1),
new Item(2),
new Item(3)};
67. Доступ к элементам массива
Доступ осуществляется по индексу.
Размер хранится в немодифицируемом
поле массива length.
for (int i = 0;
i < undefinedItems.length;
i++){
// должен быть представим в виде
// строки (переопределен метод
// toString())
System.out.println(undefinedItems[i]);
}
68. Многомерный массив
• Является массивом массивов.
• Многомерный массив концептуально представляет
собой многомерную матрицу.
int twoDim [][] = new int[4][5];
69. Массив массивов
• Каждый из массивов может иметь отличную от
других длину.
int twoDim [][] = new int[4][];
twoDim[0] = new int [10];
twoDim[1] = new int [20];
twoDim[2] = new int [30];
twoDim[3] = new int [100];
70. Ошибки времени выполнения
• Обращение к несуществующему индексу массива
отслеживается виртуальной машиной во время
исполнения кода:
public class Main {
public static void main(String[] args) {
int array [] = new int[]{1, 2, 3};
System.out.println(array[3]);
}
}
//попытка обратиться к несуществующему
//индексу:
Exception in thread "main"
java.lang.ArrayIndexOutOfBoundsException: 3
at Main.main(Main.java:27)
71. Ошибки времени выполнения
• Попытка поместить в массив
неподходящий элемент пресекается
виртуальной машиной:
Object x[] = new String[3];
//попытка поместить в массив содержимое //несоответствующего
типа
x[0] = new Integer(0);
Exception in thread "main" java.lang.ArrayStoreException:
java.lang.Integer
at Main.main(Main.java:22)
72. Переменная среды CLASSPATH
■ Определяется в операционной системе
■ Указывает JVM, где необходимо искать
файлы .class
■ Может ссылаться на каталоги и файлы
.jar и .zip
■ Интерпретатор загружает встроенные
классы перед тем, как загрузить
пользовательские
■ Используется с командами java и javac
73. Выполнение JAVA программ
■ Для того, чтобы класс можно было
запустить, в нем должен быть определен
метод main
public class FirstProgram {
public static void main (String[] args){
int itemsSold = 10;
float itemCost = 11.0f;
int i, j, k;
double interestRate;
}
}