Получить методы в классе:
Публичный метод [] getMethods (); // Получить все публичные методы, включая себя и наследство (реализация) - Метод не поддерживает Generics <>, то есть нет <>.
Публичный метод [] getDeclaredMethods (); // Получить все методы (частные, общественные, защищенные, не имеют ничего общего с правами доступа). Он не включает в себя унаследованные методы, которые могут напрямую получить частные атрибуты после JDK1.8. Нет необходимости устанавливать разрешения, но только метод GetDeclaredMethod все еще должен установить разрешения для методов методов.
Публичный метод [] getMethod (String Methodname, Class <t> ... ParameterTypes); // означает получение указанного публичного метода, включая унаследованные параметры: methodName: означает имя полученного метода
ParametertyPes: тип класса, представляющий параметр полученного метода
Публичный метод [] getDeclaredMethod (String Methodname, Class <t> ... ParameterTypes); // Средство для получения указанного метода в этом классе (частные, защищенные, публичные, не относящиеся к доступу) и не включает в себя унаследованные методы
Класс clazz = new Person (). GetClass (); try {// вызов указанного метода/*@puspresswarnings ("unchecked") method me = clazz.getDeclaredMethod ("getName", string.class); me.invoke (clazz.newinstance (), "Zhangsan"); */// Получить все методы метода [] methods = clazz.getDeclaredMethods (); для (метод метода: методы) {System.out.println (method.getName ()); }} catch (Exception e) {e.printstackTrace (); }Для вызовов метода с несколькими параметрами: параметрические типы, за которыми следуют getDeclaredMethod, можно понять как формальный параметр типа класса. Позвонив Invoke, назначение нескольких параметров лучше всего обернуто в новый объект [] {}.
@Suppresswarnings ("unchecked") method = clazz.getDeclaredMethod ("getName", новый класс [] {string.class, int.class}); method.invoke (new Person (), новый объект [] {"Zhangsan", 10});Вызов статических методов
пользователь класса {public static void staticmethod () {System.out.println ("static mthod invoke.");}} например: class <user> clz = user.class; method staticmethod = clz.getmethod ("staticmthod"); Есть два способа назвать статические методы:
1. Поскольку статический метод принадлежит всем объектам экземпляра, вы можете создать произвольный объект класса и вызвать его через объект.
staticmethod.invoke (clz.newinstance ()); // staticmethod не имеет параметров, поэтому тип списка параметров не заполняется.
2. Если базовый метод является статичным, вы можете игнорировать указанный параметр OBJ и установить параметр OBJ на NULL
staticmethod.invoke (null);
Более связанный контент:
Один: концепция отражения
Вы можете получить переменные участника и методы определенного класса через класс класса и назвать его.
2: Получить методы, переменные и методы строительства посредством отражения
@Test // Получить метод определения класса public void testmethod () выбрасывает исключение {@suppresswarnings ("rawtypes") class clazz = class.forname ("java.lang.string"); Метод [] m = clazz.getDeclaredMethods (); for (int i = 0; i <m.length; i ++) {System.out.println (m [i] .getName () + "" + m [i] .getDeclaringClass ()); }} @Test // Получить переменную определение класса public void testfield () throws exception {@suppresswarnings ("ravtypes") class clazz = class.forname ("java.lang.string"); Field [] fields = clazz.getFields (); Для (Поле F: Fields) {System.out.println (f.getName ()); }} @Test // Получить конструктор определения класса через Reflection public void testConstructor () Throws Exception {@SuppressWarnings ("ravtypes") class = class.forname ("java.lang.string"); @Suppresswarnings ("rawtypes") constructor [] cons = clazz.getConstructors (); for (@suppresswarnings ("rawtypes") конструктор C: ins) {system.out.println (c + "" + c.getdeclaringclass ()); }}Три: вызовите метод, определяемый классом через рефлексию
@Test // Вызовите метод, определяемый классом через Reflection public void testinVokeMethod (), выбрасывает Exception {class clazz = class.forname ("java.lang.string"); // Определите класс типа параметра [] params = new Class [1]; params [0] = string.class; Метод m = clazz.getDeclaredMethod ("indexof", params); // Установить объект параметра [] p = новый объект [1]; p [0] = "e"; Integer s = (целое число) m.invoke ("helloworld!", P); System.out.println (s); }