Концепция ООП в Java. Типы данных. Понятия класс, объект. Переменные и объекты. Методы. Сборка мусора

Содержание

Слайд 2

Рассматриваемые вопросы

Типы данных
Концепция ООП
Понятия класс, объект
Переменные и объекты
Методы
Сборка мусора

Рассматриваемые вопросы Типы данных Концепция ООП Понятия класс, объект Переменные и объекты Методы Сборка мусора

Слайд 3

Типы данных в языке Java

Поля, переменные, аргументы и возвращаемое значение методов

Типы данных в языке Java Поля, переменные, аргументы и возвращаемое значение методов
кроме идентификатора имеют тип данных.
Типы данных в языке Java делятся на:
примитивные
ссылочные
В Java есть 8 примитивных типов, которые делятся на 3 группы:
Целые числа – byte, short, int, long
Числа с плавающей точкой(вечественные) – float, double
Логические – boolean
Символьные - char
Все остальные – ссылочные.

Слайд 4

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

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

Слайд 5

Переменные

Переменная – это именованная ячейка памяти, содержимое которой может изменяться. При

Переменные Переменная – это именованная ячейка памяти, содержимое которой может изменяться. При
объявлении переменной сначала указывается тип переменной, а затем идентификатор задаваемой переменной.
int age; int age = 0;
age = 0;
Значение null соответствует ссылочной переменной, которой не назначен адрес ячейки с данными.

Слайд 6

Типы byte, short, int, long

int — основной целочисленный тип, используемый в Java по

Типы byte, short, int, long int — основной целочисленный тип, используемый в
умолчанию. Любое целое число будет рассматриваться компилятором как число типа int. Используется в качестве счётчика циклов, индексов массивов и индексов символов в строках.
long — целочисленный тип содержащий практически бесконечное количество значений. Используется в случаях, где числа превосходят 2 миллиарда и стандартного int уже не хватает. Используется в повседневной жизни для создания уникальных значений.
byte — используется для передачи данных по сети, записи и чтения из файла. В математических операциях, как правило, не используется.
short — самый редко используемый тип в Java, может использоваться только в целях экономии памяти.

Слайд 7

Числовые переменные

Можно использовать литералы в разных системах исчисления:
int age = 29; (десятичная

Числовые переменные Можно использовать литералы в разных системах исчисления: int age =
система)
age = 0‭11101‬; (двоичная система)
age = 035; (восьмеричная система)
age = 0x1D; (шестнадцатиричная система)

Слайд 8

Нумерические литералы

Сколько нулей в значении переменной?
int age = 100000000;
Для удобства чтения значения

Нумерические литералы Сколько нулей в значении переменной? int age = 100000000; Для
переменны можно использовать следующее написание:
int age = 100_000_000;

Слайд 9

Числа с плавающей точкой

Числа с плавающей точкой (или действительные числа) представлены типами float и double.

Числа с плавающей точкой Числа с плавающей точкой (или действительные числа) представлены
Используются для хранения значений с точностью до определенного знака после десятичной точки.
double — это числа с двойной точностью, максимально приближённые к заданным или полученным в результате вычислений значениям. Используется в Java для любых математических вычислений (квадратный корень, синус, косинус,..).
float — менее точный тип с плавающей точкой. Используется очень редко с целью экономии памяти.

Слайд 10

Специальные числа с плавающей точкой

В языке Java есть три специальных числа плавающей

Специальные числа с плавающей точкой В языке Java есть три специальных числа
точкой, которые используются для обозначения переполнения и ошибок:
положительная бесконечность - результат деления положительного числа на 0. Представлены константами Double.POSITIVE_INFINITY и Float.POSITIVE_INFINITY.
отрицательная бесконечность - результат деления отрицательного числа на 0. Представлены константами Double.NEGATIVE_INFINITY и Float.NEGATIVE_INFINITY.
NaN (не число) - вычисление 0/0 или извлечение квадратного корня из отрицательного числа. Представлены константами Double.NaN и Float.NAN.
Числа с плавающей точкой нельзя использовать в финансовых расчетах, где ошибки округления недопустимы.
Если же требуется исключить ошибки округления, то следует воспользоваться классом BigDecimal.

Слайд 11

Тип char

Символы описываются в языке Java char типом. Символы преобразуются по таблице кодировки UTF-16.

Тип char Символы описываются в языке Java char типом. Символы преобразуются по
По большому счёту это все буквы, числа и специальные символы существующие на нашей планете. 
Размер в байтах - 2 байта
Возможные значения (от..до) - 0..65,535
Значение по умолчанию - '\u0000'
Пример объявление символьных типов:
Тип char является псевдоцелочисленным типом, поэтому значения этого типа можно задавать в виде числа - кода символа из таблицы кодировки UTF-16. Каждому символу соответствует определённое число из таблицы и Java при виде этого числа в рамках типа char выводит его на экран как символ.

char c1 = 'a';

char c2 = 97;
System.out.println(c2);

a

Слайд 12

Тип boolean

Примитивный тип boolean предназначен для хранения логических значений. Логические переменные этого

Тип boolean Примитивный тип boolean предназначен для хранения логических значений. Логические переменные
типа могут принимать только два значения: true – истина и false – ложь. Памяти на переменную такого типа требуется 1 бит.
Пример объявление логических типов:

boolean b1 = false; boolean b2 = true;

Слайд 13

Преобразование и приведение примитивных типов

Иногда возникают ситуации, когда необходимо переменной одного типа

Преобразование и приведение примитивных типов Иногда возникают ситуации, когда необходимо переменной одного
присвоить значение переменной другого типа.
Например:

int i = 11;
byte b = 22;
i = b;

Слайд 14

Преобразование и приведение примитивных типов

В Java существует два типа преобразований - автоматическое преобразование

Преобразование и приведение примитивных типов В Java существует два типа преобразований -
(неявное) и приведение типов (явное преобразование).

Слайд 15

Автоматическое преобразование типов

Если оба типа совместимы, их преобразование будет выполнено в Java

Автоматическое преобразование типов Если оба типа совместимы, их преобразование будет выполнено в
автоматически. Например, значение типа byte всегда можно присвоить переменной типа int.
Для автоматического преобразования типа должно выполняться два условия:
оба типа должны быть совместимы
длина целевого типа должна быть больше длины исходного типа
В этом случае происходит преобразование с расширением. 

Слайд 16

Автоматическое преобразование типов

Сплошные линии обозначают преобразования, выполняемые без потери данных.
Штриховые линии

Автоматическое преобразование типов Сплошные линии обозначают преобразования, выполняемые без потери данных. Штриховые
говорят о том, что при преобразовании может произойти потеря точности.

Слайд 17

Приведение типов

Что делать, если значение типа int нужно присвоить переменной типа byte?
Такое

Приведение типов Что делать, если значение типа int нужно присвоить переменной типа
преобразование не будет выполняться автоматически, поскольку длина типа byte меньше, чем у типа int.
Иногда этот вид преобразования называется сужающим преобразованием, поскольку значение явно сужается, чтобы уместиться в целевом типе данных.
Приведение - это всего лишь явное преобразование типов.

int i = 11;
byte b = 22;
b = (byte) i;

Слайд 18

Автоматическое продвижение типов в выражениях

В языке Java действуют следующие правила:
Если один операнд

Автоматическое продвижение типов в выражениях В языке Java действуют следующие правила: Если
имеет тип double, другой тоже преобразуется к типу double.
Иначе, если один операнд имеет тип float, другой тоже преобразуется к типу float.
Иначе, если один операнд имеет тип long, другой тоже преобразуется к типу long.
Иначе оба операнда преобразуются к типу int.
В выражениях совмещенного присваивания (+=,-=,*=,/=) нет необходимости делать приведение.

Слайд 19

Немного кода

public class Main{
public static void main(String... args) {
int myAge = 24;
long

Немного кода public class Main{ public static void main(String... args) { int
passportNumber = 1234567890L;
char yourMark = 'A';
double averageMark = 4.12;
byte test = 512; // ???
System.out.println("your exam results: ");
System.out.println("your age is: " + myAge + ", passport number: " + passportNumber);
System.out.println("you got " + yourMark + ", average mark is " + averageMark);
}
}

Слайд 20

ООП - парадигма

Окъектно-ориентированное программирование или ООП – парадигма программирования, где основыми концепциями

ООП - парадигма Окъектно-ориентированное программирование или ООП – парадигма программирования, где основыми
является понятия объектов и классов.
Объект – это сущность или экземпляр класса, который может посыласть сообщения и может на них реагировать, используя свои данные.
ООП возникло в результате развития идей процедурного программирования, где данные и функции (методы) их обработки формально не связаны.

Слайд 21

Понятие Класс и Объект

Класс – прототип, чертеж, определяет структуру и поведение создаваемых

Понятие Класс и Объект Класс – прототип, чертеж, определяет структуру и поведение
объектов
Объект – конкретный, реальный экземпляр класса

Слайд 22

Поле и метод класса

Класс в Java имеет два основных элемента:
1. Поле (field)

Поле и метод класса Класс в Java имеет два основных элемента: 1.
– имеет модификатор доступа, тип данных, идентификатор и значение (переменное или постоянное)
2. Метод (method) – имеет модификатор доступа, идентификатор аргументы (входные параметры), возвращаемое значение или void, тело

Слайд 23

Класс в Java

public class Man {
// Comments one line
int hairLength; //поле

Класс в Java public class Man { // Comments one line int
класса
/*
* Comments several lines
*/
public void grow() {
hairLength = hairLength + 1; - метод
}
}

Слайд 24

Идентификаторы

Идентификаторы – это имена пакетов, классов, интерфейсов, объектов, полей, методов, переменных,

Идентификаторы Идентификаторы – это имена пакетов, классов, интерфейсов, объектов, полей, методов, переменных,
параметров методов и т.д.

package by.pvt; //идентификатор пакета public class Car { int price; //поле public int getPrice() { //метод, который позвращает значение return price; } public void setPrice(int price) { //метод с парамметрами this.price = price; } }

Слайд 25

Идентификаторы

Названия идентификаторов выбираются по следующим правилам:
они должны начинаться с буквы или

Идентификаторы Названия идентификаторов выбираются по следующим правилам: они должны начинаться с буквы
символа подчеркивания “_” и “$”;
они могут содержать латинские буквы, символы подчеркивания или цифры без пробелов;
названия идентификаторов не должны совпадать с ключевыми словами языка Java;
Длина идентификатора в Java - любая.
А лучше почитать про coding conventions java.
https://en.wikibooks.org/wiki/Java_Programming/Coding_conventions

Слайд 26

Объекты

Все объекты класса имеют одинаковые наборы полей данных (атрибуты объекта), но

Объекты Все объекты класса имеют одинаковые наборы полей данных (атрибуты объекта), но
с независимыми значениями этих данных для каждого объекта.
Значения полей данных объекта задают его состояние, а методы – его поведение. Сами объекты безымянны, и доступ к ним осуществляется только через ссылочные переменные:
Тип Идентификатор Коструирование объекта
Man maks = new Man();

Слайд 27

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

Конструктор — это метод класса, который инициализирует новый объект после его

Конструкторы Конструктор — это метод класса, который инициализирует новый объект после его
создания. Имя конструктора всегда совпадает с именем класса, в котором он расположен. У конструкторов нет типа возвращаемого результата - никакого, даже void.

Слайд 28

Конструкторы по умолчанию
public class Man {
int armsNumber;
public Man() {
this.armsNumber = 2;
}
}
Вызов

Конструкторы по умолчанию public class Man { int armsNumber; public Man() {
конструктора по умолчанию:
Man man = new Man();

Слайд 29

Конструкторы с параметрами

public class Man {
int armsNumber;
int hairLength;
public Man(int hairLength) {
this.armsNumber =

Конструкторы с параметрами public class Man { int armsNumber; int hairLength; public
2;
this.hairLength = hairLength;
}
}
Вызов конструктора с параметрами:
Man man = new Man(10);

Слайд 30

Сборка мусора

В языках без сборки мусора (например Си), при работе с памятью

Сборка мусора В языках без сборки мусора (например Си), при работе с
(при записи в память), нужно не забывать вручную очищать память.
В Java реализован сборщик мусора, переодически останавливающий на очень короткое время программу (обычно менее секунды), уничтожающий неиспользуемые данные.
Сборщиком мусора - специальный процесс периодически освобождает память, удаляя объекты, которые уже не будут востребованы приложениями — то есть производит «сбор мусора».

Слайд 31

Класс Runtime

Свободная память у виртуальной машины:
Runtime.getRuntime().freeMemory();
Вызов сборщика мусора из приложения:
Runtime.getRuntime().gc();

Класс Runtime Свободная память у виртуальной машины: Runtime.getRuntime().freeMemory(); Вызов сборщика мусора из приложения: Runtime.getRuntime().gc();

Слайд 32

Создаем мусор

Создаем объекты класса Man и помещаем их в динамическое хранилище List

Создаем мусор Создаем объекты класса Man и помещаем их в динамическое хранилище
в памяти JVM.
ArrayList list = new ArrayList();
for (int i = 0; i < 15_000_000; i++) {
list.add(new Man(i));
}

Слайд 33

Наблюдаем память JVM

public class Main {
public static void printMemory() {
System.out.println("Max mem:

Наблюдаем память JVM public class Main { public static void printMemory() {
" + Runtime.getRuntime().maxMemory());
System.out.println("Total mem: " + Runtime.getRuntime().totalMemory());
System.out.println("Free mem: " + Runtime.getRuntime().freeMemory());
}
public static void main(String[] args) {
printMemory();
}
}

Слайд 34

Зачем собирать мусор?

Физическая память компьютера ограничена.
Компьютер выделяет конечное количество памяти для JVM.
Выделением

Зачем собирать мусор? Физическая память компьютера ограничена. Компьютер выделяет конечное количество памяти
памяти JVM можно управлять:
>java –X
>java -Xmx1024M -Xms1024M Main

Слайд 35

Инструменты

Мониторим использование памяти:
> %JAVA_HOME%\bin\jconsole.exe

Инструменты Мониторим использование памяти: > %JAVA_HOME%\bin\jconsole.exe

Слайд 36

Вопросы


Вопросы

Слайд 37

Дополнительные материалы

1. Object-Oriented Programming Concepts https://docs.oracle.com/javase/tutorial/java/concepts/index.html
2. Java Platform, Standard Edition HotSpot Virtual

Дополнительные материалы 1. Object-Oriented Programming Concepts https://docs.oracle.com/javase/tutorial/java/concepts/index.html 2. Java Platform, Standard Edition
Machine Garbage Collection Tuning Guide
https://docs.oracle.com/en/java/javase/11/gctuning/introduction-garbage-collection-tuning.html
Имя файла: Концепция-ООП-в-Java.-Типы-данных.-Понятия-класс,-объект.-Переменные-и-объекты.-Методы.-Сборка-мусора.pptx
Количество просмотров: 50
Количество скачиваний: 0