Назад Зміст Вперед

5.8. Ключове слово static

Статичні атрибути і методи
Статичним  називається  метод,  для  виклику  якого  не потрібно створювати/вказувати об’єкт.
Приклад.
y = Math.exp(2*x);     // Math – ім’я класу
s = String.valueOf(5.12);   // String – ім’я класу
При створенні статичного методу в описі класу вказується специфікатор static.
Замість  форми ім’я_об’єкта.метод(...); використовують форму ім’я_класу.метод(. . .);
Приклад. Статичні методи класу 
Нехай нам треба обчислити значення виразу використовуючи підпрограму (метод) користувача.

 

Розв’язання. Подамо вираз у лінійній формі, відповідно до синтаксису Java: 
 y = Math.sin(x)/(1+Math.sqrt(Math.abs(x)));
Лістинг
class Function {
  static double myFunc(double x) {
    return Math.sin(x)/(1+Math.sqrt(Math.abs(x)));
  }
}
class pr3_6 {
  public static void main(String [ ] args){
    double y;    
    // ім’я_класу.ім’я_методу(параметри)
    y = Function.myFunc(2.5);   
    System.out.println("y="+y);
  }
}
Бачимо,  що обчислювальна  команда  y = Function.myFunc(2.5); викликає метод myFunc() з префіксом Function (іменем класу, а не об'єкту).
Статичним атрибутом є атрибут класу, для доступу до якого  не  треба  створювати/вказувати  об’єкт.  Значення статичного атрибуту єдине для всіх екземплярів класу.
Як і для статичних методів, для виклику статичної змінної вказується не ім’я об’єкту, а ім’я класу.
Приклад. Статичні атрибути
Нехай  клас  Balance  описує деяку суму грошей  у  гривнях, розміщену  на  рахунку.  Нехай  іншим  атрибутом  є  еквівалент накопиченої суми в євро. Одним з методів класу є перерахунок суми  у  євро.  Зрозуміло,  для  коректного  перетворення  треба мати  актуальний  курс  співвідношення  EUR/UAH.  Цей  курс зручно зберігати у статичній змінній, оскільки він єдиний для всіх персональних рахунків.
Лістинг
class Balance {
  double sum_uah;      // сума в гривнях
  static double curex=10.52;   // біжуче значення курсу
   Balance (double h) {     // конструктор
    sum_uah=h;    
  }
   double getUah() {      // отримання балансу
    return sum_uah;
  }
  double getEur() {      // баланс в євро 
    return sum_uah/curex;
  }
}
class pr3_7 {
 public static void main(String [ ]args){
   // створення двох обєктів (двох рахунків)
   Balance b1 = new Balance(1000);
  Balance b2 = new Balance(2000);
    // виведення балансу в грн і євро 
  System.out.println("Актуальний курс EUR: "+Balance.curex);
  System.out.println(b1.getUah()+" грн.="+b1.getEur());
  System.out.println(b2.getUah()+" грн.="+b2.getEur());
   // зміна значення статичної змінної curex,  
  // спрацьовує одразу для обох об'єктів - b1 i b2  
  Balance.curex=10.55;
    // баланс в грн і євро після зміни курсу  
  System.out.println("Змінений курс EUR: "+Balance.curex);
  System.out.println(b1.getUah()+" грн.="+b1.getEur());
  System.out.println(b2.getUah()+" грн.="+b2.getEur());    
 }
}


.