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

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

✍️По всем вопросам: @Pascal4eg
Download Telegram
⌨️ Могут ли нестатические методы перегрузить статические?

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

#java #overload #static
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥62👨‍💻2
public class Quest {

public static void main(String[] args) {
int i = 1;
System.out.print(i);
System.out.print(change(i));
System.out.print(i);
}

public static int change(int i) {
i = 2;
return i;
}

}


#java #quest
👍2
Что выведет код?
Anonymous Quiz
12%
111
64%
121
24%
122
🔥6🤯2🎉1
⌨️ Способы передачи параметров в методы

Существуют два основных способа передачи параметров в методы: "по значению" (pass-by-value) и "по ссылке" (pass-by-reference). В первом случае метод работает с копией значения параметра, не изменяя исходное значение. Во втором случае метод получает ссылку на объект или переменную, и любые изменения в параметре отражаются на исходном объекте или переменной.

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

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

#java #pass #value #reference
Please open Telegram to view this post
VIEW IN TELEGRAM
👍72🔥1👏1
public class Quest {
public static void main(String[] args) {
Value val = new Value(1);
System.out.print(val.i);
System.out.print(change(val).i);
System.out.print(val.i);
}

public static Value change(Value val) {
val.i = 2;
return val;
}

static class Value {
int i;
public Value(int i) {
this.i = i;
}
}
}


#java #quest
👍2
Что выведет код?
Anonymous Quiz
10%
111
39%
121
51%
122
👍6🤯2😱1🎉1🤡1
⌨️ К каким конструкциям Java применим модификатор static?

полям;
методам;
вложенным классам;
блокам инициализации;
членам секции import.

#java #static
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8🔥3🤝1
⌨️ В Java static import (статический импорт) позволяет импортировать статические члены (методы и поля) из класса, чтобы использовать их напрямую без указания имени класса. Это может сделать код более читабельным и компактным.


// Для импорта конкретного статического члена
import static package.Clazz.member;

// Для импорта всех статических членов класса
import static package.Clazz.*;


Пример:

public class MathUtils {
public static final double PI = 3.141592653589793;
public static int add(int a, int b) {
return a + b;
}
public static int subtract(int a, int b) {
return a - b;
}
}



import static MathUtils.PI;
import static MathUtils.add;

public class Main {
public static void main(String[] args) {
System.out.println("Value of PI: " + PI);
System.out.println("Addition result: " + add(5, 3));
}
}



import static MathUtils.*;

public class Main {
public static void main(String[] args) {
System.out.println("Value of PI: " + PI);
System.out.println("Addition result: " + add(5, 3));
System.out.println("Subtraction result: " + subtract(5, 3));
}
}


Плюсы: читаемость, компактность кода.

Минусы:
- не очевидно откуда берется поле или метод
- импорт всех статических членов может привести к конфликтам имен, если разные классы содержат статические члены с одинаковыми именами

#java #static #import
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10🔥21👏1🤡1👨‍💻1
public class Quest {
public static void main(String[] args) {
System.out.println(!!true);
}
}


#java #quest
Что выведет код?
Anonymous Quiz
45%
true
6%
false
7%
!!true
42%
ошибка компиляции
🤯4🎉3👍2😱1🤩1😍1
⌨️ Можно ли сузить уровень доступа/тип возвращаемого значения при переопределении метода?

При переопределении метода нельзя сузить модификатор доступа к методу (например с public в MainClass до private в Class extends MainClass).

Изменить тип возвращаемого значения при переопределении метода нельзя, будет ошибка attempting to use incompatible return type.

Можно сузить возвращаемое значение, если они совместимы.


public class Animal {
public Animal eat() {
System.out.println("animal eat");
return null;
}

public Long calc() {
return null;
}
}



public class Dog extends Animal {
public Dog eat() {
return new Dog();
}

/*attempting to use incompatible return type
public Integer calc() {
return null;
}
*/
}


#java #override
Please open Telegram to view this post
VIEW IN TELEGRAM
21👍1
Историческая справка

#java #meme #interview
😁32🤣11👏2🤩1
⌨️ Типы конструкторов

Конструктор по умолчанию (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