Рубрики
Без рубрики

Когда мы хотим использовать статический класс?

Каждую неделю я буду просматривать хэштег #HelpMeCode в Твиттере и искать вопросы что я … Помеченный ооп, java.

Каждую неделю я буду просматривать хэштег #HelpMeCode в Твиттере и искать вопросы, на которые, как я считаю, я могу помочь ответить и которые выиграют от более глубокого погружения, чем предлагает платформа Twitter.

Сегодняшний твит:

Ошибка жидкости: внутренняя

Мой сегодняшний пост написан в ответ на запрос от @@forjoe . Ему интересно, как получить доступ к методам в классе из классов в другом пакете на Java.

Привет, я так стараюсь разобраться в этом. Если у меня есть классы (страницы), и я создаю класс (Навигация по меню) в другом пакете, который содержит методы, я хочу, чтобы все классы имели доступ. Что мне делать?

Отличный вопрос, Ричард! На самом деле есть два возможных ответа, и мы рассмотрим оба здесь.

Первый способ – просто ответить на вопрос, который вы задали в лоб: как мне вызвать все эти методы из классов, которые находятся в другом пакете? Это достаточно легко сделать. Нам нужно импортировать этот класс (Навигация по меню) в классы, из которых мы хотим их вызывать. После того, как мы это сделаем, мы сможем создать новый экземпляр навигации по меню и выполнить его методы.

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

import Actions.MenuNavigation;

Позже в ветке Twitter пользователь @Duiker101 указывает, что отображаемая структура классов вполне может подходить для реализации статического класса. Но что именно является статическим классом и когда его следует использовать?

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

MenuNavigation nav = new MenuNavigation();

Делает именно это. Он создает новый экземпляр класса навигации по меню и присваивает этот экземпляр переменной ‘nav’. В любом случае, что такое класс без экземпляра? Я часто описываю классы как архитектурные чертежи. Они описывают, как построить дом, но вы не можете в нем жить.

Иногда мы не хотим, чтобы там было несколько копий наших экземпляров. Или мы не хотим, чтобы была возможность случайного создания нескольких копий. В качестве примера рассмотрим класс конфигурационных переменных. Он может считывать значения из файла при первом запуске программы. Он также может повторно считывать обновленные значения в различные моменты во время выполнения нашей программы. При типичной настройке нам пришлось бы создать экземпляр этого класса, прежде чем мы смогли бы загрузить в него значения, что означает, что у нас есть потенциальные проблемы, связанные с его уничтожением до того, как мы закончим с ним, что приведет к потере наших значений или созданию нескольких экземпляров с разными значениями. Черт возьми!

В статическом классе фактически создается один и только один экземпляр нашего класса. Это делается за кулисами без нашего участия, и это позволяет нам получать доступ к методам и свойствам класса без повторного создания каждого экземпляра. Нам не нужно беспокоиться об уничтожении этого экземпляра слишком рано, потому что мы не можем! Это решение идеально подходит и для конфигурации Ричарда, описанной выше. Предполагая, что навигационное меню загружается один раз при запуске программы и никогда не изменяет ее функциональность, это хороший кандидат для статического класса.

Объявление статического класса в Java немного сложнее. Это не может быть класс “корневого уровня”, это должен быть подкласс. Поэтому для примера Ричарда я изменил его, чтобы основной класс с именем “Меню” был определен как общедоступный класс. Мой статический класс является подклассом этого класса корневого уровня, определенного с помощью ключевого слова ‘static’. Методы, к которым я хочу получить доступ, также должны содержать ключевое слово static в своих определениях.

Сделав это, теперь я могу ссылаться на класс навигации по меню в своем классе домашней страницы без создания экземпляра. Когда эта программа будет выполнена, Java создаст экземпляр для меня, будет управлять им и сделает его доступным по запросу.

Итак, вот как и где вы можете использовать статический класс в Java. Имейте в виду, что это применимо к любому языку ООП, поддерживающему статические классы, включая C#.

* Найдите весь учебный контент Бена здесь, в CBT Nuggets – http://learn.gg/ben-finkel *

Оригинал: “https://dev.to/benfinkel/when-do-we-want-to-use-a-static-class-2n10”