Java. Статические переменные и методы

max аватар
104
Находится в разделах:

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

Представим, что имеется класс-утилита, содержащий метод, который всегда запускается одинаково; например, функция, возвращающая, скажем, случайное число.  Не имеет значения, объект какого класса содержит этот метод - он всегда будет себя вести одинаково. Другими словами, поведение метода не зависит от состояния объекта. Возникает вопрос: Зачем же использовать объект, когда метод никогда не будет объектно-зависимым? Почему бы просто не попросить класс выполнить метод самостоятельно?

 

Представим другой сценарий: Предположим, Вы хотите хранить число созданных объектов определенного класса. Где Вы фактически будете хранить переменную? Эта идея не сработает, если хранить ее в виде объектной переменной.

Переменные и методы, помеченные как static, принадлежат классу, а не определенному объекту.Вы можете использовать метод static или переменную без каких-либо объектов данного класса.

Следующий пример демонстрирует объявление и использование статической переменной-счетчика:

В этом примере, статическая переменная frogCount устанавливается в ноль, когда класс Frog впервые загружается виртуальной машиной, раньше, чем создаться первый объект класса Frog.

Как только первый объект создан, конструктор Frog запускается и увеличивает значение переменной frogCount на единицу. 

Теперь представим, что бы было, если бы frogCount  была бы объектной переменной, нестатической.

Когда кот выполнится, она должна будет создать три объекта класса Frog, но результатом будет ошибка компилятора!

JVM не знает, к какой переменной fromCount вы хотите доступиться, или другими словами, в каком она объекте. 


Конец
Леонардо да Винчи более, чем уверен в том, что любое препятствие преодолевает настойчивость.

Спасибо за хороший пример Smile

Отправить комментарий

CAPTCHA
Чтобы оставить комментарий, введите пожалуйста код, изображенный на картинке
Image CAPTCHA
Введите символы, изображенные на картинке