Читаем Java 7 полностью

В классе может быть несколько конструкторов. Поскольку у них одно и то же имя, совпадающее с именем класса, то они должны отличаться типом и/или количеством параметров.

Если вы не написали в своем классе ни одного конструктора, то компилятор, как уже сказано ранее, создаст конструктор по умолчанию. Но если вы написали хоть один конструктор, то компилятор ничего делать не будет и вам самим надо написать конструктор по умолчанию, без аргументов. Это следует сделать обязательно, если вы будете расширять свой класс, т. к. конструкторы подкласса вызывают конструктор по умолчанию суперкласса.

В наших примерах мы пока ни разу не рассматривали конструкторы классов, поэтому при создании экземпляров наших классов вызывался конструктор класса Object.

Операция new

Пора подробнее описать операцию с одним операндом, обозначаемую словом new. Она применяется для выделения памяти массивам и объектам.

В первом случае в качестве операнда указывается тип элементов массива и количество его элементов в квадратных скобках, например:

double a[] = new double[100];

Элементы массива обнуляются.

Во втором случае операндом служит конструктор класса. Если конструктора в классе нет, то вызывается конструктор по умолчанию.

Числовые поля класса получают нулевые значения, логические поля — значение false, ссылки — значение null.

Результатом операции new будет ссылка на созданный объект. Эта ссылка может быть присвоена переменной типа "ссылка" на данный тип:

Dog k9 = new Dog();

но может использоваться и непосредственно:

new Dog().voice();

Здесь после создания безымянного объекта сразу выполняется его метод voice (). Такая странная запись встречается в программах, написанных на Java, на каждом шагу. Она возможна потому, что приоритет операции new выше, чем приоритет операции обращения к методу, обозначаемой точкой.

Упражнение

7. Введите конструкторы в классы, определенные в упражнениях 4—6.

Статические члены класса

Разные экземпляры одного класса имеют совершенно независимые друг от друга поля, принимающие различные значения. Изменение поля в одном экземпляре никак не влияет на то же поле в другом экземпляре. В каждом экземпляре для таких полей выделяется своя ячейка памяти. Поэтому такие поля называются переменными экземпляра класса (instance variables) или переменными объекта.

Иногда надо определить поле, общее для всего класса, изменение которого в одном экземпляре повлечет изменение того же поля во всех экземплярах. Например, мы хотим в классе Automobile отмечать порядковый заводской номер автомобиля. Такие поля называются переменными класса (class variables). Для переменных класса выделяется только одна ячейка памяти, общая для всех экземпляров. Переменные класса образуются в Java модификатором static. В листинге 2.3 мы записываем этот модификатор при определении переменной number.

Листинг 2.3. Статическое поле

class Automobile!

private static int number;

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();

}

}

Получаем результат, показанный на рис. 2.2.

Рис. 2.2. Изменение статического поля

Интересно, что к статическим полям можно обращаться с именем класса, Automobile. number, а не только с именем экземпляра, lada2105. number, причем это можно делать, даже если не создан ни один экземпляр класса. Дело в том, что поля класса определяются при загрузке файла с классом в оперативную память, еще до создания экземпляров класса.

Для работы с такими статическими полями обычно создаются статические методы, помеченные модификатором static. Для методов слово static имеет совсем другой смысл, чем для полей, потому что исполняющая система Java всегда создает в памяти только одну копию машинного кода метода, разделяемую всеми экземплярами, независимо от того, статический это метод или нет.

Основная особенность статических методов — они работают напрямую только со статическими полями и методами класса. При попытке обращения статического метода к нестатическим полям и методам класса на консоль посылается сообщение об ошибке. Это позволяет повысить безопасность программы, предотвратить случайное изменение полей и методов отдельных экземпляров класса.

Такая особенность статических методов приводит к интересному побочному эффекту. Они могут выполняться, даже если не создан ни один экземпляр класса. Достаточно уточнить имя метода именем класса (а не именем объекта), чтобы метод мог работать. Именно так мы пользовались методами класса Math, не создавая его экземпляры, а просто записывая

Math.abs (x), Math. sqrt (x). Точно так же мы использовали метод system.out .println ( ) . Да и методом main () мы пользуемся, вообще не создавая никаких объектов.

Перейти на страницу:

Все книги серии В подлиннике

Java 7
Java 7

Рассмотрено все необходимое для разработки, компиляции, отладки и запуска приложений Java. Изложены практические приемы использования как традиционных, так и новейших конструкций объектно-ориентированного языка Java, графической библиотеки классов Swing, расширенной библиотеки Java 2D, работа со звуком, печать, способы русификации программ. Приведено полное описание нововведений Java SE 7: двоичная запись чисел, строковые варианты разветвлений, "ромбовидный оператор", NIO2, новые средства многопоточности и др. Дано подробное изложение последней версии сервлетов, технологии JSP и библиотек тегов JSTL. Около двухсот законченных программ иллюстрируют рассмотренные приемы программирования. Приведена подробная справочная информация о классах и методах Core Java API.

Ильдар Шаукатович Хабибуллин

Программирование, программы, базы данных

Похожие книги

1С: Бухгалтерия 8 с нуля
1С: Бухгалтерия 8 с нуля

Книга содержит полное описание приемов и методов работы с программой 1С:Бухгалтерия 8. Рассматривается автоматизация всех основных участков бухгалтерии: учет наличных и безналичных денежных средств, основных средств и НМА, прихода и расхода товарно-материальных ценностей, зарплаты, производства. Описано, как вводить исходные данные, заполнять справочники и каталоги, работать с первичными документами, проводить их по учету, формировать разнообразные отчеты, выводить данные на печать, настраивать программу и использовать ее сервисные функции. Каждый урок содержит подробное описание рассматриваемой темы с детальным разбором и иллюстрированием всех этапов.Для широкого круга пользователей.

Алексей Анатольевич Гладкий

Программирование, программы, базы данных / Программное обеспечение / Бухучет и аудит / Финансы и бизнес / Книги по IT / Словари и Энциклопедии
1С: Управление торговлей 8.2
1С: Управление торговлей 8.2

Современные торговые предприятия предлагают своим клиентам широчайший ассортимент товаров, который исчисляется тысячами и десятками тысяч наименований. Причем многие позиции могут реализовываться на разных условиях: предоплата, отсрочка платежи, скидка, наценка, объем партии, и т.д. Клиенты зачастую делятся на категории – VIP-клиент, обычный клиент, постоянный клиент, мелкооптовый клиент, и т.д. Товарные позиции могут комплектоваться и разукомплектовываться, многие товары подлежат обязательной сертификации и гигиеническим исследованиям, некондиционные позиции необходимо списывать, на складах периодически должна проводиться инвентаризация, каждая компания должна иметь свою маркетинговую политику и т.д., вообщем – современное торговое предприятие представляет живой организм, находящийся в постоянном движении.Очевидно, что вся эта кипучая деятельность требует автоматизации. Для решения этой задачи существуют специальные программные средства, и в этой книге мы познакомим вам с самым популярным продуктом, предназначенным для автоматизации деятельности торгового предприятия – «1С Управление торговлей», которое реализовано на новейшей технологической платформе версии 1С 8.2.

Алексей Анатольевич Гладкий

Финансы / Программирование, программы, базы данных