反射获得类的成员变量以及构造方法——反射_3 – 热爱改变生活
我的GitHub GitHub |     登录
  • If you can't fly, then run; if you can't run, then walk; if you can't walk, then crawl
  • but whatever you do, you have to keep moving forward。
  • “你骗得了我有什么用,这是你自己的人生”
  • 曾有伤心之地,入梦如听 此歌

反射获得类的成员变量以及构造方法——反射_3

Java sinvader 2376℃ 0评论

1. 首先把要测试类的放出来。里面包含了成员变量以及构造函数:

public class TestClass {
	public String name = "";
	public int age = 2;
	public double height = 2.2;
	private String address = "";
	float salary;

	public TestClass() {

	}

	public TestClass(String name, int age, double height) {

	}
}

2. 下面是获得成员变量以及构造函数的方法:

public class ClassUtil {
	/**获取类中的成员变量
	 * @param obj
	 */
	public static void getClassFieldUseGetFields(Object obj) {
		Class c = obj.getClass();
		System.out.println("当前类的名称为:" + c.getName());
		System.out.println("类中的成员变量有:");
		Field[] fields = c.getFields();// 使用这个方法获得的是 public 的方法
		// 使用 Modifier.toString(field.getModifiers()) 方法可以获得变量的修饰符:public private 等
		for (Field field : fields) {
			System.out.println(Modifier.toString(field.getModifiers()) + "  " + field.getGenericType() + " " + field.getName() + "");
		}
	}

	/**
	 * 获取类中的成员变量
	 * @param obj
	 */
	public static void getClassFieldUseGetDeclaredFields(Object obj) {
		Class c = obj.getClass();
		System.out.println("当前类的名称为:" + c.getName());
		System.out.println("类中的成员变量有:");
		Field[] fields = c.getDeclaredFields();// 使用这个方法获得的是类里面所有的自己定义的变量
		// 使用 Modifier.toString(field.getModifiers()) 方法可以获得变量的修饰符:public private 等
		for (Field field : fields) {
			System.out.println(Modifier.toString(field.getModifiers()) + "  " + field.getType() + " " + field.getName() + "");
		}
	}

	/**
	 * 获取类中的构造方法
	 * @param obj
	 */
	public static void getClassConInfo(Object obj) {
		Class c = obj.getClass();
		Constructor[] con = c.getConstructors();
		for (Constructor constructor : con) {
			System.out.print(Modifier.toString(constructor.getModifiers()) + "  " + constructor.getName() + "(");
			Class[] parameterType = constructor.getParameterTypes();
			for (Class class1 : parameterType) {
				System.out.print(class1.getName()+",");
			}
			System.out.print(")");
			System.out.println("");
		}
	}
}

3. 运行代码:

public static void main(String[] args) {
		TestClass t = new TestClass();
		System.out.println("使用 GetField-----------------------------------");
		ClassUtil.getClassFieldUseGetFields(t);
		System.out.println("使用 GetDeclared-----------------------------------");
		ClassUtil.getClassFieldUseGetDeclaredFields(t);
		System.out.println("获得类的构造方法的信息-----------------------------------");
		ClassUtil.getClassConInfo(t);
	} 

4. 运行结果:

当前类的名称为:cn.sumile.TestClass
类中的成员变量有:
public  class java.lang.String name
public  int age
public  double height
使用 GetDeclared-----------------------------------
当前类的名称为:cn.sumile.TestClass
类中的成员变量有:
public  class java.lang.String name
public  int age
public  double height
private  class java.lang.String address
  float salary
获得类的构造方法的信息-----------------------------------
public  cn.sumile.TestClass()
public  cn.sumile.TestClass(java.lang.String,int,double,)

测试代码
¥ 有帮助么?打赏一下~

转载请注明:热爱改变生活.cn » 反射获得类的成员变量以及构造方法——反射_3


本博客只要没有注明“转”,那么均为原创。 转载请注明链接:sumile.cn » 反射获得类的成员变量以及构造方法——反射_3

喜欢 (1)
发表我的评论
取消评论
表情

如需邮件形式接收回复,请注册登录

Hi,你需要填写昵称和邮箱~

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址