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
41%
true
59%
false
👏6👍3🤯3🎉2
⌨️ Логические операторы

«И» (AND): конъюнкция, логическое умножение

true && true = true
false && false = false
true && false = false
false && true = false

true & true = true
false & false = false
true & false = false
false & true = false

Побитовые операции:
1010
&&&&
1001
====
1000


Включающее «ИЛИ» (OR): дизъюнкция, логическое сложение

true || true = true
false || false = false
true || false = true
false || true = true

true | true = true
false | false = false
true | false = true
false | true = true

Побитовые операции:
1010
||||
1001
====
1011


Исключающее «ИЛИ» (XOR): строгая дизъюнкция, логическое вычитание

true ^ true = false
false ^ false = false
true ^ false = true
false ^ true = true

Побитовые операции:
1010
^^^^
1001
====
0011


«НЕ» (NOT): инверсия, отрицание

!true = false
!false = true

Побитовый унарный оператор NOT:
~~
01
==
10



Порядок выполнения операторов

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

! ~ (NOT)
& (AND)
^ (XOR)
| (OR)
&& (условный AND)
|| (условный OR)

Если одинаковые операции стоят по соседству, то раньше выполняется та, что левее.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3332❤‍🔥1🔥1👏1💯1👨‍💻1
⌨️ Почему нельзя объявить метод интерфейса с модификатором final?

В случае интерфейсов указание модификатора final бессмысленно, т.к. все методы интерфейсов неявно объявляются как абстрактные, т.е. их невозможно выполнить, не реализовав где-то еще, а этого нельзя будет сделать, если у метода идентификатор final.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍131🔥1👏1
⌨️ Зачем нужен модификатор abstract?

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

Абстрактный метод, который помечен ключевым словом abstract, не имеет реализации в абстрактном классе. Если в классе есть хотя бы один абстрактный метод, то весь класс должен быть объявлен как абстрактный.

Использование абстрактных классов и методов позволяет определить общий шаблон объекта, который должен быть реализован в других классах. В них же самих описывается лишь некое общее для всех потомков поведение.
Please open Telegram to view this post
VIEW IN TELEGRAM
17👍1
⌨️ Дайте определение понятию «интерфейс». Какие модификаторы по умолчанию имеют поля и методы интерфейсов?

Ключевое слово interface используется для создания полностью абстрактных классов. Основное предназначение интерфейса - определять каким образом мы можем использовать класс, который его реализует. Создатель интерфейса определяет имена методов, списки аргументов и типы возвращаемых значений, но не реализует их поведение. Все методы неявно объявляются как public.

Начиная с Java 8 в интерфейсах разрешается размещать реализацию методов по умолчанию default и статических static методов.

Интерфейс также может содержать и поля. В этом случае они автоматически являются публичными public, статическими static и неизменяемыми final.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍161🔥1👏1
⌨️ Чем абстрактный класс отличается от интерфейса? В каких случаях следует использовать абстрактный класс, а в каких интерфейс?

В Java класс может одновременно реализовать несколько интерфейсов, но наследоваться только от одного класса.

Абстрактные классы используются только тогда, когда присутствует тип отношений «is a» (является). Интерфейсы могут реализоваться классами, которые не связаны друг с другом.

Абстрактный класс - средство, позволяющее избежать написания повторяющегося кода, инструмент для частичной реализации поведения. Интерфейс - это средство выражения семантики класса, контракт, описывающий возможности. Все методы интерфейса неявно объявляются как public abstract или (начиная с Java 8 ) default - методами с реализацией по-умолчанию, а поля - public static final.

Интерфейсы позволяют создавать структуры типов без иерархии.

Наследуясь от абстрактного, класс «растворяет» собственную индивидуальность. Реализуя интерфейс, он расширяет собственную функциональность.

Абстрактные классы содержат частичную реализацию, которая дополняется или расширяется в подклассах. При этом все подклассы схожи между собой в части реализации, унаследованной от абстрактного класса, и отличаются лишь в части собственной реализации абстрактных методов родителя. Поэтому абстрактные классы применяются в случае построения иерархии однотипных, очень похожих друг на друга классов. В этом случае наследование от абстрактного класса, реализующего поведение объекта по умолчанию может быть полезно, так как позволяет избежать написания повторяющегося кода. Во всех остальных случаях лучше использовать интерфейсы.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍17🔥21👏1
20😁14🤣5🔥3🤯2🤪2
public class Quest {
public static void main(String[] args) {
boolean b = false;
System.out.println(b++);
}
}


#java #quest
Что выведет код?
Anonymous Quiz
13%
false
11%
true
5%
1
70%
Ошибка компиляции
👍6🎉21😍1🏆1
⌨️ Почему в некоторых интерфейсах вообще не определяют методов?

Это так называемые маркерные интерфейсы. Они просто указывают что класс относится к определенному типу. Примером может послужить интерфейс Clonable, который указывает на то, что класс поддерживает механизм клонирования.

#java #interface #marker
Please open Telegram to view this post
VIEW IN TELEGRAM
👍52🔥1
Что имеет более высокий уровень абстракции?
Anonymous Quiz
5%
класс
24%
абстрактный класс
70%
интерфейс
👍4🔥2❤‍🔥1🎉1
⌨️ Зачем нужны и какие бывают блоки инициализации?

Блоки инициализации представляют собой код, заключенный в фигурные скобки и размещаемый внутри класса вне объявления методов или конструкторов.

Существуют статические и нестатические блоки инициализации.

Статический блок инициализации выполняется в момент загрузки класса в JVM загрузчиком классов (Class Loader).

public class StaticInitialization {
static {
System.out.println("Статическая инициализация");
}
}


Нестатический блок инициализации выполняется в момент создания класса (new).

public class NonstaticInitialization {
{
System.out.println("Нестатическая инициализация");
}
}


Несколько блоков инициализации выполняются в порядке следования в коде класса.

Блок инициализации способен генерировать исключения, если их объявления перечислены в throws всех конструкторов класса.

Блок инициализации возможно создать и в анонимном классе.

#java #initialization #block #static
Please open Telegram to view this post
VIEW IN TELEGRAM
👍93🔥1
public class Test {

public static int VAL;

{
VAL = 5;
}

public Test() {
VAL = 10;
}

public static void print() {
System.out.println(VAL);
}

}

public class Quest {
public static void main(String[] args) {
Test.print();
}
}


#java #quest
Что выведет код?
Anonymous Quiz
11%
0
38%
5
25%
10
26%
ошибка компиляции
🔥9🤯61🎉1
😁41🤣11👍3🙈2🤪1
Domain-Driven Design (DDD) — это методология разработки программного обеспечения, ориентированная на понимание и моделирование бизнес-домена. Она ставит акцент на использовании общего языка между бизнесом и разработчиками, создании детальной модели бизнес-домена, определении сущностей, значений, агрегатов, сервисов и репозиториев для построения гибких, понятных и масштабируемых систем.

DDD подчеркивает важность использования общего, ясного языка (Язык Унифицированного Домена (Ubiquitous Language)), понятного и для бизнеса, и для разработчиков. Это позволяет уменьшить разрыв между бизнесом и разработкой.

#java #DDD #domain #driven #design
👍41🔥1👨‍💻1
⌨️ Каким образом можно получить доступ к члену класса, объявленному как private?

Внутри класса доступ к приватной переменной открыт без ограничений;

Вложенный класс имеет полный доступ ко всем (в том числе и приватным) членам содержащего его класса;

Доступ к приватным переменным извне может быть организован через отличные от приватных методов, которые предоставлены разработчиком класса (геттеры, сеттеры). Например: getX() и setX().

Через механизм рефлексии (Reflection API):


class Hide {
private int field = 42;
}
...
Hide hide = new Hide();
Field field = Hide.class.getDeclaredField("field");
field.setAccessible(true);
int fieldValue = (int) field.get(hide);


#java #private #access
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥11👍31
Какие логические операции и операторы вы знаете?


& Логическое AND (И);
&& Сокращённое AND;
| Логическое OR (ИЛИ);
|| Сокращённое OR;
^ Логическое XOR (исключающее OR (ИЛИ));
! Логическое унарное NOT (НЕ);
&= AND с присваиванием;
|= OR с присваиванием;
^= XOR с присваиванием;
== Равно;
!= Не равно;
?:: Тернарный (троичный) условный оператор.


#java #logical #operations
6🔥2👏2
public class One {
public static void go() {
System.out.print("one ");
}
}



public class Two extends One {
public static void go() {
System.out.print("two ");
}
}



public class Three extends Two {
public static void go() {
System.out.print("three ");
}
}



public class Quest {
public static void main(String[] args) {
One one = new One();
one.go();

One two = new Two();
two.go();

Two two2 = new Three();
two2.go();
}
}


#java #quest
👍103🎉2🤔1