java反射怎么获取结构体_Java反射学习-1 - 反射获取类的属性,方法,构造器

1 package cn.tx.reflect;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 * 一、反射获取类的属性,方法,构造器9 * @author Administrator10 *11 */

12 public classReflectLearn1 {13

14 private static String className = "java.lang.String";15 public static voidmain(String[] args) throws Exception {16 //>中的问号为泛型,表示不知道后面list对象 中存放的实际类型是什么,用?表示17 //List> list = new ArrayList();18

19 // 1.根据一个类的全路径名获取一个类的类对象:Class对象

20

21 Class> clazz = Class.forName(className);22

23 //2.获得传递过来的类(上面的String类)的所有声明方法——目的就是为了调用获得的方法

24 Method[] methods = clazz.getDeclaredMethods();25 for(Method m : methods) {26 System.out.println(m);27 }28

29 //3.获得类的所有声明的属性——目的:设置属性或者是获取属性值,或者是获取属性上的注解!

30 System.out.println("-------------获得类的所有声明的属性---------------");31 Field[] fields = clazz.getDeclaredFields();32 for(Field field : fields) {33 System.out.println(field);34 }35

36 // 4.获得类的所有构造器——创建对象

37 System.out.println("--------------获得类的所有构造器--------------");38 Constructor>[] constructors = clazz.getDeclaredConstructors();39 for (Constructor>constructor : constructors) {40 System.out.println(constructor);41 }42

43 //5.获取一个类的Class对象的三种方式:44 //(1)知道类的全路径名,Class> clazz = Class.forName("类的全路径名");45 //(2)知道该类的一个对象 Class> clazz = 对象名.getClass();46 //(3)知道类的名字: Class> clazz = 类名.class;

47 System.out.println("----------获取Person类的信息-------------");48 Person p = newPerson();49 test(p);50 /*test(p);打印结果如下51 * ----------获取Person类的信息-------------52 public java.lang.String cn.tx.Person.toString()53 public java.lang.String cn.tx.Person.getAddress()54 public java.lang.String cn.tx.Person.getName()55 public java.lang.Integer cn.tx.Person.getId()56 public void cn.tx.Person.setName(java.lang.String)57 public void cn.tx.Person.setId(java.lang.Integer)58 public void cn.tx.Person.setAddress(java.lang.String)59 -------------获得类的所有声明的属性---------------60 private java.lang.Integer cn.tx.Person.id61 private java.lang.String cn.tx.Person.name62 private java.lang.String cn.tx.Person.address63 --------------获得类的所有构造器--------------64 public cn.tx.Person()65 public cn.tx.Person(java.lang.Integer,java.lang.String,java.lang.String)66 **/

67 //(3)

68

69

70 }71

72 /**73 * Class extends Object>74 * @param obj75 */

76 public static voidtest(Object obj){77 //Class extends Object>表示通过反射获取的对象的类型不确定,但是一定是Object类的子类78 //等价于Class> clazz = obj.getClass();

79 Class extends Object> clazz =obj.getClass();80 //2.获得传递过来的类(上面的String类)的所有方法——目的就是为了调用获得的方法

81 Method[] methods =clazz.getDeclaredMethods();82 for(Method m : methods) {83 System.out.println(m);84 }85

86 //3.获得类的所有声明的属性——目的:设置属性或者是获取属性值

87 System.out.println("-------------获得类的所有声明的属性---------------");88 Field[] fields =clazz.getDeclaredFields();89 for(Field field : fields) {90 System.out.println(field);91 }92

93 //4.获得类的所有构造器——创建对象

94 System.out.println("--------------获得类的所有构造器--------------");95 Constructor>[] constructors =clazz.getDeclaredConstructors();96 for (Constructor>constructor : constructors) {97 System.out.println(constructor);98 }99 }100

101 }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值