Иллюстрированный самоучитель по 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


Содержание раздела