Статичні атрибути і методи
Статичним називається метод, для виклику якого не потрібно створювати/вказувати об’єкт.
Приклад.
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());
}
}