Тесты Пообщаться с GPT Протестировать код
Программирование Аналитика Дизайн Маркетинг Управление проектами
16 Авг 2023
2 мин
119

Работа со статическими элементами в классах Java

Пройдите тест, узнайте какой профессии подходите
Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Существует типичная проблема, с которой сталкиваются новички при изучении Java: неясность смысла и использования ключевого слова static. Давайте рассмотрим

Существует типичная проблема, с которой сталкиваются новички при изучении Java: неясность смысла и использования ключевого слова static. Давайте рассмотрим это на примере.

1
2
3
4
5
6
7
public class MyClass {
    MyObject myObject = new MyObject();
 
    public static void main(String args[]) {
        myObject.doSomething();
    }
}

При компиляции такого кода возникнет ошибка «Cannot access non-static field in static method main». Почему так происходит?

Суть проблемы в том, что статические методы (как, например, main) не имеют доступа к нестатическим переменным класса. В нашем случае myObject — это нестатическая переменная, и статический метод main не имеет к ней доступа.

Чтобы исправить ошибку, можно сделать переменную myObject статической:

1
2
3
4
5
6
7
public class MyClass {
    static MyObject myObject = new MyObject();
 
    public static void main(String args[]) {
        myObject.doSomething();
    }
}

Теперь код будет работать корректно. Но что же делает ключевое слово static?

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

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

Таким образом, ключевое слово static имеет важное значение в Java. Оно позволяет создавать переменные и методы, которые принадлежат самому классу, а не его экземплярам, и которые доступны всем экземплярам этого класса.

Добавить комментарий