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
10%
0
34%
1
17%
5
40%
Ошибка компиляции
👍3🤯3😱1👌1
☕️Использование библиотеки Vaadin

Vaadin - это Java библиотека для создания веб-приложений с использованием пользовательского интерфейса на основе компонентов. Она предоставляет набор готовых элементов управления и возможность создавать собственные компоненты.

➡️Один из основных классов в Vaadin - это UI, который представляет собой пользовательский интерфейс приложения. Для создания нового UI необходимо наследоваться от класса UI и переопределить метод init(), где создаются компоненты интерфейса.

Пример создания UI с использованием Vaadin:

public class MyUI extends UI {
@Override
protected void init(VaadinRequest request) {
Button button = new Button("Click me");
button.addClickListener(e -> Notification.show("Button clicked"));

setContent(button);
}
}


В данном примере мы создаем кнопку и добавляем к ней обработчик нажатия, который выводит уведомление при клике на кнопку.

✔️Еще один важный класс в Vaadin - это Layout, который представляет собой контейнер для компонентов. Существует несколько типов Layout, таких как VerticalLayout, HorizontalLayout, GridLayout и др. Каждый из них определяет способ размещения компонентов.

Пример использования Layout для размещения компонентов:

VerticalLayout layout = new VerticalLayout();
layout.addComponent(new Label("Hello, Vaadin!"));
layout.addComponent(new Button("Click me"));
setContent(layout);


⚙️В данном примере мы создаем вертикальный Layout, добавляем к нему Label и кнопку, и устанавливаем его как контент для UI.

Также Vaadin предоставляет множество других компонентов, таких как Table, Form, DateField и др., которые можно использовать для создания более сложных интерфейсов.

🔖В целом, Vaadin - это мощная библиотека для создания веб-приложений на Java с удобным и интуитивно понятным API. Она упрощает процесс разработки пользовательского интерфейса и позволяет создавать богатые и интерактивные веб-приложения.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍111🔥1👏1👨‍💻1
public class Quest {
public static void main(String[] args) {
System.out.println(true &! false);
}
}
Что выведет код?
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