java 反射 案例

测试类Person:

package com.ideal.test;

public class Person {

	public int name;
	public int age;
	
	public Person(int name, int age) {
		this.name = name;
		this.age = age;
	}
	
	public Person() {
		
	}

	public int getName() {
		return name;
	}

	public void setName(int name) {
		this.name = name;
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}
	
	public void getStr() {
		System.out.println("测试获取方法.");
	}
}
TestReflect类:
<pre name="code" class="java">package com.ideal.test;

import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;

/**
 * 
 * @author XHL
 *
 */
public class TestReflect {
	@SuppressWarnings("rawtypes")
	public static void main(String[] args) throws IllegalArgumentException, InvocationTargetException, NoSuchFieldException, SecurityException, IllegalAccessException, InstantiationException, NoSuchMethodException, ClassNotFoundException {
		//第一获取类型的方式
		Class c1 = Person.class;
		//第二种
		Class c2 = Class.forName("com.ideal.test.Person");
		//第三种
		Person p = new Person();
		p.setAge(18);
		//p.setName("XHL");
		Class c3 = p.getClass();
			//创建的新对象
			Person PersonXue = (Person)c3.newInstance();
			PersonXue.setAge(50);
			PersonXue.setName(100);
			//获取Person类的getStr()方法
			Method method = c3.getMethod("getStr");
			//调用该该方法invoke为可变参数,第一参数为对象,后面的参数为 该方法参数
			method.invoke(PersonXue);
			//获取修饰符 和类名
			System.out.println(Modifier.toString(c3.getModifiers()) + " class " + c3.getSimpleName());
			
			//获取所有方法名
			Method[] methods = c3.getMethods();
			for (Method meth : methods) {
				System.out.println("method" + meth.getName());
			}
			// 获取所有属性
			Field[] declaredFields = c3.getDeclaredFields();
			for (Field field : declaredFields) {
				//设置些属性是可以访问的  
				field.setAccessible(true); 
				//获取属性的值
				Object object = field.get(PersonXue);
				//获取属性名
				System.out.println(field.getName());
				//输出属性值
				System.out.println(object);
			}
			//指定获取单一的属性
			Field fieldF = c3.getDeclaredField("age");
			//设置这些书属性是可以访问的
			fieldF.setAccessible(true);
			//重新赋值
			fieldF.set(PersonXue, 100);
			System.out.println(PersonXue.getAge());
			//getDeclaredFields()获得某个类的所有申明的字段,即包括public、private和proteced,但是不包括父类的申明字段。
			Field[] declaredFieldss = c3.getDeclaredFields();
			for (Field field : declaredFieldss) {
				System.out.println("0:" + field.getName());
			}
			//getFields()获得某个类的所有的公共(public)的字段,包括父类。 
			Field[] fields = c3.getFields();
			for (Field field : fields) {
				System.out.println("1:" + field.getName());
			}
			//同样类似的还有getConstructors()和getDeclaredConstructors(),getMethods()和getDeclaredMethods()。
			
	}
}


 


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值