把自己立成帆打洼,才能招來鳳夭委。
運(yùn)行環(huán)境
JDK8 + IntelliJ IDEA 2018.3
本文中使用的jar包鏈接
https://files.cnblogs.com/files/papercy/jsoup_jar%E5%8C%85.rar
獲取構(gòu)造函數(shù)(方法)
需要獲取類的結(jié)構(gòu)
1 package com.wenhaitao.Demo2;
2
3 public class Student {
4 private String name;
5 private int age;
6 private String sex;
7
8 public Student() {
9 }
10
11 public Student(String name, int age, String sex) {
12 this.name = name;
13 this.age = age;
14 this.sex = sex;
15 }
16
17 public String getName() {
18 return name;
19 }
20
21 public void setName(String name) {
22 this.name = name;
23 }
24
25 public int getAge() {
26 return age;
27 }
28
29 public void setAge(int age) {
30 this.age = age;
31 }
32
33 public String getSex() {
34 return sex;
35 }
36
37 public void setSex(String sex) {
38 this.sex = sex;
39 }
40
41 @Override
42 public String toString() {
43 return "Student{" +
44 "name='" + name + ''' +
45 ", age=" + age +
46 ", sex='" + sex + ''' +
47 '}';
48 }
49 }
通過 getFields() getDeclaredFields() getField() getDeclaredField()這四個(gè)方法獲取各種字段
1 package com.wenhaitao.Demo2;
2
3 import java.lang.reflect.Constructor;
4 import java.lang.reflect.Field;
5 import java.lang.reflect.Method;
6 import java.util.Arrays;
7
8 public class Demo1 {
9 public static void main(String[] args) {
10 Student student = new Student();
11 Class clzstu = student.getClass();
12 Field[] fields= clzstu.getDeclaredFields();
13 System.out.println(Arrays.toString(fields));
14
15 try {
16 Field field = clzstu.getDeclaredField("name");
17 System.out.println("field:"+field);
18 } catch (NoSuchFieldException e) {
19 e.printStackTrace();
20 }
21 Field[] fields1 =clzstu.getDeclaredFields();
22 System.out.println("fields1:"+fields1);
23 System.out.println(Arrays.toString(fields1));
24
25 // Method
26 try {
27 Method method =clzstu.getMethod("test",String.class);
28 System.out.println("*****************");
29 System.out.println("method:"+method);
30 Method[] methods = clzstu.getMethods();
31 System.out.println("methods:"+methods);
32 System.out.println("****************");
33 System.out.println(Arrays.toString(methods));
34 System.out.println("*****************");
35 Method[] methods1=clzstu.getDeclaredMethods();
36 System.out.println("methods1:"+Arrays.toString(methods1));
37
38
39 } catch (NoSuchMethodException e) {
40 e.printStackTrace();
41 }
42 // modifiler
43 int num = clzstu.getModifiers();
44 System.out.println("num:"+num);
45
46 // constructor
47 try {
48 Constructor constructor =clzstu.getConstructor(String.class);
49 System.out.println("constructor:"+constructor);
50 } catch (NoSuchMethodException e) {
51 e.printStackTrace();
52 }
53 // constructors
54 Constructor[] constructors = clzstu.getConstructors();
55 System.out.println("constructor:"+constructors);
56 System.out.println("*****************");
57 System.out.println(Arrays.toString(constructors));
58
59 //
60
61 }
62
63 }
結(jié)論:
getFields()返回所有public的字段暴氏。
getDeclaredFields()返回所有private和public字段是复。
getField()返回指定字段名public的字段丙笋。
getDeclaredField()返回指定字段名的private和public字段名鱼蝉。
獲取類中的方法
1 public void method1(String str){
2 System.out.println("public 修飾的方法");
3 }
4
5 private void method2(){
6 System.out.println("private 修飾的方法");
7 }
8
9 String method3(String name,Integer sex,Date age){
10 System.out.println("默認(rèn)修飾"+name+" "+sex+" "+age);
11 return name+" "+sex+" "+age;
12 }
13
14 protected void method4(){
15 System.out.println("protected 修飾的方法");
16 }
通過 getMethods() getDeclaredMethods() getMethod() getDeclaredMethod()這四個(gè)方法獲取各種方法
1 import java.lang.reflect.Method;
2 import java.util.Date;
3
4 public class Test06 {
5 public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException {
6
7 //加載Class對(duì)象
8 //會(huì)報(bào)出不存在該類的異常
9 Class c=Class.forName("com.reflection.model.Student");
10
11 //獲取所有公共方法
12 System.out.println("================獲取所有公共方法=================");
13 Method[] methods=c.getMethods();
14 for (Method method:methods) {
15 System.out.println("公共方法:"+method);
16 }
17 //獲取所有方法
18 System.out.println("================獲取所有的方法=================");
19 Method[] declaredMethods=c.getDeclaredMethods();
20 for (Method declaredmethod:declaredMethods) {
21 System.out.println("所有方法:"+declaredmethod);
22 }
23
24 System.out.println("================獲取特定(帶參)方法=================");
25 Method method1=c.getMethod("method1",String.class);
26 System.out.println("特定(帶參)方法:"+method1);
27
28 System.out.println("================獲取特定(不帶參)方法=================");
29 Method method2=c.getDeclaredMethod("method2");
30 System.out.println("特定(不帶參)方法:"+method2);
31
32 System.out.println("================獲取特定(多參)方法=================");
33 Method method3=c.getDeclaredMethod("method3", String.class, Integer.class, Date.class);
34 System.out.println("特定(多參)方法:"+method3);
35 }
36 }
結(jié)論:
getMethods()返回所有public的方法著恩,通過結(jié)果可以看出getMethods()連父類中的public方法也可以獲取到院尔。
getDeclaredMethods()返回所有private和public方法名,getDeclaredMethods()獲取不到父類中的方法喉誊,只能獲取到本來中的方法邀摆。
getMethod()返回指定字段名public的方法名。
getDeclaredMethod()返回指定字方法名的private和public字段名伍茄。
getConstructors()不能獲取到父類的構(gòu)造方法栋盹,getDeclaredConstructors()也只能獲取到本類中的構(gòu)造方法
ps:
如果,您希望更容易地發(fā)現(xiàn)我的新博客敷矫,不妨點(diǎn)擊一下關(guān)注例获。
如果你覺得本篇文章對(duì)你有所幫助,請(qǐng)給予我更多的鼓勵(lì)曹仗,
因?yàn)檎ヌ溃业膶懽鳠崆橐搽x不開您的肯定支持,感謝您的閱讀怎茫,我是【肥肥也】收壕!