КлассРефлексионДемо
Скопируйте код кода следующим образом:
пакет «Отражение»;
@Устарело
общественный класс ReflectionDemo {
частная строка pri_field;
общедоступная строка pub_field;
общедоступное ReflectionDemo(){}
public ReflectionDemo (имя строки) {}
частный ReflectionDemo (имя строки, int int1) {}
общественный недействительный ReflectMethod(){}
общественный недействительный ReflectMethod (String str) {}
частный недействительный ReflectMethod(int int1){}
класс innerclss_Refection{}
}
Тестовый классReflectionDemoTest
Скопируйте код кода следующим образом:
пакет «Отражение»;
импортировать java.lang.annotation.Annotation;
импортировать java.lang.reflect.Constructor;
импортировать java.lang.reflect.Field;
импортировать java.lang.reflect.Method;
общественный класс ReflectionDemoTest {
public static void main(String[] args) {
//Создаем объект класса и используем общую модификацию, чтобы избежать принудительной передачи
Класс cla=ReflectionDemo.class;
//Метод получения всех общедоступных полей
Поле[] поле=cla.getFields();
for(Поле f:field){
System.out.println("Метод получения всех общедоступных полей:"+f.toString());
}
//Метод получения указанного общедоступного домена
пытаться {
Поле field1=cla.getField("pub_field");
System.out.println("Метод получения указанного открытого поля:"+field1.toString());
} catch (SecurityException e) {
// TODO Автоматически сгенерированный блок catch
е.printStackTrace();
} catch (NoSuchFieldException e) {
// TODO Автоматически сгенерированный блок catch
е.printStackTrace();
}
//Метод получения всех доменов (включая частные), Объявить
Поле[] field2=cla.getDeclaredFields();
for(Поле f:field2){
System.out.println("Метод получения всех полей (включая частные):"+f.toString());
}
//Метод получения указанного домена (включая частный домен)
пытаться {
Поле field3=cla.getDeclaredField("pri_field");
System.out.println("Метод получения указанного поля (включая частное поле):"+field3.toString());
} catch (SecurityException e) {
// TODO Автоматически сгенерированный блок catch
е.printStackTrace();
} catch (NoSuchFieldException e) {
// TODO Автоматически сгенерированный блок catch
е.printStackTrace();
}
//Получаем все публичные методы (включая родительские классы)
Метод[] метод=cla.getMethods();
for(Метод m:метод){
System.out.println("Получить все общедоступные методы:"+m.toString());
}
пытаться {
//Получаем указанный метод без параметров
//Второй параметр указывает тип параметра, а параметр NUll указывает на метод без параметров.
Метод метод1 = cla.getMethod("ReflectMethod", null);
System.out.println("Получить метод публичного метода без параметров:"+method1.toString());
} catch (SecurityException e) {
// TODO Автоматически сгенерированный блок catch
е.printStackTrace();
} catch (NoSuchMethodException e) {
// TODO Автоматически сгенерированный блок catch
е.printStackTrace();
}
//Метод получения всех методов этого класса (кроме родительского класса)
Метод[] метод2=cla.getDeclaredMethods();
for(Метод m:method2){
System.out.println("Получить все методы (включая родительские классы):"+m.toString());
}
//Получаем метод указанного метода этого класса (исключая родительский класс)
//Первый параметр — это имя метода, второй параметр — тип возвращаемого значения метода, а NULL — метод без параметров.
пытаться {
Метод метод3=cla.getDeclaredMethod("ReflectMethod",int.class);
System.out.println("Получить метод указанного метода этого класса (исключая родительский класс):"+method3);
} catch (SecurityException e) {
// TODO Автоматически сгенерированный блок catch
е.printStackTrace();
} catch (NoSuchMethodException e) {
// TODO Автоматически сгенерированный блок catch
е.printStackTrace();
}
//Получаем публичный конструктор
//Получаем публичный конструктор без параметров
пытаться {
Конструктор cs=cla.getConstructor(null);
System.out.println("Получить конструктор без параметров:"+cs);
} catch (SecurityException e) {
// TODO Автоматически сгенерированный блок catch
е.printStackTrace();
} catch (NoSuchMethodException e) {
// TODO Автоматически сгенерированный блок catch
е.printStackTrace();
}
//Получаем публичный конструктор с параметрами
//Если есть конструктор с несколькими параметрами, значит, конструкторов несколько. Обратите внимание на порядок.
пытаться {
Конструктор cs=cla.getConstructor(String.class);
System.out.println("Получить параметризованный конструктор:"+cs);
} catch (SecurityException e) {
// TODO Автоматически сгенерированный блок catch
е.printStackTrace();
} catch (NoSuchMethodException e) {
// TODO Автоматически сгенерированный блок catch
е.printStackTrace();
}
//Получаем все методы построения
пытаться {
Конструктор[] cs=cla.getDeclaredConstructors();
for(Конструктор c:cs){
System.out.println("Получить все методы построения:"+c);
}
} catch (SecurityException e) {
// TODO Автоматически сгенерированный блок catch
е.printStackTrace();
}
//Получаем имя пакета
Пакет Pack=cla.getPackage();
System.out.println("Получить имя текущего пакета:"+pack);
//Получаем комментарии
Аннотация[] ann=cla.getAnnotations();
for(Аннотация an:ann){
System.out.println(an.toString());
}
//Получаем родительский класс
Класс supercla=cla.getSuperclass();
System.out.println(суперкла);
//Получаем внутренний класс
Class[]innercla=cla.getDeclaredClasses();
for(Класс cl:innercla){
System.out.println(cl);
}
}
}
Сводка: шаги для получения информации об объектах класса:
1. Создайте объект класса. Метод 1. Класс cla=Class.forName(“PATH”). Метод 2. CLass cla=Instance.getclass();
2. Используйте поле, метод, конструктор, пакет и аннотацию, чтобы получить соответствующую информацию, вызвав метод cla.getXXXX.
3. Методы получения родительских классов и внутренних классов немного отличаются.
4. При использовании cla.getMethods вызываются все публичные методы класса и родительского класса.
5. При использовании Declared вызываются все методы класса, включая приватные. То же самое касается доменов и конструкторов.
6. Если класс отражения не имеет открытого конструктора и не может напрямую использовать метод newInstance, используйте
Method cs=cla.getMethod("getInstance",null);//Получить метод
Calendar Calendar=(Calendar) cs.invoke(cla, null);//Выполняем полученный метод, параметр 1 — объект метода выполнения, параметр 2 — параметры метода
Дата df=calendar.getTime();
System.out.println(df.toString());
получить.