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
56%
true
7%
false
37%
Ошибка компиляции
👍43🔥1🎉1
⌨️ Что вы знаете о методе main()?

Метод main() - точка входа в программу. В приложении может быть несколько таких методов. Если метод отсутствует, то компиляция возможна, но при запуске будет получена ошибка `Error: Main method not found`.


public static void main(String[] args) {}
Please open Telegram to view this post
VIEW IN TELEGRAM
👍29💯21🔥1
public class Quest {
public static void main(String[] args) {
System.out.println(isEqual(1, 1));
}

private static boolean isEqual(int i, int j) {
return (i == j) ? null : false;
}
}
Что выведет код?
Anonymous Quiz
12%
true
12%
false
46%
null
30%
NullPointerException
🤯8😱1🎉1
⌨️ Как ^, | и & работают с целочисленными операндами

Пример:

int a = 3 & 5;
int b = 3 | 5;
int c = 3 ^ 5;

System.out.println(a); // 1
System.out.println(b); // 7
System.out.println(c); // 6


Чтобы думать как Java, нужно:
Перевести значения обоих операндов в двоичную систему счисления.

Расположить результаты перевода друг под другом.

Сравнять в них число разрядов (дополнить лидирующими нулями).

Применить к битам из каждого столбца оператор (&, | или ^).

Записать результат каждой операции ниже в том же столбце.

Перевести итог в десятичную форму.

Потренеруемся на примере 3 & 5:
Число 3 в двоичной системе счисления имеет вид 11, а число 5 — 101.

Так как у числа 5 три разряда в двоичной системе, а у числа 3 — всего два, добавим лидирующий ноль к числу 3 в двоичной системе и получим 011.

Берём цифры из обоих чисел и применяем к ним попарно оператор & (AND):

011
&&&
101
===
001

Получаем число 001. В десятичной записи ему соответствует число 1. Поэтому операция 3 & 5 и возвращает в результате 1.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍18🔥53👨‍💻2
public class Quest {
public static void main(String[] args) {
String s = null;
if (s != null & s.length() > 0) {
System.out.println("FULL");
} else {
System.out.println("EMPTY");
}
}
}
👏8🎉3🤯1😱1🤩1
public class Quest {
public static void main(String[] args) {
int i = 0;
System.out.println(--i++);
}
}
😁18
Что выведет код?
Anonymous Quiz
36%
-1
26%
0
7%
1
30%
Ошибка компиляции
🤯7🎉3😁1👌1
System.out.println(true ^ true & false);
Что выведет код?
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