Java – известный язык программирования, который пользуется огромным спросом у разработчиков. Позволяет работать с различными классами, объектами и методами. Все это необходимо знать, создавая то или иное приложение.
Далее предстоит изучить статические и нестатические методы в Джаве. Эта информация пригодится как новичкам, так и более опытным специалистам. Предстоит изучить модификатор static, его применение к методам, классам, переменным и блокам инициализации.
Анатомия static
В Java есть нестатические переменные и статические. Первые относятся к конкретному объекту в пределах программного когда. Они привязываются к экземплярам класса. Статические связаны со статическими объектами класса.
То же самое происходит с методами. Они в Java могут быть статическими и «обычными». Статический метод класса привязан только к статическому объекту класса. Обращаться он способен исключительно к статическим переменным и/или иным methods класса соответствующего типа.
Для создания обычного метода у класса требуется создать его объект (экземпляр). Только после этого вызывать method у объекта. Вызов обычного метода не у объекта, а у класса невозможен.
Можно вызвать статичный метод путем создания статического объекта класса, который всегда существует после загрузки класса непосредственно в память устройства. Из-за этого main() является статическим. Он привязан к статичному экземпляру класса, а для его вызова никаких дополнительных объектов не требуется.
Форма записи и пример
Статические методы классов имеют элементарную форму записи:
Статические поля, переменные и другие компоненты кода всегда задаются за счет ключевого слова static.
Ниже представлен наглядный пример – статический блок программного кода:
public class Solution
{
public static void main(String args[])
{
test();
}
public static void test()
{
int a = 2/0;
}
}
В данном случае метод main() будет вызван Java-машиной при помощи команды solution.main(). Статический метод test() вызывается в статическом main(). Других вариантов предложенный код не предусматривает.
Вызовы
Для вызова статических методов из других классов необходимо указывать имя класса перед именем соответствующего метода. Должна использоваться следующая форма записи:
Вот наглядные примеры статических методов класса:
Исходный код | Static methods |
Int b = math.max(a, b) | Int max (int a, int b) |
Thread.sleep(300) | Void sleep(long ms) |
Path path = path.of(«c:\\readme.txt») | Path of(string str) |
Все это поможет понять особенности, которые обладают нестатические и статические компоненты в Java.
Сравнение с обычными методами
Далее статические методы будут сравниваться с обычными. Эта информация пригодится каждому разработчику на Джаве.
Обычный method связан с объектом – экземпляром класса. Статические методы соответствующей связи не имеют. Обычные компоненты кода способны обращаться в переменным в своем экземпляре класса, а статические – нет. Связано это с тем, что у них просто отсутствуют связанные объекты.
Параметр | Обычные методы | Статические методы классов |
Связи для создания экземпляра | + | — |
Может вызывать обычные methods класса | + | — |
Может ли вызывать статические methods | + | + |
Обращение к обычным переменным класса | + | — |
Обращение к статическим переменным класса | + | + |
Возможность вызова у объекта | + | + |
Возможность вызова у class | — | + |
Статический метод – это компонент, который обладает серьезными и многочисленными ограничениями. Его значение все равно остается важным для разработчиков. Связано это с преимуществами изучаемого элемента разработки. Далее все «плюсы» использования static-компонентов будут рассмотрены более подробно.
К ключевым преимуществам static-элементов в Java относят:
- Простое обращение к методам и переменным. Для него не потребуется передавать ссылки на объекты.
- Иногда в рамках проекта требуется, чтобы переменная была реализована один раз. Единственный ее экземпляр обеспечивается за счет static-компонентов.
- Возможность вызова method еще до того, как разработчик получает право на создание тех или иных объектов. Пример – main(). В нем начинается работа приложения: JVM обращается к соответствующему методу до создания экземпляра класса.
Остальные особенности статических методов класса будут изучены более подробно далее. Они рассматривается в сравнении с обычными methods.
Связь с экземпляром класса
При вызове обычного method в него будет передаваться скрытый параметр. В качестве него выступает объект, у которого вызвали «алгоритм». Соответствующий параметр именован как this. Он является скрытым и является ссылкой на вызываемый экземпляр класса. Выступает одним из ключевых отличий рассматриваемых элементов разработки на Java.
У статических методов скрытых параметров и иных подобных компонентов нет. Внутри них нельзя пользоваться ключевым словом this. Из соответствующих «алгоритмов» не получится обратиться к нестатическим процедурам. Связано это с тем, что ссылку на экземпляр класса неоткуда взять.
Разница в вызовах
За счет скрытого параметра this обычные «функции» вызываются при помощи ссылок на объекты классов. Ниже – наглядный пример:
Все это приводит к тому, что обычная «процедура» не может быть вызвана из статического.
Статические методы допускается вызывать из любой части программного кода. Это значит, что к ним можно обращаться как из статических функций, так и из обычных. Никаких ограничений кроме технического задания в данной области нет.
Обращения к обычным переменным класса
Из обычной «процедуры» можно обратиться к обычным переменным класса. Это связано с тем, что при реализации операции происходит обращение к переменным экземпляра класса. Его легко извлечь, используя всего один параметр – this.
В случае со статическими «процедурами» ситуация складывается иначе: система не знает, из какого экземпляра класса ему брать значения обычных переменных. Это влечет за собой простой принцип – обратиться к обычным переменным класса из статических «функций» нельзя.
Соответствующая операция влечет за собой вызов обычной «процедуры», у которой будут отсутствовать связи с имеющимися в программном коде объектами.
Обращение к статическим переменным класса
Обращения к статическим членам класса осуществляются по тем же принципам, что и в случае с методами. Операция возможна, причем из любого места исходного кода. Это значит, что Java допускает обращения из статических и обычных «процедур».
Вызов у объектов
Обычные и статические методы класса разрешается вызывать у объектов. Первый вариант доступен из-за того, что это – единственный возможный способ «взаимодействия». Статическая «процедура» у объекта тоже может быть вызвана. В данном ситуации тип переменной определяется автоматически.
Исходный код приложения | Как код рассматривается компилятором |
Thread th = Thread.current();th.sleep(50000); | Thread th = Thread.current();Thread.sleep(50000); |
Integer i = 1;int x = i.parseInt(«12»); | Integer i = 1;int x = Integer.parseInt(«12»); |
«».valueOf(12); | String.valueOf(12); |
Выше – таблица из двух колонок, которая поможет объяснить принцип работы с рассматриваемым компонентом с позиции компилятора. Понимать соответствующий момент должен каждый разработчик. Это необходимо для составления грамотного исходного кода программного обеспечения.
Возможность вызова у класса
Последняя особенность, на которую необходимо обратить внимание – это вызов у class. Для реализации соответствующей операции можно использовать только статические методы Java. Обычные процедуры вызов у classes не поддерживают.
Данный принцип указывает на то, что при работе с обычными «процедурами» не допускается использование формы:
Использование в интерфейсах
С появлением Java 8 разработчики получили возможность работать со static methods в интерфейсах. Их поведение напоминает принципы работы методов по умолчанию (default methods). Отличия есть – упомянутый изначально компонент не может быть предопределен методами в реализующих интерфейс классах.
Все это позволяет избежать возникновения ошибок при отладке и запуске исходного кода. Выше – наглядный пример реализации static method в интерфейсе.
Ключевые моменты
Для понимания рассматриваемой темы сделано многое. Статические методы имеют следующие особенности:
- Вызов во время компиляции. Они никогда не могут быть переопределены. Соответствующее правило работает и для static methods интерфейсов.
- Статическими не могут быть abstract methods.
- Рассматриваемые «процедуры» не умеют ни при каких обстоятельствах взаимодействовать с this и super.
- Не могут напрямую обращаться к переменным экземпляра, а также его методам. Для этого обязательно требуется ссылка на объект, которая у рассматриваемых «процедур» отсутствует.
- Поля и static methods – это не потокобезопасные компоненты. Используемые переменные нуждаются в дополнительной защите от одновременного обращения к ней нескольких потоков. Для этого static final (static-переменная) должна быть синхронизированной.
- Связь происходит во время компиляции. Обычные «процедуры» связываются друг с другом непосредственно во время исполнения.
Теперь понятно, что собой представляет статический метод в упомянутом языке. Лучше разобраться в особенностях применения соответствующего элемента программного кода помогут специализированные компьютерные курсы. На них в срок от пары месяцев до года пользователя научат с «нуля» программировать не только на Java, но и на других языках разработки. Клиенты могут выбрать курс с учетом уже имеющегося багажа знаний и сочетать их по собственному усмотрению.
В процессе дистанционного обучения ученики смогут просмотреть пропущенные вебинары в виде записей занятий. Клиентам гарантируются круглосуточное кураторство опытными специалистами и помощь в формировании портфолио, а также богатая практика. При успешном завершении курса приобретенные навыки и знание пользователь сможет подтвердить официальным электронным сертификатом.