Рефлексия и класс Class
Рефлексия (от позднелатинского reflexio - обращение назад) - это механизм исследования данных о программе во время её выполнения. Рефлексия позволяет исследовать информацию о полях, методах и конструкторах классов. Можно также выполнять операции над полями и методами которые исследуются.
1. Класс Class
Класс с именем Сlass
представляет характеристики класса, экземпляром которого является объект.
Он предоставляет информацию:
- является ли класс интерфейсом, массивом или примитивным типом;
- каков супер класс объекта;
- каково имя класса;
- какие в нем конструкторы, поля, методы и вложенные классы.
В классе Сlass
нет конструкторов. Экземпляр этого класса создается исполняющей системой Java во время загрузки класса и предоставляется методом getClass() класса Object.
Давайте рассмотрим примеры его использования.
Пример 1. Использования класса Class.
public class ClassExample1 {
public static void main(String[] args) {
getClassName1();
getClassName2();
getClassName3();
}
private static void getClassName1() {
String s = "Это строка";
Class aClass = s.getClass();
System.out.println(aClass);
}
private static void getClassName2() {
try {
Class aClass = Class.forName("java.lang.String");
System.out.println(aClass);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
private static void getClassName3() {
Class aClass = String.class;
System.out.println(aClass);
}
}
Пример 2. Использования класса Class.
import java.io.Serializable;
public class ClassExample2 {
public static void main(String[] args) {
int[] array = new int[4];
printInfo(array.getClass());
printInfo(Serializable.class);
printInfo(Integer.class);
printInfo(double.class);
}
private static void printInfo(Class arrayClass) {
System.out.println("Class name " + arrayClass.getName());
System.out.println("Is Array? " + arrayClass.isArray());
System.out.println("Is Interface? " + arrayClass.isInterface());
System.out.println("Is Primitive? " + arrayClass.isPrimitive());
System.out.println();
}
}
Пример 3. Использования класса Class.
import java.util.Arrays;
public class ClassExample3 {
public static void main(String[] args) {
Class heavyBoxClass = HeavyBox1.class;
System.out.println("Declared Constructors: "
+ Arrays.toString(heavyBoxClass.getDeclaredConstructors()));
System.out.println("Constructors: "
+ Arrays.toString(heavyBoxClass.getConstructors()));
System.out.println("Declared Methods: "
+ Arrays.toString(heavyBoxClass.getDeclaredMethods()));
System.out.println("Methods: "
+ Arrays.toString(heavyBoxClass.getMethods()));
System.out.println("Declared Fields: "
+ Arrays.toString(heavyBoxClass.getDeclaredFields()));
System.out.println("Fields: "
+ Arrays.toString(heavyBoxClass.getFields()));
}
}
2. Методы класса Class
- getSuperclass() - возвращает супер класс объекта ссылочного типа.
- getPackage() - возвращает пакет.
- getModifiers() - возвращает модификаторы класса.
Логические методы позволяющие уточнить, является ли объект массивом, интерфейсом или примитивным типом.
- isArray()
- isInterface()
- isPrimitive()
Если объект ссылочного типа, то можно извлечь сведения о вложенных классах, конструкторах, методах в виде массива:
- getDeclaredClasses()
- getDeclaredConstructors()
- getDeclaredMethods()
- getDeclaredFields()
Методы возвращают такие же массивы, но не всех, а только открытых членов класса.
- getClasses()
- getConstructors()
- getMethods()
- getFields()
Зарегистрируйтесь или войдите, чтобы иметь возможность оставить комментарий.