Речь пойдет о static методах и атрибутах класса, зачем они используются, что дают они программистам.
Начнем с теории:
Модификатор static дает возможность разработчику иметь одно состояние объекта для всех экземпляров класса.
Где применяется?
К примеру у вас есть класс A который выполняет ряд каких то действий и вам нужно отслеживать какое действие выполняется в данный момент, для этого вам достаточно создать в классе A переменную, которая будет хранить состояние выполняемого действия.
Пример:
package com.devcolibri.core; public class A{ private static String stateDo; private static int countCallMethod = 0; public static void main(String[] args){ System.out.println("Для объекта - a"); A a = new A(); a.methodA(); getStateDo(); a.methodD(); getStateDo(); System.out.println("Для объекта - b"); A b = new A(); b.methodB(); getStateDo(); System.out.println("Для объекта - c"); A c = new A(); b.methodC(); getStateDo(); } public void methodA(){ // какие то действия stateDo = "Выполняется метод methodA()"; countCallMethod++; } public void methodB(){ // какие то действия stateDo = "Выполняется метод methodB()"; countCallMethod++; } public void methodC(){ // какие то действия stateDo = "Выполняется метод methodC()"; countCallMethod++; } public void methodD(){ // какие то действия stateDo = "Выполняется метод methodD()"; countCallMethod++; } public static void getStateDo() { System.out.println(stateDo + " call: " + countCallMethod); } }
Также я создал переменную которая показываю сколько раз был вызван любой метод с данного класса A переменная называется countCallMethod изначально равна нулю.
Результат выполнения кода:
Для объекта - a Выполняется метод methodA() call: 1 Выполняется метод methodD() call: 2 Для объекта - b Выполняется метод methodB() call: 3 Для объекта - c Выполняется метод methodC() call: 4
Еще static дает возможность получать доступ к методам и атрибутам класса без создание экземпляра этого класса. При условии что методы или атрибуты с модификатором static не есть private.
Продемонстрирую на том же примере, только в старом примере наши переменные есть private это не допустимо для демонстрации примера, поэтому я делаю их public, а также все методы делаю static, после моих изменений класс A будет выглядеть следующим образом:
package com.devcolibri.core; public class A{ public static String stateDo; public static int countCallMethod = 0; public static void main(String[] args){ System.out.println("Для объекта - a"); A.methodA(); System.out.println(A.stateDo + " call: " + A.countCallMethod); A.methodD(); System.out.println(A.stateDo + " call: " + A.countCallMethod); System.out.println("Для объекта - b"); WorkInFile.methodB(); System.out.println(A.stateDo + " call: " + A.countCallMethod); System.out.println("Для объекта - c"); WorkInFile.methodC(); System.out.println(A.stateDo + " call: " + A.countCallMethod); } public static void methodA(){ // какие то действия stateDo = "Выполняется метод methodA()"; countCallMethod++; } public static void methodB(){ // какие то действия stateDo = "Выполняется метод methodB()"; countCallMethod++; } public static void methodC(){ // какие то действия stateDo = "Выполняется метод methodC()"; countCallMethod++; } public static void methodD(){ // какие то действия stateDo = "Выполняется метод methodD()"; countCallMethod++; } }
Результат выполнения тот же:
Для объекта - a Выполняется метод methodA() call: 1 Выполняется метод methodD() call: 2 Для объекта - b Выполняется метод methodB() call: 3 Для объекта - c Выполняется метод methodC() call: 4
Теперь как вы заметили мы не создаем экземпляр данного класса, а просто вызываем методы этого класса и обращаемся к его атрибутам напрямую.
Для того что бы вызвать метод, мы обращаемся по имени класса к его параметрам A.stateDo или A.methodA();
ПОХОЖИЕ ПУБЛИКАЦИИ
- None Found
2 комментариев к статье "Статический метод и атрибуты класса в Java"
Добавить комментарий
Для отправки комментария вам необходимо авторизоваться.
Почему во втором примере для вызова методов B и C написано WorkInFile? Разве не должно быть А.methodB(); , А.methodС(); ?
Опечатка