Java | Фишки и трюки
7.21K subscribers
182 photos
29 videos
6 files
40 links
Java: примеры кода, интересные фишки и полезные трюки

Купить рекламу: https://telega.in/c/java_tips_and_tricks

✍️По всем вопросам: @Pascal4eg
Download Telegram
Что выведет код?
Anonymous Quiz
24%
BLACK
17%
WHITE
58%
ошибка компиляции
😱5🎉1🤩1
☕️Использование классов Pattern и Matcher

Pattern и Matcher - это классы, предоставляемые Java для работы с регулярными выражениями. Pattern используется для компиляции регулярного выражения, а Matcher используется для сравнения этого выражения с определенной последовательностью символов.

➡️Пример использования Pattern и Matcher:


import java.util.regex.*;

public class RegexExample {
public static void main(String[] args) {
String text = "The cat in the hat";

// Компилируем регулярное выражение
Pattern pattern = Pattern.compile("\\bcat\\b");

// Создаем Matcher, сравниваем его с текстом и выводим результат
Matcher matcher = pattern.matcher(text);
if (matcher.find()) {
System.out.println("Найдено совпадение!");
} else {
System.out.println("Совпадений не найдено");
}
}
}


🔹В данном примере мы создаем регулярное выражение, которое ищет слово "cat" как отдельное слово. Затем мы создаем Matcher, который сравнивает это выражение с текстом "The cat in the hat". Результатом выполнения программы будет сообщение "Найдено совпадение!", так как слово "cat" есть в тексте.

📌Pattern и Matcher позволяют удобно работать с регулярными выражениями и обрабатывать текстовые данные. Они широко используются в поиске и замене текста, валидации ввода и других задачах, связанных с обработкой строк.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍91🔥1👏1
☕️Использование JavaFX

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

🔔Одной из ключевых особенностей JavaFX является использование XML-подобного языка разметки FXML для описания интерфейса приложения. FXML позволяет создавать интерфейс без необходимости писать большое количество кода, что делает разработку проще и более удобной.

Пример кода на JavaFX:

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;

public class HelloWorld extends Application {

@Override
public void start(Stage primaryStage) {
Button btn = new Button();
btn.setText("Hello World");

StackPane root = new StackPane();
root.getChildren().add(btn);

Scene scene = new Scene(root, 300, 250);

primaryStage.setTitle("Hello World!");
primaryStage.setScene(scene);
primaryStage.show();
}

public static void main(String[] args) {
launch(args);
}
}


➡️В данном примере создается простое окно с кнопкой "Hello World", которая выводится на экран.

JavaFX также полностью интегрируется с языком Java, что позволяет программистам легко работать с различными Java библиотеками и функциональными возможностями.

🔖JavaFX предоставляет множество возможностей для создания современных и красивых пользовательских интерфейсов, что делает ее отличным выбором для разработки приложений с графическим интерфейсом на языке Java.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7🔥3👏2👨‍💻2
final String pig = "length: 10";
final String dog = "length: " + pig.length();
System.out.println(pig == dog);
Что выведет код?
Anonymous Quiz
24%
true
57%
false
19%
ошибка компиляции
👍6🎉2🔥1👏1
😁29🙈3🤣2💯1🤪1
☕️Использование Java Cryptography Architecture (JCA)

Java Cryptography Architecture (JCA) - это набор классов и интерфейсов, который обеспечивает безопасные функции шифрования, подписи и генерации ключей в Java. JCA предоставляет программистам удобный способ использования криптографических алгоритмов в своих Java приложениях.

➡️Одной из ключевых особенностей JCA является возможность подключения различных провайдеров криптографических служб (Cryptography Service Providers - CSP), которые реализуют алгоритмы шифрования и хэширования. Это позволяет программистам легко заменять или дополнять стандартные алгоритмы криптографии.

Ниже приведен пример использования JCA для шифрования и дешифрования данных с использованием алгоритма AES:

import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;

public class JCAExample {

public static void main(String[] args) throws Exception {
// Генерируем секретный ключ
KeyGenerator keyGenerator = KeyGenerator.getInstance("AES");
keyGenerator.init(128);
SecretKey secretKey = keyGenerator.generateKey();

// Шифруем данные
Cipher cipher = Cipher.getInstance("AES");
cipher.init(Cipher.ENCRYPT_MODE, secretKey);
byte[] encryptedData = cipher.doFinal("Hello, World!".getBytes());

// Дешифруем данные
cipher.init(Cipher.DECRYPT_MODE, secretKey);
byte[] decryptedData = cipher.doFinal(encryptedData);

System.out.println("Original data: " + new String(decryptedData));
}
}


В этом примере мы сначала генерируем секретный ключ для алгоритма AES, затем шифруем строку "Hello, World!" и дешифруем ее обратно. Это простой пример использования JCA для криптографии.

⚙️Java Cryptography Architecture предоставляет широкий выбор криптографических алгоритмов и возможность использования криптографии в безопасных Java приложениях. Использование JCA помогает программистам обеспечить безопасность и конфиденциальность данных в их приложениях.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍92🔥1
☕️Использование SonarQube

SonarQube – это инструмент статического анализа кода, который помогает программистам выявлять и исправлять ошибки, обнаруживать потенциальные уязвимости и улучшать качество кода. Он поддерживает множество языков программирования, включая Java.

🔔Один из основных методов SonarQube для анализа кода - это использование правил (rules). Правила определяют набор проверок, которые применяются к коду для выявления потенциальных проблем. SonarQube поставляется с большим количеством предустановленных правил, которые можно настраивать и расширять под конкретные нужды проекта.

➡️Еще один важный метод SonarQube - это использование метрик (metrics) для измерения качества кода. Метрики позволяют оценить различные аспекты кода, такие как сложность, размер, покрытие тестами и др. SonarQube предоставляет отчеты на основе метрик, которые помогают программистам понять, где можно улучшить свой код.

🔖В целом, SonarQube является мощным инструментом для улучшения качества и безопасности вашего кода на Java. Правильное использование его методов поможет вам избежать многих ошибок и повысить производительность вашего проекта.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7🔥21👏1
⌨️ Effectively final - это термин, который используется для описания переменной в Java, которая фактически ведет себя как final, хотя она не объявлена с ключевым словом final. То есть, хотя вы можете изменять значение этой переменной, вы это не делаете. Компилятор Java позволяет использовать такие переменные в лямбда-выражениях и анонимных классах, даже если они не объявлены как final.

В примере переменная x объявлена с ключевым словом final, поэтому ее значение не может быть изменено. Переменная y не объявлена как final, но внутри метода она не изменяется после инициализации, поэтому она считается "effectively final" и может быть использована в анонимных классах и лямбда-выражениях.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5👏31🔥1
public class Counter {

public static void main(String[] args) {
int counter = 0;
counter = counter++;
System.out.println(counter);
}

}
Что выведет код?
Anonymous Quiz
32%
0
58%
1
10%
ошибка компиляции
🗿10🎉2👎1🤩1😍1
☕️Использование прикладных шаблонов проектирования - для улучшения качества кода

Применение шаблонов проектирования позволяет повысить читаемость, расширяемость и поддерживаемость кода, а также уменьшить количество дублирующегося кода и повысить его стабильность. Одним из распространенных шаблонов проектирования является "Singleton", который гарантирует, что у класса есть только один экземпляр, и обеспечивает глобальную точку доступа к этому экземпляру.

Пример кода для реализации шаблона Singleton:


public class SingletonExample {
private static SingletonExample instance;

private SingletonExample() {
// Приватный конструктор
}

public static SingletonExample getInstance() {
if (instance == null) {
instance = new SingletonExample();
}
return instance;
}
}

Объяснение:
- Приватный конструктор предотвращает создание экземпляров класса извне.
- Статическое поле "instance" хранит единственный экземпляр класса.
- Метод "getInstance()" проверяет, существует ли уже экземпляр класса, и возвращает его. Если экземпляр не создан, то он создается и затем возвращается.

⚙️Использование шаблона Singleton в данном случае обеспечивает гарантированный единственный экземпляр класса в рамках приложения, что является полезным для создания объектов, представляющих синглтоны, такие как логгеры или конфигурационные объекты.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍144🔥2👏1
Java | Фишки и трюки
Чистый код: создание, анализ и рефакторинг Автор: Роберт Мартин Эту книгу должен прочитать каждый разработчик. А затем перечитывать каждый год! 😁 Плюс для джавистов в том что в книге все примеры написаны на Java. "Чистый код" Роберта Мартина – это практическое…
⌨️📚 Чистый код. Классы

Классы должны быть компактными.

Классы должны быть еще компактнее.

Имя класса должно описывать его ответственности. Отсюда можно и вычислить размер класса.

Функционал класса должен четко соответствовать и вписываться в название класса.

Разделяй связанность на маленькие классы. Жесткой и обильной связанности не должно быть — это усложняет поддержку и развитие проекта.

Помни о Single Responsibility. Сущность должна иметь одну и только одну причину для изменения.

Соблюдай инкапсуляцию. Ослабление инкапсуляции всегда должно быть последней мерой.

Обычно мы объявляем переменные и вспомогательные функции приватными, но иногда их нужно объявлять protected и иметь возможность обратиться к ней из теста.

Если группа функций относится к определенному функционалу, то эту группу функций можно и нужно выделить в отдельный класс и использовать его экземпляр.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12🔥21👏1
🌱 Аннотация @Transactional в Spring Framework используется для указания, что метод должен быть выполнен в рамках транзакции базы данных. Транзакция - это логическая единица работы с базой данных, которая обеспечивает атомарность, согласованность, изолированность и устойчивость (ACID) операций.

Когда метод помечается аннотацией @Transactional, Spring создает транзакцию перед выполнением метода, и завершает ее после выполнения метода. Если метод выполняется успешно, транзакция фиксируется (commit). Если возникает исключение, транзакция откатывается (rollback), и изменения, сделанные в рамках транзакции, отменяются.

Пример использования @Transactional в Spring:

import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

@Service
public class UserService {

private final UserRepository userRepository;

public UserService(UserRepository userRepository) {
this.userRepository = userRepository;
}

@Transactional
public void updateUser(User user) {
// Логика обновления пользователя в базе данных
userRepository.save(user);
}

@Transactional(readOnly = true)
public User getUserById(Long userId) {
// Логика получения пользователя из базы данных
return userRepository.findById(userId).orElse(null);
}
}


В этом примере метод updateUser() помечен как @Transactional, поэтому все операции базы данных, выполняемые внутри этого метода, будут выполнены в рамках одной транзакции. То же самое относится и к методу getUserById(), который также помечен аннотацией @Transactional, но с параметром readOnly = true, что указывает, что этот метод только читает данные из базы данных и не делает изменений.

Использование @Transactional позволяет управлять транзакциями на уровне методов, что делает код более чистым и поддерживаемым, а также обеспечивает надежность взаимодействия с базой данных.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍193👎1🔥1👏1👨‍💻1
☕️Использование ORM фреймворков

ORM (Object-Relational Mapping) фреймворки в Java позволяют программистам работать с базами данных, представляя данные в виде объектов, что упрощает процесс взаимодействия с БД. Несколько популярных технологий:

1. JPA (Java Persistence API): Стандартная спецификация для работы с объектно-реляционным отображением в Java. Пример использования JPA с Hibernate провайдером:

EntityManagerFactory emf = Persistence.createEntityManagerFactory("myPU");
EntityManager em = emf.createEntityManager();
em.getTransaction().begin();
Employee employee = new Employee("Jane", "Smith", 1200);
em.persist(employee);
em.getTransaction().commit();
em.close();


2. Hibernate: Один из наиболее широко используемых ORM-фреймворков в Java. Пример кода для сохранения объекта в базе данных с использованием Hibernate:

Session session = HibernateUtil.getSessionFactory().openSession();
session.beginTransaction();
Employee employee = new Employee("John", "Doe", 1000);
session.save(employee);
session.getTransaction().commit();
session.close();


3. Spring Data JPA: Часть Spring Data, облегчающая работу с JPA. Пример использования Spring Data JPA для поиска сущности по идентификатору:

Employee employee = employeeRepository.findById(1L).orElse(null);


4. MyBatis: Фреймворк, который предоставляет более SQL-центричный подход к ORM. Пример маппинга объекта на SQL запрос с помощью MyBatis:

<select id="selectEmployeeById" resultType="Employee">
SELECT * FROM employees WHERE id = #{id}
</select>


ORM фреймворки упрощают работу с базами данных в Java, позволяя разработчикам оперировать объектами вместо SQL запросов, что улучшает производительность и поддерживаемость кода. Каждый из перечисленных фреймворков имеет свои особенности и преимущества, поэтому выбор зависит от конкретных потребностей проекта.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍133🔥1👏1
public class Quest {
public static void main(String[] args) {
System.out.println(calc());
}

static int calc() {
try {
if (1 == 1)
throw new RuntimeException();
return 1;
} catch (Exception e) {
return 2;
} finally {
return 3;
}
}
}
👍5
Что выведет код?
Anonymous Quiz
14%
1
17%
2
41%
3
27%
ошибка компиляции
3🔥1🎉1
Два джуна померджили свои ветки
😁54🤣9👏2🤯1😱1
public class Quest {
public static void main(String[] args) {
System.out.println(5 + true);
}
}
Что выведет код?
Anonymous Quiz
6%
5
12%
6
28%
5true
54%
ошибка компиляции
🤩5🙈2🎉1
public class Quest {
public static void main(String[] args) {
System.out.println("5" + true);
}
}