JAVA CORE
JAVA Versions
JAVA 8
- Functional Interfaces
- Lambda Function
- Stream API
- Options
- Interface default methods
- PermGen to Metaspace
- CompletableFuture
JAVA 9
- Interface private methods
- Быстрое создание immutable collection - List.of()...
- HttpClient
- Jigsaw - модули Java и файлы Jar с несколькими выпусками.
JAVA 10
JAVA 13
JAVA 14
JAVA 15
JAVA 21
- Virtual threads
- instanceof variables for record class - instanceof Position(int x, int y)
- Pattern Matching fo switch
awt.image
Быстрое получение размеров изображения из файла
BufferedImage bimg = ImageIO.read(new File(filename));
int width = bimg.getWidth();
int height = bimg.getHeight();
JDK
Содержит
JEP(JDK Enhancement Proposals)
JEP - технологии которые были добавлены в JAVA. Имеют номер.
openjdk-jeps
JAR
JAR(Java ARchive) - ZIP-архив, в котором содержится часть программы на языке Java.
Из чего состоит jar - из классов и файла MANIFEST.MF(хранит путь к файлу с методом main)
Примитивы:
Целочисленные:
- byte(1 байта - -128..127)
- short(2 байта - -32,768..32,767)
- int(4 байта - -2,147,483,648..2,147,483,647)
- long(8 байта - -9,223,372,036,854,775,808..9,223,372,036,854,775,807)
С плавающей точкой:
- float(4 байта - -3.4E+38..3.4E+38)
- double(8 байта - -1.7E+308..1.7E+308)
Символьный:
- char - символ(2 байта - UTF-16). Можно создавать через символ - 'a' или через номер символа в UTF-16
- 61(исчисление от 0 до 65,535).
Логическое:
- boolean(1 байта - true, false) - логический.
Литералы
Для явного указания типа чисел используются суффиксные литералы. В приоритете символы верхнего регистра.
Для var переменных, без литералов все числа будут int.
- l или L - long
- d или D - decimal(можно не указывать)
- f или F - float
- '' - char
- "" - String. Не является примитивным типом данных.
- true - boolean
- false - boolean
Пример
Литералы - не явное объявление примитивных типов данных.
- int - 25
- long - 25L
- double - 25.5
- float - 25.5F
- char - 'A'
Переполнение
Числовые переменные при переполнении не создадут исключение, а просто начнутся заново.
Переопределение
При переопределении метода можно сужать тип возвращаемого значения.
Уровни доступа
- public - открыт для всех.
- protected - в пределах пакета и для классов наследников.
- default(package) - в пределах пакета.
- private - открыт только для себя.
При переопределении класса разрешается расширить видимость метода. Сужать не разрешается(Полиморфизм,
Барбары Лисков).
Class - нельзя объявить private или protected если это не внутренние классы.
Многомерный массив
int[][] a = {{1, 2, 3}, {4, 5, 6}};
//[[1,2,3],[4,5,6]]
Autoboxing/Unboxing - Автоупаковка/автораспаковка
Autoboxing/Unboxing - автоматическое преобразования примитивных типов в объектные и наоборот.
Autoboxing
Integer integer = 9;
Unboxing
int in = 0;
in = new Integer(9);
Integer
Integer immutable
Integer a = 200;
Integer b = a;
a++;
System.out.println(b); //200
Integer pool
От -128 до 127 - если создается объект без ключевого слова new будет использоваться pool. Integer(1) ==
Integer(1)