透過class.getMethos()方法取得類別的所有公共方法都包含父類別的公共方法。
1 import lombok.Data; 2 3 /** 4 * Created by hunt on 2017/6/27. 5 * 测试的实体类 6 * @Data 编译后会自动生成set、get、无惨构造、equals、canEqual、hashCode、toString方法 7 */ 8 @Data 9 public class Person {10 private String name;11 public String nickName;12 private int age;13 private void say(){14 System.out.println("say hunt");15 }16 }
1 import java.lang.reflect.Method; 2 3 /** 4 * Created by hunt on 2017/6/27. 5 */ 6 public class NewInstanceTest { 7 public static void main(String[] args) { 8 Class<Person> personClass = Person.class; 9 try {10 Method[] methods = personClass.getMethods();11 for (Method m:methods) {12 System.out.println(m);13 }14 } catch (Exception e) {15 e.printStackTrace();16 }17 }18 }
透過class.getDeclaredMethods()方法取得類別的所有屬性(公用,保護,默認,和私有方法)。
1 import java.lang.reflect.Method; 2 3 /** 4 * Created by hunt on 2017/6/27. 5 */ 6 public class NewInstanceTest { 7 public static void main(String[] args) { 8 Class<Person> personClass = Person.class; 9 try {10 Method[] methods = personClass.getDeclaredMethods();11 for (Method m:methods) {12 System.out.println(m);13 }14 } catch (Exception e) {15 e.printStackTrace();16 }17 }18 }
#
注意:傳回的方法數組中的元素沒有排序,也沒有任何特定的順序。
獲得具體的方法:
1 import java.lang.reflect.Method; 2 3 /** 4 * Created by hunt on 2017/6/27. 5 */ 6 public class NewInstanceTest { 7 public static void main(String[] args) { 8 Class<Person> personClass = Person.class; 9 try {10 Person p = personClass.newInstance();11 Method method = personClass.getMethod("setName", String.class);12 method.invoke(p,"hunt");13 System.out.println(p);14 method = personClass.getMethod("getName");15 System.out.println("getName方法"+method.invoke(p));16 method = personClass.getDeclaredMethod("say");17 method.setAccessible(true);//私有方法要授权18 method.invoke(p);19 } catch (Exception e) {20 e.printStackTrace();21 }22 }23 }
總結:personClass.getDeclaredMethod("say");
# method.setAccessible(
#true
##基於對屬性的保護,預設為false。這裡相當於一個授權的過程,設定true來允許操作這個屬性。
以上是java中獲得一個類別的方法介紹的詳細內容。更多資訊請關注PHP中文網其他相關文章!