|
|||||||
Статические методы
Время создания: 05.09.2017 23:53
Текстовые метки: knowledge
Раздел: Java - Tutorial - Object and Classes
Запись: xintrea/mytetra_db_mcold/master/base/1504644807xt3a03lbc7/text.html на raw.githubusercontent.com
|
|||||||
|
|||||||
— В примере выше у нас объявлен класс Cat, у которого есть 4 переменные: a,b,s – обычные, а count – статическая. Если создать несколько объектов такого класса (например, 3 шт.), то каждый из них будет содержать свою собственную копию обычных переменных класса. Статическая же переменная – общая на всех. Формально она даже не находится внутри этих объектов, т.к. существует даже тогда, когда ни одного объекта класса Cat создано не было. — Вот что произойдет, если мы объявим переменную s статической: — Ага. Вроде понятно. — А можно объявить одинаковые переменные? — В методе — нет. Все переменные, объявленные внутри метода, должны иметь уникальные имена. Аргументы метода также считаются его переменными. — А как насчёт переменных класса? — Переменные класса тоже должны быть уникальными в рамках каждого конкретного класса. Но есть исключение – имена переменных метода и переменных класса могут совпадать. — А если мы в коде изменяем переменную, а таких переменных две, какая будет изменяться? — Если в методе видны (доступны) несколько переменных, например, переменная класса и переменная метода, то тогда обращение произойдет к переменной метода. Пример с двумя переменными count class Main { public int count = 0; //объявили переменную класса public void run() { count = 15; //обращение к переменной класса int count = 10; //объявили локальную переменную метода count ++; //обращение к переменной метода } } — В этом коде объявлены две переменных count. В строке 3 объявлена переменная класса, а в строке 8 – переменная метода. — Когда метод run будет исполняться, то произойдет вот что: — В строке 8 мы обращаемся к переменной класса и присваиваем ей значение 15 — В строке 9 объявляется (создается) новая переменная метода – count. Она закрывает собой переменную класса. Любой дальнейший код в методе будет видеть (обращаться) именно к переменной метода. — Понятно. — Переменная метода закрывает собой переменную класса. Т.е. обращение будет происходить к переменной метода. Но к переменной класса тоже можно обратиться, только более сложным способом.
— А что ещё за статические методы и статические переменные? — Статические методы и переменные привязаны не к объектам класса, а непосредственно к самому классу. Т.е. если мы создадим 10 объектов класса Variables из примера в самом начале уровня, у нас будет 10 переменных classVariable (по одной на каждый объект) и всего одна общая переменная TEXT. — У меня тут вопрос. — А чем отличаются статические и нестатические методы? — Давай рассмотрим, как работает обычный нестатический метод:
— При вызове метода в виде «объект» точка «имя метода», на самом деле вызывается метод класса, в который первым аргументом передаётся тот самый объект. Внутри метода он получает имя this. Именно с ним и его данными происходят все действия. — Нифига себе. Так вот как, оказывается, оно все работает! — А вот как работает статический метод:
— При вызове статического метода, никакого объекта внутрь не передаётся. Т.е. this равен null, поэтому статический метод не имеет доступа к нестатическим переменным и методам (ему нечего передать в такие методы в качестве this). — Хм. Вроде понятно. Хотя как-то поверхностно. — А вот и дядя Диего… С его задачками. |
|||||||
Так же в этом разделе:
|
|||||||
|
|||||||
|