Параметр fetch
@Entity
@Table(name="post")
class Post {
@Column(name="id")
public Integer id;
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
public List<Comment> comments;
}
Параметр fetch в аннотациях @ManyToOne, @ManyToMany, @OneToOne, @OneToMany определяет как будет загружаться связанная сущность: вместе с загрузкой родительской сущности или в момент обращения к аннотированному полю.
...
Читать дальшеПамять кучи
В Java память кучи (heap memory) является областью памяти, где хранятся объекты и массивы. Куча управляется сборщиком мусора (garbage collector), который автоматически освобождает память, занятую объектами, которые больше не используются.
Динамическое выделение
Объекты в Java создаются динамически во время выполнения программы. Куча предоставляет пространство для хранения этих объектов, и их размер может изменяться в процессе выполнения программы.
...
Читать дальшеDataInputStream и DataOutputStream
try {
// Запись данных в файл с использованием DataOutputStream
DataOutputStream dos = new DataOutputStream(new FileOutputStream("data.txt"));
dos.writeInt(42);
dos.writeDouble(3.14);
dos.writeUTF("Привет, мир!");
dos.close();
// Чтение данных из файла с использованием DataInputStream
DataInputStream dis = new DataInputStream(new FileInputStream("data.txt"));
int intValue = dis.readInt();
double doubleValue = dis.readDouble();
String stringValue = dis.readUTF();
System.out.println("int: " + intValue); // int: 42
System.out.println("double: " + doubleValue); // double: 3.14
System.out.println("string: " + stringValue); // string: Привет, мир!
dis.close();
} catch (IOException e) {
e.printStackTrace();
}
DataInputStream и DataOutputStream предоставляют методы для чтения и записи примитивных данных из и в поток ввода/вывода. Эти классы добавляют функциональность к обычным потокам ввода/вывода, позволяя удобно считывать и записывать данные различных типов, таких как целые числа, числа с плавающей запятой, символы и т.д., без необходимости вручную преобразовывать их в байты.
Читать дальшеСтековая память
Для оптимального запуска приложения, JVM делит память на стек и кучу. Всякий раз, когда мы объявляем новые переменные и объекты, вызываем новый метод, объявляем строку или выполняем аналогичные операции, JVM выделяет память для этих операций либо из стековой памяти, либо из кучи.
Стековая память в Java используется для распределения статической памяти и выполнения потока - каждый поток исполнения в Java имеет свой собственный стек, создаваемый вместе с потоком. Этот стек содержит кадры стека, каждый из которых представляет вызов метода. Каждый кадр содержит примитивные значения, специфичные для метода (переданные в метод и объявленные в нем), и ссылки на объекты, находящиеся в куче.
...
Читать дальшеКласс Console
import java.io.Console;
public class Con {
private static final String PASSWORD = "123";
public static void main(String[] args) {
Console console = System.console();
String name = console.readLine("Enter your name: ");
char[] pass = console.readPassword("Enter password: ");
if (PASSWORD.equals(new String(pass))) {
console.printf("Welcome, %s", name);
} else {
console.printf("access denied");
}
}
}
В JDK 6 и более поздних версиях мы можем использовать класс Console из пакета java.io для чтения и записи в консоль.
Если нам нужно прочитать конфиденциальную информацию, например пароль, мы можем использовать метод readPassword(), чтобы запросить у пользователя пароль и прочитать пароль из консоли с отключенным эхом.
Читать дальшеФункциональное программирование (ФП)
Функциональное программирование (ФП) - это парадигма программирования, которая базируется на работе с функциями как основными строительными блоками программ. В ФП данные рассматриваются как неизменяемые и функции рассматриваются как математические функции, которые принимают входные данные и возвращают результат без видимых побочных эффектов. Вот основные концепции функционального программирования:
...
Читать дальшеSequencedCollection

В Java 21 появилась новая группа интерфейсов коллекций, самым основным из которых является SequencedCollection. Он расширяет базовый интерфейс Collection, добавляя в него ряд полезных методов для манипуляций с первым и последним элементами, а также для инвертирования коллекции:
...
Читать дальшеinstanceof
public interface Shape { }
public class Triangle implements Shape { }
public class IsoscelesTriangle extends Triangle { }
...
Shape shape = new Triangle();
Triangle triangle = new Triangle();
IsoscelesTriangle isoscelesTriangle = new IsoscelesTriangle();
Shape nonspecificShape = null;
assertTrue(shape instanceof Shape) ;
assertTrue(triangle instanceof Shape);
assertTrue(isoscelesTriangle instanceof Shape);
assertFalse(nonspecificShape instanceof Shape);
assertTrue(shape instanceof Triangle);
assertTrue(triangle instanceof Triangle);
assertTrue(isoscelesTriangle instanceof Triangle);
assertFalse(nonspecificShape instanceof Triangle);
assertFalse(shape instanceof IsoscelesTriangle);
assertFalse(triangle instanceof IsoscelesTriangle);
assertTrue(isoscelesTriangle instanceof IsoscelesTriangle);
assertFalse(nonspecificShape instanceof IsoscelesTriangle);
Ключевое слово instanceof — это бинарный оператор, и мы можем использовать его для проверки того, является ли определенный объект экземпляром заданного типа. Следовательно, результат операции либо истинен, либо ложен. Кроме того, ключевое слово instanceof — это наиболее распространенный и простой способ проверить, является ли объект подтипом другого типа.
...
Читать дальшеЯвляется ли слово палиндромом
public class Palindrome {
public static void main(String[] args) {
String word = "шалаш";
System.out.println(isPalindrome(word));
}
private static boolean isPalindrome(String word) {
int count = word.length() / 2;
int j = word.length() - 1;
for (int i = 0; i < count; i++) {
if (word.charAt(i) != word.charAt(j)) {
return false;
}
j--;
}
return true;
}
}
Суть алгоритма в том, что бы сравнивать поочередно первую букву с последней, вторую с предпоследней и так далее. Как только одна из пар не совпадет, сразу выходим - слово не палиндром.
...
Читать дальшеМетод equals()
public class User {
public Integer id;
public String name;
@Override
public boolean equals(Object o) {
if (this == o) return true;
return o instanceof User &&
id != null &&
id.equals(((User) o).id);
}
}
Метод equals() используется для сравнения двух объектов на равенство. Он определен в классе Object и, по умолчанию, выполняет сравнение ссылок на объекты (то есть проверяет, являются ли объекты одним и тем же объектом в памяти). Многие классы переопределяют этот метод, чтобы сравнивать содержимое объектов, а не только ссылки.
...
Читать дальше