Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АрхитектураБиологияГеографияДругоеИностранные языки
ИнформатикаИсторияКультураЛитератураМатематика
МедицинаМеханикаОбразованиеОхрана трудаПедагогика
ПолитикаПравоПрограммированиеПсихологияРелигия
СоциологияСпортСтроительствоФизикаФилософия
ФинансыХимияЭкологияЭкономикаЭлектроника

Private static int number;

Car alfaRomeo156, fordFocus, fiat500; | Fiat500.moveTo(35, 120); | Protected Master person; | Public double f(double x) | Abstract void voice(); | ЛАБОРАТОРНЕ ЗАВДАННЯ |


Читайте также:
  1. A PRIVATE FUNCTION
  2. A Private Tutor
  3. Access to private and protected members of the containing type
  4. Aims of Private Organizations
  5. Benign prostatic hyperplasia
  6. Broad government access to private data: Perhaps someday
  7. Chapter VI. SOAMES’ PRIVATE LIFE

Automobile(){

number++;

System.out.println("From Automobile constructor:"+ " number = "+number);

}

}

public class AutomobileTest{

public static void main(String[] args){

Automobile lada2105 = new Automobile(),

fordScorpio = new Automobile(),

oka = new Automobile();

}

}

 

До статичних змінних можна звертатися з іменем класа, Automobile.number, а не тільки з іменем eкземпляра, lada2105.number, причому це можна робити, навіть якщо не створено жодного екземпляра класу.

Для роботи з такими статичними змінними звичайно створюються статичні методи, помічені модифікатором static. Для методів слово static має зовсім інший зміст. Виконуюча система Java завжди створює в пам’яті тільки одну копію машинного коду метода, що розділяється всіма екземплярами, незалежно від того, статичний цей метод чи ні.

Головна особливість статичних методів — вони виконуються зразу у всіх екземплярах класу. Більше того, вони можуть виконуватися, навіть якщо не створений жодний екземпляр класу. Досить уточнити назву методу назвою класу (а не назвою об’єкту), щоб метод міг працювати. Так ми користувалися методами класу Math, не створюючи його екземпляри, а просто записуючи Math.abs(x), Math.sqrt(x). Так само використовується метод System.out.println(). Методом main() користуються, взагалі не створюючи жодних об’єктів.

Статичні методи називаються методами класу (class methods), на відміну від нестатичних методів, які називаються методами екземпляру (instance methods).

Звідси витікають інші особливості статичних методів:

· у статичному методі не можна використовувати посилання this і super;

· у статичному методі не можна напряму, не створюючи екземплярів, посилатися на нестатичні поля і методи;

· статичні методи не можуть бути абстрактними;

· статичні методи перевизначаються у підкласах тільки як статичні.

Статичні змінні ініціалізуються ще до початку роботи конструктора, але при ініціалізації можна використовувати тільки константні вирази. Якщо ж ініціалізація вимагає складних обчислень, наприклад, циклів для задання значень елементам статичних масивів або звернення до методів, то ці обчислення заключають у блок, помічений словом static, який теж буде виконаний до запуску конструктора:

static int[] a = new a[10];

static {

for(int k = 0; k < a.length; k++)

a[k] = k * k;

}

 

Оператори, поміщені у такий блок, виконуються лише один раз, при першому завантаженні класу, а не при створенні кожного екземпляра.

Блоки статичної ініціалізації, і блоки ініціалізації екземпляра записуються ззовні будь-яких методів і виконуються до початку виконання і метода, і конструктора.

 

КЛАС Complex

 

Комплексні числа широко використовуються не лише у математиці. Вони часто застосовуються у графічних перетвореннях, у побудові фракталів, не говорячи уже про фізику і технічні дисципліни. Але клас, що описує комплексні числа, не включений у стандартну бібліотеку Java. Заповнимо цей пробіл.

Лістинг 2.4 довгий, але проглянути його треба уважно, при вивченні мови програмування дуже корисне читання програм на цій мові. Більш того, тільки програми і варто читати, пояснення автора лише заважають вникнути в зміст дій (жарт).

Лістинг 2.4. Клас Complex

 

class Complex {

private static final double EPS = 1e-12; // Точність обчислень

private double x, y; // Дійсна і уявна частини

// Чотири конструктори

Complex(double re, double im) { //Constructor 1

x = re; y = im;

}

Complex(double re){x = re; y = 0.0; } //Constructor 2

Complex(){x = 0.0; y = 0.0; } //Constructor 3

Complex(Complex z){x =z.x; y = z.y; } //Constructor 4

// Методи доступу

public double getRe(){return x;}

public double getIm(){return y;}

public Complex getZ(){return new Complex(x, y);}

public void setRe(double re){x = re;}

public void setIm(double im){y = im;}

public void setZ(Complex z){x = z.x; y = z.x;}

// Модуль і аргумент комплексного числа

public double mod(){return Math.sqrt(x * x + y * y);}

public double arg(){return Math.atan2(x, y);}

// Перевірка: дійсне число?

public boolean isReal(){return Math.abs(y) < EPS;}

public void pr(){ // Виведення на екран

System.out.println(x + (y < 0.0? "": "+") + y + "i");

}

// Перевизначення методів класа Object

public boolean equals(Complex z){

return Math.abs(x - z.x) < EPS && Math.abs(y - z.y) < EPS;

}

public String toString(){

return "Complex: " + x + " " + y;

}

// Методи, що реалізують операції +=, -=, *=, /=

public void add(Complex z){x += z.x; y += z.y;}

public void sub(Complex z){x -= z.x; y -= z.y;}

public void mul(Complex z){

double t = x * z.x - y * z.y;

y = x * z.y + y * z.x;

x = t;

}

public void div(Complex z){

double m = z.mod()*z.mod();;

double t = x * z.x - y * z.y;

y = (y * z.x - x * z.y) / m;

x = t / m;

}

// Методи, що реалізують операції +, -, *, /

public Complex plus(Complex z){

return new Complex(x + z.x, y + z.y);

}

public Complex minus(Complex z){


Дата добавления: 2015-11-14; просмотров: 71 | Нарушение авторских прав


<== предыдущая страница | следующая страница ==>
КОНСТРУКТОРИ КЛАСУ| Return new Complex(x - z.x, y - z.y);

mybiblioteka.su - 2015-2024 год. (0.01 сек.)