Иллюстрированный самоучитель по Java
Класс
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.7 — вывод результатов
Листийс 4.6
tМетоды
класса 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() {}
. Рассмотрение обработки исключительных
ситуаций мы откладываем до
главы 16.
Рис. 4.7.
Методы
класса
Class
в программе
ClassTest