Java--Reflect(反射)专题4——获取成员变量以及构造函数信息

转载请注明:http://blog.csdn.net/uniquewonderq

首先写一个获取成员变量的静态方法:

成员变量也是对象,

是java.lang.reflect.Field类的对象

Field类封装了关于成员变量的操作

getFields()获取的是所有的public的成员变量的信息

getDeclaredFields()获取的是该类自己声明的成员变量的信息,可能是私有的也可能是共有的

       public static  void printFieldMessage(Object obj){
            Class c=obj.getClass();//传递的是哪个子类的对象,c就是该子类的类类型
            /*
                成员变量也是对象,
                是java.lang.reflect.Field类的对象
                Field类封装了关于成员变量的操作
                getFields()获取的是所有的public的成员变量的信息
                getDeclaredFields()获取的是该类自己声明的成员变量的信息,可能是私有的也可能是共有的
                */
                Field[] fs;
                //fs=c.getFields();
                fs=c.getDeclaredFields();
                for(Field  field:fs){
                    //获取成员变量类型的类类型,也就是说,如果得到的是int类型的成员变量,那么返回int.class
                    Class fieldType =field.getType();
                    String typeName=fieldType.getName();//得到成员变量类型
                    //得到成员变量的名字
                    String fieldName=field.getName();
                    System.out.println("成员变量类型:"+typeName+"    成员变量名为:"+fieldName);
                }
        }

测试代码:

    public static void main(String[] args)  {
                String s="hello";
                Integer integer=8;
                //printClassMethodMessage(s);//获得方法信息
                printFieldMessage(integer);//获得成员变量信息
               // printConMessage(integer);

        }

测试结果:

run:

成员变量类型:int    成员变量名为:MIN_VALUE

成员变量类型:int    成员变量名为:MAX_VALUE

成员变量类型:java.lang.Class    成员变量名为:TYPE

成员变量类型:[C    成员变量名为:digits

成员变量类型:[C    成员变量名为:DigitTens

成员变量类型:[C    成员变量名为:DigitOnes

成员变量类型:[I    成员变量名为:sizeTable

成员变量类型:int    成员变量名为:value

成员变量类型:int    成员变量名为:SIZE

成员变量类型:int    成员变量名为:BYTES

成员变量类型:long    成员变量名为:serialVersionUID

然后在写一个获取对象的构造方法的函数:

构造函数也是对象,

是java.lang.reflect.Constructor封装了构造函数的信息

  public static  void printConMessage(Object obj){
        //要想获取类的信息,首先获得它的类类型
        Class c=obj.getClass();
        /*
        构造函数也是对象,
        是java.lang.reflect.Constructor封装了构造函数的信息
        */
        Constructor [] cs;
        //cs=c.getConstructors();//获得所有的共有的方法
        cs=c.getDeclaredConstructors();//获取所有的构造方法
        for(Constructor constructor:cs){
            System.out.print("构造方法  "+constructor.getName()+"(");
            //下面获取构造函数的参数列表,
            //得到的是参数列表的类类型
            Class[] paramTypes=constructor.getParameterTypes();
            for(Class c1:paramTypes){
                System.out.print(c1.getName()+",");
            }
            System.out.print(")");
            System.out.println();
        }

测试代码:

 public static void main(String[] args)  {
                String s="hello";
                //Integer integer=8;
                //printClassMethodMessage(s);//获得方法信息
                //printFieldMessage(integer);//获得成员变量信息
                printConMessage(s);

        }

测试结果:  即string类的所有构造方法

构造方法  java.lang.String([B,int,int,)

构造方法  java.lang.String([B,java.nio.charset.Charset,)

构造方法  java.lang.String([B,java.lang.String,)

构造方法  java.lang.String([B,int,int,java.nio.charset.Charset,)

构造方法  java.lang.String([B,int,int,java.lang.String,)

构造方法  java.lang.String([C,boolean,)

构造方法  java.lang.String(java.lang.StringBuilder,)

构造方法  java.lang.String(java.lang.StringBuffer,)

构造方法  java.lang.String([B,)

构造方法  java.lang.String([I,int,int,)

构造方法  java.lang.String()

构造方法  java.lang.String([C,)

构造方法  java.lang.String(java.lang.String,)

构造方法  java.lang.String([C,int,int,)

构造方法  java.lang.String([B,int,)

构造方法  java.lang.String([B,int,int,int,)

时间: 2024-10-03 23:05:02

Java--Reflect(反射)专题4——获取成员变量以及构造函数信息的相关文章

通过class类获取类的成员变量和构造函数信息

Java反射理解(四)-- 获取成员变量构造函数信息

Java反射理解(四)-- 获取成员变量构造函数信息 步骤 获取成员变量信息: obj.getClass() 获取类类型对象 成员变量也是对象,java.lang.reflect.Field 类中封装了关于成员变量的操作: getFields() 方法获取的是所有的public的成员变量的信息 getDeclaredFields() 获取的是该类自己声明的成员变量的信息 getType() 得到成员变量的类型的类类型 getName() 得到成员变量的名称 获取成员变量构造函数信息: obj.g

Android(java)学习笔记:109:通过反射获取成员变量并且使用

1 package cn.itcast_03; 2 3 import java.lang.reflect.Constructor; 4 import java.lang.reflect.Field; 5 6 /* 7 * 通过发生获取成员变量并使用 8 */ 9 public class ReflectDemo { 10 public static void main(String[] args) throws Exception { 11 // 获取字节码文件对象 12 Class c = C

00112_通过反射获取成员变量并使用

1.在反射机制中,把类中的成员变量使用类Field表示: 2.通过Class类中提供的方法获取成员变量: (1)返回一个成员变量 public Field getField(String name) 获取指定的 public修饰的变量 public Field getDeclaredField(String name) 获取指定的任意变量 (2)返回多个成员变量 public Field[] getFields() 获取所有public 修饰的变量 public Field[] getDecla

反射获取成员变量,并修改值

/* * 反射获取成员变量,并修改值 * Person类中的成员String name */ public class ReflectDemo5 { public static void main(String[] args) throws Exception{ Class c = Class.forName("cn.itcast.demo1.Person"); Object obj = c.newInstance(); //获取成员变量 Class类的方法 getFields() c

java reflect反射总结

--------------TestBean package lh.demo.bean; public class TestBean { private String userName; private String password; private String age; public TestBean (){ } public TestBean (String _userName,String _password,String _age){ this.userName = _userNam

C++成员变量、构造函数的初始化顺序 [转]

C++成员变量.构造函数的初始化顺序 一.C++成员变量初始化 1.普通的变量:一般不考虑啥效率的情况下 可以在构造函数中进行赋值.考虑一下效率的可以再构造函数的初始化列表中进行 2.static 静态变量(本地化数据和代码范围): static变量属于类所有,而不属于类的对象,因此不管类被实例化了多少个对象,该变量都只有一个.在这种性质上理解,有点类似于全局变量的唯一性. 函数体内static变量的作用范围时该函数体,不同于auto变量,该变量内存只被分配一次,因此其值在下次调用时维持上次的值

java 反射 - 获取成员变量的值.

通过反射,可以获取所有声明的成员变量(包括所有的),代码如下: package spt.test.src; public class Person { private String name = "pri_name"; public String id; } 运行测试: package spt.test; import java.lang.reflect.Field; import spt.test.src.Person; class ReflectionTest { @Suppres

Java —— Reflect反射机制

Class类的使用 OOP的世界里,万事万物皆对象.类是谁的对象呢?——类是对象,类是java.lang.Class类的实例对象!There is a class named class. 实例: //有一个类 class Foo { void print() {System.out.println("Foo");} } //在main函数里: public static void main(String[] args) { //Foo这个类也是一个实例对象,Class类的实例对象,如