В этой статье собраны 15 крутых Java-проектов для кодеров разных уровней подготовки – от простого калькулятора до полноценной соцсети.
Отличный шанс прокачать свои навыки и пополнить портфолио реальными работами.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2
Где и для чего используется модификатор abstract?
Пример
abstract class DataProcessor {
// Шаблонный метод - определяет алгоритм
public final void process() {
loadData();
transformData();
saveResult();
}
protected abstract void loadData();
protected abstract void transformData();
protected void saveResult() {
System.out.println("Сохранение результата...");
}
}
class CSVProcessor extends DataProcessor {
protected void loadData() {
System.out.println("Загрузка CSV файла");
}
protected void transformData() {
System.out.println("Парсинг и валидация CSV данных");
}
}
public class Main {
public static void main(String[] args) {
DataProcessor processor = new CSVProcessor();
processor.process();
}
}Ответ
Класс, помеченный модификатором abstract, называется абстрактным классом. Такие классы могут выступать только предками для других классов. Создавать экземпляры самого абстрактного класса не разрешается. При этом наследниками абстрактного класса могут быть как другие абстрактные классы, так и классы, допускающие создание объектов.
Метод, помеченный ключевым словом abstract - абстрактный метод, т.е. метод, который не имеет реализации. Если в классе присутствует хотя бы один абстрактный метод, то весь класс должен быть объявлен абстрактным.
Использование абстрактных классов и методов позволяет описать некий шаблон объекта, который должен быть реализован в других классах. В них же самих описывается лишь некое общее для всех потомков поведение.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3👍1
Где и для чего используется модификатор abstract?
Пример
abstract class DataProcessor {
// Шаблонный метод - определяет алгоритм
public final void process() {
loadData();
transformData();
saveResult();
}
protected abstract void loadData();
protected abstract void transformData();
protected void saveResult() {
System.out.println("Сохранение результата...");
}
}
class CSVProcessor extends DataProcessor {
protected void loadData() {
System.out.println("Загрузка CSV файла");
}
protected void transformData() {
System.out.println("Парсинг и валидация CSV данных");
}
}
public class Main {
public static void main(String[] args) {
DataProcessor processor = new CSVProcessor();
processor.process();
}
}Ответ
Класс, помеченный модификатором abstract, называется абстрактным классом. Такие классы могут выступать только предками для других классов. Создавать экземпляры самого абстрактного класса не разрешается. При этом наследниками абстрактного класса могут быть как другие абстрактные классы, так и классы, допускающие создание объектов.
Метод, помеченный ключевым словом abstract - абстрактный метод, т.е. метод, который не имеет реализации. Если в классе присутствует хотя бы один абстрактный метод, то весь класс должен быть объявлен абстрактным.
Использование абстрактных классов и методов позволяет описать некий шаблон объекта, который должен быть реализован в других классах. В них же самих описывается лишь некое общее для всех потомков поведение.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥5❤3
В идеальных случаях разработчики могут сокращать код буквально до пары строк, но для этого нужно отделить бизнес-логику от остального кода.
Сделать это можно с помощью аспектно-ориентированного программирования (AOP) — языка для определения именованного аспекта. О нем и пойдет речь в этой статье.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
public class Quiz {
record Point(int x, int y) {}
public static void main(String[] args) {
Object obj = new Point(3, 4);
String result = switch (obj) {
case Point(int x, int y) when x == y -> "Equal";
case Point(int x, int y) -> "Sum: " + (x + y);
default -> "Unknown";
};
System.out.println(result);
}
}
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3🔥2
В статье вы узнаете, что это такое, и как этим пользоваться на реальных примерах и советах.
Please open Telegram to view this post
VIEW IN TELEGRAM
🤣3👍1🔥1
Где и для чего используется модификатор abstract?
Пример
import java.util.Random;
public class RandomExample {
public static void main(String[] args) {
// 1. Math.random() - простой случайный double
double randomDouble = Math.random();
System.out.println("Math.random: " + randomDouble);
// 2. Random класс с seed для воспроизводимости
Random random = new Random(42);
// Разные типы данных
int randomInt = random.nextInt(100); // 0-99
double randomDbl = random.nextDouble();
boolean randomBool = random.nextBoolean();
System.out.println("Random int: " + randomInt);
System.out.println("Random double: " + randomDbl);
System.out.println("Random boolean: " + randomBool);
// 3. ThreadLocalRandom для многопоточности
java.util.concurrent.ThreadLocalRandom.current()
.ints(3, 1, 10)
.forEach(n -> System.out.println("Stream random: " + n));
}
}
Ответ
Math.random() возвращает double в диапазоне [0.0, 1.0) и использует единственный статический Random объект под капотом, что может вызывать конкуренцию в многопоточности. Класс Random позволяет:
– Генерировать разные типы данных (int, long, float)
– Работать с несколькими seed'ами
– Создавать изолированные экземпляры для потоков
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔8🤡5💩2🤮1
public class Quiz {
public static void main(String[] args) {
String s1 = "hello";
String s2 = new String("hello");
String s3 = s2.intern();
System.out.println(s1 == s2);
System.out.println(s1 == s3);
System.out.println(s2 == s3);
}
}
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1
Что выведет код?
Anonymous Quiz
21%
true, true, false
27%
false, true, false
36%
false, false, true
16%
true, false, true
🤔15
Что такое Spring Boot? — Spring Boot упрощает создание мощных приложений, добавляя несколько зависимостей и выполняя минимальную настройку.
Всего несколько строк кода позволяют настроить конечные точки HTTP, подключиться к базе данных и обрабатывать события.
Please open Telegram to view this post
VIEW IN TELEGRAM
Stream.map() — это промежуточная операция в Java Stream API, которая преобразует каждый элемент потока, применяя к нему заданную функцию. Результатом является новый поток с преобразованными элементами.
Преимущества:
– Упрощает преобразование данных без циклов
– Работает в цепочке операций Stream
– Поддерживает параллельное выполнение
import java.util.*;
public class StreamMapExample {
public static void main(String[] args) {
List<String> fruits = Arrays.asList("apple", "banana", "cherry");
List<String> upperCaseFruits = fruits.stream()
.map(String::toUpperCase) // Преобразуем в верхний регистр
.toList();
System.out.println(upperCaseFruits); // [APPLE, BANANA, CHERRY]
// Преобразование строк в их длины
List<Integer> lengths = fruits.stream()
.map(String::length)
.toList();
System.out.println(lengths); // [5, 6, 6]
}
}
👀 Stream.map() особенно полезен для преобразования данных между форматами, извлечения конкретных полей из объектов и работы с числовыми преобразованиями.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥2🤔1
Целых 14 страниц статей, теории и фишек. Везде есть подробное объяснение на русском языке вместе с примерами кода.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2🤡1
Collectors.groupingBy() — это коллектор из Java Stream API, который группирует элементы потока по заданному критерию, возвращая Map, где ключ — критерий группировки, а значение — список элементов.
Преимущества:
– Упрощает группировку данных без ручного создания Map
– Поддерживает сложные критерии группировки
– Может комбинироваться с другими коллекторами
import java.util.*;
import java.util.stream.*;
public class GroupingByExample {
public static void main(String[] args) {
List<String> words = Arrays.asList("apple", "banana", "apricot", "berry", "avocado");
// Группировка по первой букве
Map<Character, List<String>> groupedByFirstLetter = words.stream()
.collect(Collectors.groupingBy(word -> word.charAt(0)));
System.out.println(groupedByFirstLetter);
// {a=[apple, apricot, avocado], b=[banana, berry]}
// Группировка по длине слова
Map<Integer, List<String>> groupedByLength = words.stream()
.collect(Collectors.groupingBy(String::length));
System.out.println(groupedByLength);
// {5=[apple, berry], 6=[banana], 7=[apricot, avocado]}
}
}
Особенности:
– Возвращает Map<K, List<T>>
– Может использовать метод-ссылки, лямбды или сложные предикаты
– Поддерживает каскадную группировку
👀 Особенно полезен в анализе и категоризации данных, построении отчетов и статистики, группировке объектов.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3🔥1🤔1
public class Main {
public static void main(String[] args) {
Test test = new Test();
test.process(10);
test.process(10.0);
}
}
class Test {
void process(int i) {
System.out.print("A");
}
void process(double d) {
System.out.print("B");
}
void process(Integer i) {
System.out.print("C");
}
}Please open Telegram to view this post
VIEW IN TELEGRAM
🤡9❤2
🤔31🤡16😁1
Многие с этого канала как-либо работают с Java, но все ли осознают, насколько много у Java возможностей? В этой статье вы узнаете о всех масштабах и возможностях данного языка.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2🤣1
String.join() — это статический метод класса String, который объединяет несколько строк в одну с использованием указанного разделителя.
Преимущества:
— Простой и читаемый способ конкатенации строк
— Избегает ручного управления разделителями
— Поддерживает коллекции и массивы
import java.util.*;
public class StringJoinExample {
public static void main(String[] args) {
// Объединение массива строк
String[] colors = {"красный", "зеленый", "синий"};
String result1 = String.join(" | ", colors);
System.out.println(result1); // красный | зеленый | синий
// Объединение коллекции
List<String> cities = Arrays.asList("Москва", "Санкт-Петербург", "Казань");
String result2 = String.join(", ", cities);
System.out.println(result2); // Москва, Санкт-Петербург, Казань
// Динамическое формирование пути
String path = String.join("/", "home", "user", "documents", "file.txt");
System.out.println(path); // home/user/documents/file.txt
// Объединение без разделителя
String words = String.join("", "Hello", "World");
System.out.println(words); // HelloWorld
}
}
Особенности:
— Не изменяет исходные строки
— Возвращает новую строку
— Принимает CharSequence (String, StringBuilder и т.д.)
👀 Особенно полезен в формировании CSV строк из коллекций, создании путей файловой системы и генерация SQL-запросов с IN условиями.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥3🤡1
class Parent {
static void print() {
System.out.print("Parent ");
}
void show() {
System.out.print("ParentShow ");
}
}
class Child extends Parent {
static void print() {
System.out.print("Child ");
}
@Override
void show() {
System.out.print("ChildShow ");
}
}
public class Main {
public static void main(String[] args) {
Parent obj = new Child();
obj.print();
obj.show();
Child child = new Child();
child.print();
}
}Please open Telegram to view this post
VIEW IN TELEGRAM
Что выведет код?
Anonymous Quiz
30%
Parent ChildShow Child
39%
Child ChildShow Child
12%
Parent ParentShow Parent
19%
Ошибка компиляции