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

Таким образом, у каждого действующего в программе объекта есть ссылка на экземпляр класса Class, содержащий описание класса этого объекта. Такое свойство объекта называется рефлексией (reflection). Кроме того, мы можем получить такую ссылку на классы по их имени.

Статический метод forName(String class) класса Class возвращает объект класса Class для класса, указанного в аргументе, например:

Class c1 = Class.forName("java.lang.String");

Третий способ получения экземпляра класса Class — к имени класса через точку добавить слово class:

Class c2 = java.lang.String.class;

Логические методы isAnnotation(), isArray(), isInterface(), isEnum(), isPrimitive() позволяют уточнить, не является ли объект аннотацией, массивом, интерфейсом, перечислением или примитивным типом.

Если объект ссылочного типа, то можно извлечь сведения о вложенных классах, конструкторах, методах и полях методами getDeclaredClasses(), getDeclaredConstructors(), getDeclaredMethods(), getDeclaredFields() в виде массива классов: Class, Constructor, Method, Field соответственно. Последние три класса расположены в пакете j ava. lang.reflect и содержат сведения о конструкторах, полях и методах аналогично тому, как класс Class хранит сведения о классах.

Методы getClasses (), getConstructors (), getInterfaces (), getMethods (), getFields ( ) возвращают такие же массивы, но не всех, а только открытых членов класса.

Метод getSuperclass() возвращает суперкласс объекта ссылочного типа, getPackage ( ) — пакет, getModifiers() — модификаторы класса в битовой форме. Модификаторы можно затем расшифровать методами класса Modifier из пакета java.lang.reflect.

Листинг 4.9 показывает применение этих методов, а рис. 4.7 — вывод результатов.

Листинг 4.9. Методы класса class в программе ciassTest

import java.lang.reflect.*; class ClassTest{

public static void main(String[] args){

Class c = null, c1 = null, c2 = null;

Field[] fld = null;

String s = "Some string";

c = s.getClass();

try{

cl = Class.forName("java.lang.String"); // Старый стиль

c2 = java.lang.String.class; if (!c1.isPrimitive())

fld = c1.getDeclaredFields(); }catch(Exception e){}

System.out.println("Superclass c: " System.out.println("Package c: ' System.out.println("Modi fiers c: ' for(int i = 0; i < fld.length; i++) System.out.println(fld[i]);

}

}

// Новый стиль

// Все поля класса String

+ c);

+ c1);

+ c2);

+ c.getSuperclass()); + c.getPackage());

+ c.getModifiers());

Методы, возвращающие свойства классов, вызывают исключительные ситуации, требующие обработки. Поэтому в программу введен блок try{}catch(){}. Рассмотрение обработки исключительных ситуаций мы откладываем до главы 21.

Рис. 4.7. Методы класса Class в программе ClassTest

Начиная с версии Java SE 5 класс Class сделан настраиваемым: Class — это описание класса string, Class — описание класса Long и т. д. Это полезно, когда ссылка на класс Class передается в метод как параметр и надо определить, на какой же класс она направлена.

Вопросы для самопроверки

1. Зачем кроме примитивных типов в язык Java введены еще соответствующие классы-оболочки?

2. Можно ли использовать объекты числовых классов-оболочек в арифметических выражениях?

3. Какое наибольшее целое значение можно занести в объект класса BigInteger?

4. Какое наибольшее вещественное значение можно занести в объект класса BigDecimal?

5. Можно ли использовать в одном выражении значения примитивных типов и распакованные значения числовых классов-оболочек?

6. Для чего в язык Java введены настраиваемые типы?

7. Можно ли создавать настраиваемые интерфейсы или настраиваемыми могут быть только классы?

8. Должны ли методы настраиваемого класса быть настраиваемыми?

9. Можно ли создавать настраиваемые методы в обычных, не настраиваемых классах?

ГЛАВА 5

<p><strong>Работа со строками</strong></p>

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

Класс StringBuilder введен в стандартную библиотеку Java, начиная с версии Java SE 5, для ускорения работы с текстом в одном подпроцессе.

Все эти классы реализуют интерфейс charSequence, в котором описаны общие методы работы со строками любого типа. Таких методов немного:

□ length () — возвращает количество символов в строке;

□ charAt (int pos) - возвращает символ, стоящий в позиции pos строки. Символы в

строке нумеруются, начиная с нуля;

□ subSequence (int start, int end) - возвращает подстроку, начинающуюся с позиции

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

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

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.

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

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