Класс Class
Класс Object , стоящий во главе иерархии классов Java, представляет все объекты, действующие в системе, является их общей оболочкой. Всякий объект можно считать экземпляром класса Object .
Класс с именем class представляет характеристики класса, экземпляром которого является объект. Он хранит информацию о том, не является ли объект на самом деле интерфейсом, массивом или примитивным типом, каков суперкласс объекта, каково имя класса, какие в нем конструкторы, поля, методы и вложенные классы.
В классе class нет конструкторов, экземпляр этого класса создается исполняющей системой Java во время загрузки класса и предоставляется методом getciass() класса object , например:
String s = «Это строка»;
Class с = s.getClass();
Статический метод forName(string class) возвращает объект класса class для класса, указанного в аргументе, например:
Class cl = Class.forName(«Java,lang.String»);
Но этот способ создания объекта класса class считается устаревшим (deprecated). В новых версиях JDK для этой цели используется специальная конструкция — к имени класса через точку добавляется слово class :
Class c2 = Java.lang.String.class;
Логические методы isArray(), isIntetface(), isPrimitive() позволяют уточнить, не является ли объект массивом, интерфейсом или примитивным типом.
Если объект ссылочного типа, то можно извлечь сведения о вложенных классах, конструкторах, методах и полях методами getoeciaredciasses() , getdeclaredConstructors(), getDeclaredMethods(), getDeclaredFields() , в виде массива классов, соответственно, Class, Constructor, Method, Field . Последние три класса расположены в пакете java.lang.reflect и содержат сведения о конструкторах, полях и методах аналогично тому, как класс class хранит сведения о классах.
Методы getClasses(), getConstructors(), getlnterfaces(), getMethods(), getFieids() возвращают такие же массивы, но не всех, а только открытых членов класса.
Метод getsuperciass() возвращает суперкласс объекта ссылочного типа, getPackage() — пакет, getModifiers() — модификаторы класса В битовой форме. Модификаторы можно затем расшифровать методами класса Modifier из пакета Java.lang.reflect .
Листинг 4.6 показывает применение этих методов.
Листинг 4.6 Методы класса Class в программе ClassTest
import java.lang.reflect.*;
class ClassTest{
public static void main(String[] args)(
Class с = null, c1 = null, c2 = null;
Field[] fld = null;
String s = «Some string»;
с = s.getClass();
try{
cl = Class.forName(«Java.lang.String»); // Старый стиль
c2 = Java.lang.String.class; // Новый стиль
if (!c1.isPrimitive())
fid = cl.getDeclaredFields(); // Все поля класса String
}catch(Exception e){}
System.out.println(«Class c: » + c);
System.out.println(«Class cl: » + cl);
System,out.println(«Class c2: » + c2);
System.out.printlnt»Superclass c: » + c.getSuperclass());
System.out.println(«Package c: » + c.getPackageO);
System.out.printlnf»Modifiers c: » + c.getModifiers());
for(int i = 0; i < fid.length; i++)
System.out.println(fld[i]);
}
}
Методы, возвращающие свойства классов, вызывают исключительные ситуации, требующие обработки. Поэтому в программу введен блок try{} catch() {} .