Поля даних, оголошені в класі як static. є загальними для всіх об'єктів класу і називаються змінними класу. Якщо один об'єкт змінить значення такого поля, то це зміна побачать всі об'єкти. Для роботи зі статичними атрибутами використовуються статичні методи, оголошені з специфікатором static. Такі методи є методами класу, не прив'язані ні до якого об'єкту і не містять покажчика this на конкретний об'єкт, що викликав метод. Статичні методи реалізують парадигму «раннього пов'язуючи-ня», жорстко визначає версію методу на етапі компіляції. Через недоступність покажчика this статичні поля і методи не можуть звертатися до нестатичних полів і методів безпосередньо, так як для звернення до статичних полів і методів досить імені класу, в якому вони визначені.
// приклад # 4. статичні метод і поле: Mark.java
publicclass Mark
privateint mark = 3;
publicdouble getResult ()
return (double) coeff * mark / 100;
publicstaticvoid setCoeffFloat (float c)
publicvoid setMark (int mark)
this .mark = mark;
// з статичного методу можна звернутися до нестатичних полів і методів
/ * Public static int getResult ()
При створенні двох об'єктів
Mark ob1 = new Mark ();
Mark ob2 = new Mark ();
Значення ob1.coeff і ob2.coeff і дорівнює 5. оскільки розташовується в одній і тій же області пам'яті. Змінити значення статичного члена можна прямо через ім'я класу:
Виклик статичного методу також слід здійснювати за допомогою вказівки:
ClassName.methodName (). а саме:
floatz = Math.max (x, y); // визначення максимуму з двох значень
System.exit (1); // екстрене завершення роботи програми
Статичний метод можна викликати також з використанням імені об'єкта, але такий виклик знижує якість коду і не буде логічно коректним, хоча і не призведе до помилки компіляції.
Перевизначення статичних методів класу не має практичного сенсу, так як звернення до статичного атрибуту або методу здійснюється здебільшого за допомогою завдання імені класу, якому вони належать.