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

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

Объект Class

Читайте также:
  1. Below is a list of tasks carried out by solicitors and barristers. Classify them into the appropriate column.
  2. C) between the classmates
  3. Chemical classes of hormones
  4. Class First
  5. Class III cavity preparation
  6. Class IV cavity preparation
  7. CLASSIC
  8. CLASSIFICATION OF AIRSPACE
  9. CLASSIFICATION OF AUTOMATIC TRANSFER LINES
  10. Classification of goods

Чтобы понять, как RTTI работает в Java, Вы должны вначале узнать, как информация о типе представляется во время выполнения. Это реализуется с помощью специального типа объекта называемого Class, который содержит информацию о классе. (Иногда он называется meta-class.) На самом деле, Class используется для создания всех "регулярных" объектов Вашего класса.

Объект Class существует для каждого класса, который является частью Вашей программы. Т.е., каждый раз, когда Вы пишите и компилируете новый класс, также создается единичный объект Class (и записывается в файл, имеющий идентичное имя и расширение .class). Во время выполнения, когда Вы хотите создать объект какого-то класса, виртуальная машина Java (Java Virtual Machine - JVM), которая выполняет Вашу программу сначала проверяет загружен ли объект Class этого класса. Если нет, JVM загружает его, находя файл .class с именем этого класса. Таким образом, программа на Java не загружается полностью перед запуском, и это отличает Java от других языков.

Как только объект Class для этого типа объекта находится в памяти, он используется для создания всех объектов этого типа.

Если Вам это кажется неясным или Вы в это не верите - вот демонстрационная программа, подтверждающая это:

//: c12:SweetShop.java// Исследование механизма загрузки класса. class Candy { static { System.out.println("Loading Candy"); }} class Gum { static { System.out.println("Loading Gum"); }} class Cookie { static { System.out.println("Loading Cookie"); }} public class SweetShop { public static void main(String[] args) { System.out.println("inside main"); new Candy(); System.out.println("After creating Candy"); try { Class.forName("Gum"); } catch(ClassNotFoundException e) { e.printStackTrace(System.err); } System.out.println("After Class.forName(\"Gum\")"); new Cookie(); System.out.println("After creating Cookie"); }} ///:~

Каждый из классов Candy, Gum и Cookie содержит предложение static, которое выполняется, когда класс загружается впервый раз. Информация распечатается, когда произойдет загрузка класса. В методе main(), создание объектов разделяется функциями печати, чтобы помочь определить момент их загрузки.

Особенно интересна строка:

Class.forName("Gum");

Этот метод является статическим членом объекта Class (которому принадлежат все объекты Class). Объект Class является таким же объектом, как и все остальные, так что Вы можете манипулировать ссылкой на него. (Это именно то, что делает загрузчик.) Один из спопобов получить ссылку на объект Class это метод forName(), которое берет строку String, содержащую текстовое имя (следите за правильным написанием имени класса и не забывайте, что регистр имеет значение!) класса, на который Вам нужна ссылка.. Этот медтод возвращает ссылку на объект Class.

Результаты работы этой программы на консоли JVM:

inside mainLoading CandyAfter creating CandyLoading GumAfter Class.forName("Gum")Loading CookieAfter creating Cookie

Вы видите, что каждый объект Class загружается только, когда он нужен, и статические and the static инициализации выполняются сразу после загрузки класса.




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

Многофайловое хранение с использованием Zip | Сериализация объектов | Управление сериализацией | Ключевое слово transient | Альтернатива Externalizable | Использование устойчивости | StreamTokenizer | StringTokenizer | Проверка стиля капитализации | Упражнения |


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