Программирование на JAVA

Навигация

Лекция 1. Что такое Java? История создания

Лекция 2. Основы объектно-ориентированного программирования

Лекция 3. Лексика языка

Лекция 4. Типы данных

Лекция 5. Имена. Пакеты

Лекция 6. Объявление классов

Лекция 7. Преобразование типов

Лекция 8. Объектная модель в Java

Лекция 9. Массивы

Лекция 10. Операторы и структура кода. Исключения

Лекция 11. Пакет java.awt

Лекция 12. Потоки выполнения. Синхронизация

Лекция 13. Пакет java.lang

Лекция 14. Пакет java.util

Лекция 15. Пакет java.io

Лекция 16. Введение в сетевые протоколы

h1.totalCount++;

System. out.println(h2.totalCount);

все обращения к переменной totalCount приводят к одному единственно­му полю, и результатом работы такой программы будет 6. Это поле будет существовать в единственном экземпляре независимо от того, сколько объектов было порождено от данного класса и был ли вообще создан хоть один объект.

Аналогично объявляются статические методы.

class Human {

private static int totalCount;

public static int getTotalCount() { return totalCount;

}

Для вызова статического метода ссылки на объект не требуется. Human. getTotalCountO;

Хотя для удобства обращения через ссылку разрешены, но принима­ется во внимание только тип ссылки:

Human h=null;

h. getTotalCountO; //два эквивалентных обращения к Human.getTotalCountO; // одному и тому же методу

Хотя приведенный пример технически корректен, все же использо­вание ссылки на объект для обращения к статическим полям и методам не рекомендуется, поскольку это усложняет код.

Обращение к статическому полю является корректным независимо оттого, были ли порождены объекты от этого класса и в каком количестве. Например, стартовый метод main() запускается до того, как программа создаст хотя бы один объект.

Кроме полей и методов, статическими могут быть инициализаторы. Они также называются инициализаторами класса, в отличие от инициа­лизаторов объекта, рассматривавшихся ранее. Их код выполняется один раз во время загрузки класса в память виртуальной машины. Их запись начинается с модификатора static:

class Human { static {

System, out. printlnfClass loaded");

}

}

Если объявление статического поля совмещается с его инициализа­цией, то поле инициализируется также однократно при загрузке класса. На объявление и применение статических полей накладываются те же ог­раничения, что и для динамических,— нельзя использовать поле в иници­ализаторах других полей или в инициализаторах класса до того, как это Поле объявлено:

class Test { static int a; static { a=5;

// b=7; // Нельзя использовать до объявления!

}

static int b=a;

}

Это правило распространяется только на обращения к полям по про­стому имени. Если использовать составное имя, то обращаться к полю можно будет раньше (выше в тексте программы), чем оно будет объявлено:

class Test {

static int b=Test.a; static int a=3; static {

System.out.printlnf'a-'+a+", b="+b);