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

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

✍️По всем вопросам: @Pascal4eg
Download Telegram
⌨️ Типы конструкторов

Конструктор по умолчанию (Default Constructor)
Это конструктор без параметров, который автоматически создается компилятором, если в классе не объявлено ни одного конструктора. Он будет пустым и не делает ничего, кроме вызова конструктора суперкласса.

public class MyClass {
private int number;
private String text;

// Компилятор создаст конструктор по умолчанию:
// public MyClass() {
// super();
// }
}


Конструктор с параметрами (Parameterized Constructor)
Это конструктор, который принимает один или несколько параметров, используемых для инициализации полей класса. Если объявлен хотя бы один конструктор с параметрами, конструктор по умолчанию больше не создается автоматически (его нужно явно определить, если он нужен).

public class MyClass {
private int number;
private String text;

public MyClass(int number, String text) {
this.number = number;
this.text = text;
}
}


Конструктор копирования (Copy Constructor)
Это конструктор, который создает новый объект как копию существующего объекта того же класса.

public class MyClass {
private int number;
private String text;

// Конструктор копирования
public MyClass(MyClass other) {
this.number = other.number;
this.text = other.text;
}
}

#java #constructor
Please open Telegram to view this post
VIEW IN TELEGRAM
👍83🔥1👨‍💻1
⌨️ Виды классов

1. Обычные классы (Regular Classes)
Это наиболее распространенные классы, которые вы создаете для определения объектов. Они могут содержать поля, методы, конструкторы и вложенные классы.

public class MyClass {
private int field;

public MyClass(int field) {
this.field = field;
}

public void method() {
// some code
}
}


2. Абстрактные классы (Abstract Classes)
Абстрактные классы не могут быть созданы как объекты напрямую. Они предназначены для предоставления общей функциональности, которую подклассы должны реализовать или дополнить.

public abstract class AbstractClass {
public abstract void abstractMethod();

public void concreteMethod() {
// some code
}
}


3. Вложенные классы (Nested Classes)
Классы, объявленные внутри другого класса. Они могут быть статическими или нестатическими.

🔹 Статические вложенные классы (Static Nested Classes):
Эти классы могут быть созданы без экземпляра внешнего класса.

public class OuterClass {
static class StaticNestedClass {
// some code
}
}


🔹 Внутренние классы (Inner Classes):
Эти классы имеют доступ ко всем членам внешнего класса и создаются в контексте экземпляра внешнего класса.

public class OuterClass {
class InnerClass {
// some code
}
}


4. Локальные классы (Local Classes)
Классы, объявленные внутри метода, конструктора или блока. Они имеют доступ к финальным переменным из охватывающего метода.

public class OuterClass {
public void method() {
class LocalClass {
// some code
}
LocalClass local = new LocalClass();
}
}


5. Анонимные классы (Anonymous Classes)
Классы без имени, создаваемые на месте для реализации интерфейса или наследования от класса. Часто используются для создания экземпляров интерфейсов или абстрактных классов.

public class OuterClass {
public void method() {
Runnable runnable = new Runnable() {
@Override
public void run() {
// some code
}
};
}
}


6. Перечисления (Enums)
Специальные классы, представляющие набор констант. Они могут содержать поля, методы и конструкторы.

public enum Day {
MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY
}


7. Интерфейсы (Interfaces)
Технически не классы, но важная часть объектно-ориентированного программирования в Java. Интерфейсы определяют контракты, которые должны быть реализованы классами.

public interface MyInterface {
void myMethod();
}


8. Записи (Records)
Нововведение в Java 14 (в предварительном виде) и официально в Java 16. Они предоставляют компактный способ создания неизменяемых классов с полями и автоматически сгенерированными методами, такими как equals, hashCode и toString.

public record Point(int x, int y) {}


#java #classes
Please open Telegram to view this post
VIEW IN TELEGRAM
13👍7🔥5❤‍🔥1👏1👨‍💻1
Какие побитовые операции вы знаете?


~ Побитовый унарный оператор NOT;
& Побитовый AND;
&= Побитовый AND с присваиванием;
| Побитовый OR;
|= Побитовый OR с присваиванием;
^ Побитовый исключающее XOR;
^= Побитовый исключающее XOR с присваиванием;
>> Сдвиг вправо (деление на 2 в степени сдвига);
>>= Сдвиг вправо с присваиванием;
>>> Сдвиг вправо без учёта знака;
>>>= Сдвиг вправо без учёта знака с присваиванием;
<< Сдвиг влево (умножение на 2 в степени сдвига);
<<= Сдвиг влево с присваиванием.


#java #bitwise
👍18🔥51👏1
public class Quest {

public static void main(String[] args) {
System.out.println(condition(null) ? 1 : 2);
}

public static boolean condition(Number o) {
return true;
}

public static boolean condition(Long l) {
return false;
}

}
👍2
Что выведет код?
Anonymous Quiz
25%
1
19%
2
56%
ошибка компиляции
3👍2👏2🎉1💯1
⌨️ Полезные стримы. Поиск максимального

Дан список людей с именем и возрастом. Нужно найти самого старшего.
import java.util.Comparator;
import java.util.List;

record Person(String name, int age) {}

public class StreamExample {
public static void main(String[] args) {
List<Person> people = List.of(
new Person("Alice", 30),
new Person("Bob", 20),
new Person("Charlie", 40)
);

people.stream()
.max(Comparator.comparingInt(Person::age))
.ifPresent(person -> System.out.println("Oldest person: " + person.name()));
// Вывод: Oldest person: Charlie
}
}

#java #stream #max
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥19👍43
Java | Фишки и трюки
Чистый код: создание, анализ и рефакторинг Автор: Роберт Мартин Эту книгу должен прочитать каждый разработчик. А затем перечитывать каждый год! 😁 Плюс для джавистов в том что в книге все примеры написаны на Java. "Чистый код" Роберта Мартина – это практическое…
⌨️📚 Чистый код. Объекты и структуры данных

Ты должен работать с абстракциями, чтобы реализацию можно было легко изменить.

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

Ты должен предоставлять API, с которым стоит работать и скрывать детали реализации, структуру. Так будет проще работать с такими сущностями и добавлять новые виды поведений, функционала и реализаций.

DTO — Data Transfer Object. Класс, который содержит только данные и никакого функционала. Нужен для того, чтобы передавать какие-то данные. Объект такого класса должен быть неизменяемым.

#java #objects #cleancode
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥1
public class Quest {
{
System.out.println(i);
}
int i;

public Quest(int i){
this.i = i;
}

public static void main(String[] args) {
new Quest(1);
}
}

#java #quest
Что выведет код?
Anonymous Quiz
22%
0
30%
1
48%
ошибка компиляции
🤔92👍1🔥1😱1🎉1
⌨️ Для чего в Java используются статические блоки инициализации?

Статические блоки инициализация используются для выполнения кода, который должен выполняться один раз при инициализации класса загрузчиком классов, в момент, предшествующий созданию объектов этого класса при помощи конструктора. Такой блок (в отличие от нестатических, принадлежащих конкретном объекту класса) принадлежит только самому классу (объекту метакласса Class).

#java #static #initialization
Please open Telegram to view this post
VIEW IN TELEGRAM
👍91🔥1
⌨️ Что произойдёт, если в блоке инициализации возникнет исключительная ситуация?

Для нестатических блоков инициализации, если выбрасывание исключения прописано явным образом требуется, чтобы объявления этих исключений были перечислены в throws всех конструкторов класса. Иначе будет ошибка компиляции. Для статического блока выбрасывание исключения в явном виде, приводит к ошибке компиляции.

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

#java #initialization #exception
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5🔥21
😢25😁15🤣6👨‍💻2🤪21🌚1💊1
⌨️ Внутренняя реализация StringBuilder

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

Класс StringBuilder использует массив символов для хранения строки и динамически изменяет его размер по мере необходимости. Переменная count отслеживает текущую длину строки.
Упрощенно:

public final class StringBuilder extends AbstractStringBuilder implements java.io.Serializable, CharSequence {
char[] value; // Массив символов, хранящий содержимое строки
int count; // Количество символов в текущем объекте StringBuilder
}


Примерная реализация метода append:

public StringBuilder append(String str) {
if (str == null) str = "null";
int len = str.length();
ensureCapacityInternal(count + len); // расширить массив если нужно
str.getChars(0, len, value, count);
count += len;
return this;
}


Метод str.getChars(..) копирует строку str в массив value в позицию count (то есть добавляет в конец массива).

#java #stringbuilder #implementation
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5🔥31👨‍💻1
⌨️ Полезные стримы. Группировка

Дан список людей с именем и городом проживания. Нужно сгруппировать их по городам.

import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

record Person(String name, String city) {}

public class StreamExample {
public static void main(String[] args) {
List<Person> people = List.of(
new Person("Alice", "New York"),
new Person("Bob", "Los Angeles"),
new Person("Charlie", "New York"),
new Person("David", "Los Angeles"),
new Person("Edward", "San Francisco")
);

Map<String, List<Person>> peopleByCity = people.stream()
.collect(Collectors.groupingBy(Person::city));

peopleByCity.forEach((city, peopleInCity) -> {
System.out.println(city + ": " + peopleInCity.stream()
.map(Person::name)
.collect(Collectors.joining(", ")));
});
// Вывод:
// San Francisco: Edward
// New York: Alice, Charlie
// Los Angeles: Bob, David
}
}


#java #stream #grouping
Please open Telegram to view this post
VIEW IN TELEGRAM
👍23🔥4👏21
⌨️ Какое исключение выбрасывается при возникновении ошибки в блоке инициализации класса?

Если возникшее исключение - наследник RuntimeException:

- для статических блоков инициализации будет выброшено java.lang.ExceptionInInitializerError;

- для нестатических будет проброшено исключение-источник.

Если возникшее исключение - наследник Error, то в обоих случаях будет выброшено java.lang.Error. Исключение: java.lang.ThreadDeath - смерть потока. В этом случае никакое исключение выброшено не будет.

#java #initialization #exception
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3🔥2👏1
class Dog {
public static void bark() {
System.out.print("Woof ");
}
}

class Basenji extends Dog {
public static void bark() { }
}

public class Bark {
public static void main(String[] args) {
Dog woofer = new Dog();
Dog nipper = new Basenji();
woofer.bark();
nipper.bark();
}
}


#java #quest
🔥71👍1
Что выведет код?
Anonymous Quiz
44%
Woof Woof
46%
Woof
10%
<ничего>
😁7🔥2❤‍🔥1🎉1🤣1
⌨️ Как получить доступ к переопределенным методам родительского класса?

С помощью ключевого слова super мы можем обратиться к любому члену родительского класса - методу или полю, если они не определены с модификатором private.


super.method();


#java #override #super
Please open Telegram to view this post
VIEW IN TELEGRAM
👍132👏1👨‍💻1
⌨️ Полезные стримы. Объединение стримов

Даны два списка фруктов. Нужно объединить их в одном стриме, обработать его и вывести результат.


var list1 = List.of("apple", "banana", "cherry");
var list2 = List.of("orange", "pineapple", "mango");

var result = Stream.concat(list1.stream(), list2.stream())
.filter(s -> s.length() > 5)
.toList();

System.out.println(result);
// [banana, cherry, orange, pineapple]


#java #stream #concat
Please open Telegram to view this post
VIEW IN TELEGRAM
👍23🔥21👏1
This media is not supported in your browser
VIEW IN TELEGRAM
Переиспользуем код в новом проекте

#java #meme #reuse
😁26👍12🤣2🤗1