Студопедия  
Главная страница | Контакты | Случайная страница

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

Инициализация статических данных

Читайте также:
  1. I.2.3. Обработка исходных данных в режиме таблицы
  2. PROFIBUS Слой Связи Данных (слой 2)
  3. SIMD – одиночный поток команд и множественный поток данных.
  4. Trading Techniques Inc. предоставляет месячные, недельные, дневные и почасовые (60 минут) данные по всем фьючерсам с помощью сервиса загрузки данных.
  5. Анализ данных и подготовка заключительного доклада
  6. Анализ данных и подготовка заключительного отчета
  7. Анализ и интерпретация данных
  8. Анализ и интерпретация данных экспериментально-психологического исследования.
  9. Анализ исходных данных и подбор компонентов и деталей
  10. Ассиметричное распределение и преобразование данных

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

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

//: c04:StaticInitialization.java// Указание начальных значений в// определении класса. class Bowl { Bowl(int marker) { System.out.println("Bowl(" + marker + ")"); } void f(int marker) { System.out.println("f(" + marker + ")"); }} class Table { static Bowl b1 = new Bowl(1); Table() { System.out.println("Table()"); b2.f(1); } void f2(int marker) { System.out.println("f2(" + marker + ")"); } static Bowl b2 = new Bowl(2);} class Cupboard { Bowl b3 = new Bowl(3); static Bowl b4 = new Bowl(4); Cupboard() { System.out.println("Cupboard()"); b4.f(2); } void f3(int marker) { System.out.println("f3(" + marker + ")"); } static Bowl b5 = new Bowl(5);} public class StaticInitialization { public static void main(String[] args) { System.out.println( "Creating new Cupboard() in main"); new Cupboard(); System.out.println( "Creating new Cupboard() in main"); new Cupboard(); t2.f2(1); t3.f3(1); } static Table t2 = new Table(); static Cupboard t3 = new Cupboard();} ///:~

Bowl позволяет вам наблюдать за созданием класса, а Table и Cupboard создают static-члены Bowl вперемешку в определении класса. Обратите внимание, что Cupboard создает не-static Bowl b3 перед static определением. На выводе вы видите, что произошло:

Bowl(1)Bowl(2)Table()f(1)Bowl(4)Bowl(5)Bowl(3)Cupboard()f(2)Creating new Cupboard() in mainBowl(3)Cupboard()f(2)Creating new Cupboard() in mainBowl(3)Cupboard()f(2)f2(1)f3(1)

Static инициализация происходит только при необходимости. Если вы не создаете объект Table и никогда не обращаетесь к Table.b1или Table.b2, static Bowl b1и b2никогда не будут созданы. Однако они инициализируются, только когда создается первый объект Table(или при возникновении первого static доступа static). После этого static объекты не инициализируются повторно.

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

Полезно просуммировать информацию о процессе создания объекта. Рассмотрим класс с названием Dog:


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

Итерации | Break и continue | Детали расчета | Упражнения | Гарантированная инициализация при использовании конструктора | Перегрузка методов | Перегрузка с помощью примитивных типов | Очистка: финализация и сборщик мусора | Вы должны выполнять очистку | Многомерные массивы |


lektsii.net - Лекции.Нет - 2014-2020 год. (0.014 сек.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав