Главная » Разработка для Android » Создание объекта JAVA ДЛЯ ANDROID

0

 

Новый объект, экземпляр определенного класса, создается при помощи ключевого слова new:

Trivial trivial = new TrivialO:

Слева от оператора присваивания = в этом утверждении определяется переменная, которая называется trivial. Эта переменная имеет тип Trivial, поэтому ей могут быть присвоены лишь объекты типа Trivial. В правой части утверждения присваивания происходит выделение памяти для нового экземпляра класса Trivial и инициализируется экземпляр. Оператор присваивания присваивает переменной . ссылку на только что созданный объект.

Определение ctr в Trivial является совершенно безопасным, несмотря на то, что явной инициализации не происходит. В Java гарантируется, что эта переменная будет инициализирована со значением 0, а также то, что все поля автоматически инициализируются при создании объекта: bool еап инициализируется со значением false, числовые примитивные типы – со значением 0, а все объектные типы – со значением nul 1.

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

На практике у каждого класса Java есть конструктор. Компилятор Java автоматически создает конструктор без аргументов, если не указано других конструкторов. Далее, если конструктор не вызывает автоматически какой-нибудь конструктор суперкласса, компилятор Java автоматически добавляет неявный вызов безаргументного конструктора суперкласса в качестве самого первого утверждения. Определение Trivial, данное выше (в котором отсутствует явное указание конструктора), на самом деле содержит конструктор, который выглядит так:

Поскольку в классе LessTrivial происходит явное определение конструктора, Java не создает конструктор по умолчанию автоматически. Это означает, что при попытке создания объекта LessTrivial без аргументов происходит ошибка:

Очень важно различать две концепции: безаргументный конструктор (no-arg constructor) и конструктор, задаваемый по умолчанию (default constructor). Конструктор по умолчанию – это такой конструктор, который Java автоматически добавляет к вашему классу, причем неявно и в том случае, если вы не определяете никаких других конструкторов. Бывает, что по умолчанию задается и безаргументный конструктор. Но, с другой стороны, безаргументный конструктор – это просто конструктор, для которого не заданы никакие параметры. Класс не обязательно должен иметь безаргументный конструктор. Определять такой конструктор также не обязательно, если это не требуется вам для какой-то определенной цели.

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

Каскадное расположение методов – это стандартная идиома Java для задания определенных значений по умолчанию. Весь код, который инициализирует объект, находится в одном самодостаточном методе или конструкторе, а остальные методы или конструкторы просто вызывают его. Особенно целесообразно применять такую идиому с конструкторами, которые должны выполнять явный вызов суперконструктора.

Конструкторы должны быть просты и выполнять не больше работы, чем необходимо для перевода объекта в стабильное исходное состояние. Можно представить себе, например, конструкцию объекта, обеспечивающего соединение с базой данных или сетью. Он может создать соединение, инициализировать его, проверить соединяемость – и все это сделать в конструкторе. На первый взгляд такой подход кажется совершенно оправданным, но на практике у вас получится код, которому не хватает модульности и который плохо поддается отладке и внесению изменений.

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

Источник: Android. Программирование на Java для нового поколения мобильных устройств

По теме:

  • Комментарии