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

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

✍️По всем вопросам: @Pascal4eg
Download Telegram
⌨️ Что такое «статический класс»?

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

Это означает, что он связан с внешним классом, но при этом не имеет доступа к нестатическим членам внешнего класса, если только они не предоставляются явно.

Экземпляр статического вложенного класса создается без необходимости создания экземпляра внешнего класса. Это отличается от обычных вложенных (внутренних) классов, которые требуют создания экземпляра внешнего класса.


public class Outer {
private static String staticMember = "Static Member";
private String instanceMember = "Instance Member";

// Статический вложенный класс
public static class StaticNested {
public void display() {
// Доступ к статическому члену внешнего класса
System.out.println(staticMember);

// Нельзя напрямую обращаться к нестатическому члену внешнего класса
// System.out.println(instanceMember); // Ошибка компиляции
}
}

public static void main(String[] args) {
// Создание экземпляра статического вложенного класса
Outer.StaticNested nestedObject = new Outer.StaticNested();
nestedObject.display();
}
}


#java #static #class
Please open Telegram to view this post
VIEW IN TELEGRAM
👍101🔥1👏1
⌨️ Что такое «локальный класс»? Каковы его особенности?

Local inner class (Локальный класс) - это вложенный класс, который может быть декларирован в любом блоке, в котором разрешается декларировать переменные. Как и простые внутренние классы (Member inner class) локальные классы имеют имена и могут использоваться многократно. Как и анонимные классы, они имеют окружающий их экземпляр только тогда, когда применяются в нестатическом контексте.

Локальные классы имеют следующие особенности:

Видны только в пределах блока, в котором объявлены;

Не могут быть объявлены как private/public/protected или static;

Не могут иметь внутри себя статических объявлений методов и классов, но могут иметь финальные статические поля, проинициализированные константой;

Имеют доступ к полям и методам обрамляющего класса;

Могут обращаться к локальным переменным и параметрам метода.


public class OuterClass {

void someMethod() {
int localVar = 10;

// Локальный класс внутри метода
class LocalClass {
void display() {
// Локальный класс имеет доступ к переменным метода
System.out.println("Local variable: " + localVar);
}
}

LocalClass local = new LocalClass();
local.display();
}

public static void main(String[] args) {
OuterClass outer = new OuterClass();
outer.someMethod();
}
}


#java #local #inner #class
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9🔥21
⌨️ Какие существуют особенности использования вложенных классов: статических и внутренних? В чем заключается разница между ними?

Вложенные классы могут обращаться ко всем членам обрамляющего класса, в том числе и приватным.

Для создания объекта статического вложенного класса объект внешнего класса не требуется.

Из объекта статического вложенного класса нельзя обращаться к не статическим членам обрамляющего класса напрямую, а только через ссылку на экземпляр внешнего класса.

Обычные вложенные классы не могут содержать статических методов, блоков инициализации и классов. Статические вложенные классы - могут.

В объекте обычного вложенного класса хранится ссылка на объект внешнего класса. Внутри статической такой ссылки нет. Доступ к экземпляру обрамляющего класса осуществляется через указание .this после его имени. Например: Outer.this.

#java #nested #static #class
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4🔥1👏1👨‍💻1
⌨️ Что такое «анонимные классы»? Где они применяются?

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

Анонимные классы имеют несколько ограничений:

✔️ Их использование разрешено только в одном месте программы - месте его создания;

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

✔️ Реализует лишь методы своего интерфейса или суперкласса, т.е. не может объявлять каких-либо новых методов, так как для доступа к ним нет поименованного типа.

Анонимные классы обычно применяются для:

✔️ создания объекта функции (function object), например, реализация интерфейса Comparator;

✔️ создания объекта процесса (process object), такого как экземпляры классов Thread, Runnable и подобных;

✔️ в статическом методе генерации;

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

#java #abstract #class
Please open Telegram to view this post
VIEW IN TELEGRAM
👍61🔥1👏1
⌨️ Что такое "статический класс"?

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

Статический вложенный класс имеет несколько особенностей, отличающих его от обычных вложенных классов:

1️⃣ Нет привязки к экземпляру внешнего класса
Статический вложенный класс не связан с экземпляром внешнего класса. Это означает, что он может быть создан без необходимости создавать объект внешнего класса. В отличие от обычного вложенного класса, который всегда ассоциирован с экземпляром внешнего класса, статический вложенный класс может быть использован независимо.

2️⃣ Доступ к членам внешнего класса
Статический вложенный класс может обращаться только к статическим членам (поля и методы) внешнего класса. Он не имеет доступа к нестатическим членам внешнего класса, поскольку не существует привязки к экземпляру внешнего класса.

Пример:

public class OuterClass {
private static int staticVar = 10;
private int nonStaticVar = 20;

static class StaticNestedClass {
void display() {
// Доступ к статическому полю внешнего класса
System.out.println("Static variable from outer class: " + staticVar);

// Ошибка компиляции: нестатическое поле нельзя использовать в статическом вложенном классе
// System.out.println("Non-static variable from outer class: " + nonStaticVar);
}
}
}

public class Main {
public static void main(String[] args) {
// Создаем экземпляр статического вложенного класса
OuterClass.StaticNestedClass nestedObject = new OuterClass.StaticNestedClass();
nestedObject.display();
}
}


Для чего используется:
✔️ Когда вложенный класс не должен иметь доступа к состоянию экземпляра внешнего класса.

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

#java #static #class
Please open Telegram to view this post
VIEW IN TELEGRAM
👍151