Это вложенный класс, объявленный с использованием ключевого слова
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
👍10❤1🔥1👏1
🎉2❤🔥1❤1🤡1
Паттерн MVC (Model-View-Controller) — это архитектурный шаблон, используемый для разделения приложения на три основных компонента: модель, представление и контроллер. Это помогает улучшить организацию кода, облегчить его поддержку и тестирование.
Модель (Model) предоставляет данные и реагирует на команды контроллера, изменяя своё состояние.
Представление (View) отвечает за отображение данных модели пользователю, реагируя на изменения модели.
Контроллер (Controller) интерпретирует действия пользователя, оповещая модель о необходимости изменений.
Основная цель применения этой концепции состоит в отделении бизнес-логики (модели) от её визуализации (представления, вида). За счёт такого разделения повышается возможность повторного использования кода. Наиболее полезно применение данной концепции в тех случаях, когда пользователь должен видеть те же самые данные одновременно в различных контекстах и/или с различных точек зрения. В частности, выполняются следующие задачи:
1️⃣ К одной модели можно присоединить несколько видов, при этом не затрагивая реализацию модели. Например, некоторые данные могут быть одновременно представлены в виде электронной таблицы, гистограммы и круговой диаграммы;
2️⃣ Не затрагивая реализацию видов, можно изменить реакции на действия пользователя (нажатие мышью на кнопке, ввод данных) — для этого достаточно использовать другой контроллер;
3️⃣ Ряд разработчиков специализируется только в одной из областей: либо разрабатывают графический интерфейс, либо разрабатывают бизнес-логику. Поэтому возможно добиться того, что программисты, занимающиеся разработкой бизнес-логики (модели), вообще не будут осведомлены о том, какое представление будет использоваться.
#java #pattern #MVC
Модель (Model) предоставляет данные и реагирует на команды контроллера, изменяя своё состояние.
Представление (View) отвечает за отображение данных модели пользователю, реагируя на изменения модели.
Контроллер (Controller) интерпретирует действия пользователя, оповещая модель о необходимости изменений.
Основная цель применения этой концепции состоит в отделении бизнес-логики (модели) от её визуализации (представления, вида). За счёт такого разделения повышается возможность повторного использования кода. Наиболее полезно применение данной концепции в тех случаях, когда пользователь должен видеть те же самые данные одновременно в различных контекстах и/или с различных точек зрения. В частности, выполняются следующие задачи:
1️⃣ К одной модели можно присоединить несколько видов, при этом не затрагивая реализацию модели. Например, некоторые данные могут быть одновременно представлены в виде электронной таблицы, гистограммы и круговой диаграммы;
2️⃣ Не затрагивая реализацию видов, можно изменить реакции на действия пользователя (нажатие мышью на кнопке, ввод данных) — для этого достаточно использовать другой контроллер;
3️⃣ Ряд разработчиков специализируется только в одной из областей: либо разрабатывают графический интерфейс, либо разрабатывают бизнес-логику. Поэтому возможно добиться того, что программисты, занимающиеся разработкой бизнес-логики (модели), вообще не будут осведомлены о том, какое представление будет использоваться.
#java #pattern #MVC
👍4❤2🔥1
java.util.function и предназначен для представления операции, которая принимает один входной аргумент и не возвращает результата. Этот интерфейс используется для операций, выполняемых с объектом, но не возвращающих значения, таких как вывод данных, модификация объектов и выполнение побочных эффектов.Интерфейс
Consumer аннотирован @FunctionalInterface, что означает, что он предназначен для использования с лямбда-выражениями и содержит ровно один абстрактный метод:
void accept(T t);
Выполняет операцию над переданным аргументом типа T.
Пример:
List<String> strings = Arrays.asList("a", "b", "c");
Consumer<String> printer = System.out::println;
strings.forEach(printer);
// a
// b
// c
Еще один:
List<String> list = Arrays.asList("a", "b", "c");
Consumer<List<String>> listModifier = l -> l.add("d");
listModifier.accept(list);
System.out.println(list); // [a, b, c, d]
#java #consumer
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9❤🔥1👨💻1
This media is not supported in your browser
VIEW IN TELEGRAM
Юзеры не знают своих героев...
❤28👍9😁9🔥4💯2👏1🤣1
Local inner class (Локальный класс) - это вложенный класс, который может быть декларирован в любом блоке, в котором разрешается декларировать переменные. Как и простые внутренние классы (Member inner class) локальные классы имеют имена и могут использоваться многократно. Как и анонимные классы, они имеют окружающий их экземпляр только тогда, когда применяются в нестатическом контексте.
Локальные классы имеют следующие особенности:
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🔥2❤1
.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
👍6❤1🔥1👏1
public class Quest {
public static void main(String[] args) {
System.out.print(condition1() && condition2());
}
private static boolean condition1() {
System.out.print(1);
return false;
}
private static boolean condition2() {
System.out.print(2);
return true;
}
}🔥3❤1
❤3🎉1😍1
java.time.format и был введен в Java 8 в рамках новой Date and Time API.DateTimeFormatter содержит предопределенные форматы, такие как ISO_LOCAL_DATE, ISO_LOCAL_TIME, ISO_LOCAL_DATE_TIME, BASIC_ISO_DATE и другие. Так же, DateTimeFormatter поддерживает создание пользовательских форматов с использованием шаблонов.Форматирование даты и времени:
LocalDateTime now = LocalDateTime.now();
// Использование предопределенного формата
DateTimeFormatter formatter = DateTimeFormatter.ISO_LOCAL_DATE_TIME;
String formattedDate = now.format(formatter);
System.out.println("ISO_LOCAL_DATE_TIME: " + formattedDate);
// ISO_LOCAL_DATE_TIME: 2024-06-20T21:46:43.584659
// Использование пользовательского формата
DateTimeFormatter customFormatter = DateTimeFormatter.ofPattern("dd-MM-yyyy HH:mm:ss");
String customFormattedDate = now.format(customFormatter);
System.out.println("Custom format: " + customFormattedDate);
// Custom format: 20-06-2024 21:46:43
Парсинг строки в дату и время:
String dateStr = "2024-06-20T15:30:00";
// Использование предопределенного формата
DateTimeFormatter formatter = DateTimeFormatter.ISO_LOCAL_DATE_TIME;
LocalDateTime dateTime = LocalDateTime.parse(dateStr, formatter);
System.out.println("Parsed date (ISO_LOCAL_DATE_TIME): " + dateTime);
// Parsed date (ISO_LOCAL_DATE_TIME): 2024-06-20T15:30
// Использование пользовательского формата
String customDateStr = "20.06.2024 15:30:00";
DateTimeFormatter customFormatter = DateTimeFormatter.ofPattern("dd.MM.yyyy HH:mm:ss");
LocalDateTime customDateTime = LocalDateTime.parse(customDateStr, customFormatter);
System.out.println("Parsed date (custom format): " + customDateTime);
// Parsed date (custom format): 2024-06-20T15:30
#java #DateTimeFormatter
Please open Telegram to view this post
VIEW IN TELEGRAM
❤🔥5👍2🔥2❤1
Иногда возникает необходимость передать исключение дальше по стеку вызовов, чтобы оно было обработано на более высоком уровне. Для этого можно использовать ключевое слово
throws в сигнатуре метода и не перехватывать исключение в блоке catch, либо пробросить исключение дальше внутри блока catch.
public void someMethod() throws IOException {
try {
// код, который может выбросить IOException
} catch (IOException e) {
// возможно, выполнить какую-то обработку
throw e; // проброс исключения дальше
}
}
#java #throw #throws
Please open Telegram to view this post
VIEW IN TELEGRAM
❤5
❤4👏2🎉1
Heap (куча) используется Java Runtime для выделения памяти под объекты и классы. Создание нового объекта также происходит в куче. Это же является областью работы сборщика мусора. Любой объект, созданный в куче, имеет глобальный доступ и на него могут ссылаться из любой части приложения.
Stack (стек) это область хранения данных также находящееся в общей оперативной памяти (RAM). Всякий раз, когда вызывается метод, в памяти стека создается новый блок, который содержит примитивы и ссылки на другие объекты в методе. Как только метод заканчивает работу, блок также перестает использоваться, тем самым предоставляя доступ для следующего метода. Размер стековой памяти намного меньше объема памяти в куче. Стек в Java работает по схеме LIFO (Последний-зашел-Первый-вышел)
Различия между Heap и Stack памятью:
✔️ Куча используется всеми частями приложения, в то время как стек используется только одним потоком исполнения программы.
✔️ Всякий раз, когда создается объект, он всегда хранится в куче, а в памяти стека содержится лишь ссылка на него. Память стека содержит только локальные переменные примитивных типов и ссылки на объекты в куче.
✔️ Объекты в куче доступны с любой точки программы, в то время как стековая память не может быть доступна для других потоков.
✔️ Стековая память существует лишь какое-то время работы программы, а память в куче живет с самого начала до конца работы программы.
✔️ Если память стека полностью занята, то Java Runtime бросает исключение java.lang.StackOverflowError. Если заполнена память кучи, то бросается исключение java.lang.OutOfMemoryError: Java Heap Space.
✔️ Размер памяти стека намного меньше памяти в куче.
✔️ Из-за простоты распределения памяти, стековая память работает намного быстрее кучи.
Для определения начального и максимального размера памяти в куче используются -Xms и -Xmx опции JVM. Для стека определить размер памяти можно с помощью опции -Xss.
#java #heap #stack #memory
Please open Telegram to view this post
VIEW IN TELEGRAM
👏14❤3👍3
Не совсем. Примитивное поле экземпляра класса хранится не в стеке, а в куче. Любой объект (всё, что явно или неявно создаётся при помощи оператора new) хранится в куче.
#java #heap #stack #question
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10👎4❤1
public class Quest {
public static void main(String[] args) {
String str1 = "Hello World";
String str2 = new String("Hello World");
Set<String> set = new HashSet<>();
set.add(str1);
set.add(str2);
for (String str : set) {
if (str == str1) {
System.out.print("origin ");
}
if (str == str2) {
System.out.print("replace ");
}
}
}
}👍8