java反射机制获得属性值

本文通过Java反射API,展示如何操作JavaBean的属性,包括获取、设置属性值,以及通过反射获取属性对应的getter和setter方法。此外,文章还演示了如何使用反射创建实例并调用方法,以及遍历类的所有属性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

package com.test;

import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

public class Test {
	
	private String username;
	private String password;
	private String age;
	
	public String getAge() {
		return age;
	}

	public void setAge(String age) {
		this.age = age;
	}

	public Test() {
		super();
	}

	public Test(String username, String password) {
		super();
		this.username = username;
		this.password = password;
	}

	public String getUsername() {
		return username;
	}

	public void setUsername(String username) {
		this.username = username;
	}

	public String getPassword() {
		return password;
	}

	public void setPassword(String password) {
		this.password = password;
	}

	public static void main(String[] args) throws Exception {
//		Test t = new Test();
//		t.setUsername("2");
//		//获得class的完整路径	t.getClass().getDeclaredFields();
//		System.out.println("显示为:"+t.getClass().getSimpleName());
//		
//		Class c = Class.forName("com.test.Test");
//		System.out.println(Modifier.toString(c.getModifiers())+c.getSimpleName());

//	   Class c = Class.forName("com.test.Test");
//	   Field field = c.getDeclaredField("username");
//	   field.setAccessible(true);//修改访问权限
//	   System.out.println(field.getName());
//	   Test obj = (Test)c.newInstance();
//	   obj.setUsername("3");
//	   obj.setPassword("3");
//	   obj.setAge("2");
//	   System.out.println(field.get("username"));
		
		Test t = new Test("1","1");
		Test t2 = new Test("2","2");
		List<Test> list = new ArrayList<Test>();
		list.add(t);
		list.add(t2);
		
		Iterator<Test> it = list.iterator();
		
		while(it.hasNext()) {
			Test test = it.next();
			System.out.println("username:"+test.getUsername()+"password:"+test.getPassword());
		}
		System.out.println("------------------无敌分隔线---------------------");
		//利用反射获得javabean属性的先后顺序
		Field[] fields = Test.class.getDeclaredFields();
		
		for (int i = 0; i < fields.length; i++) {
			System.out.print(fields[i].getName()+"\t");
			//利用javabean属性获取获得属性的方法名
			String fieldname = fields[i].getName();
			String getMethodName = "get"+fieldname.substring(0, 1).toUpperCase()+fieldname.substring(1);
			System.out.print("获得属性的方法名为:"+getMethodName+"\t");
			
			Method method = Test.class.getMethod(getMethodName, new Class[]{});
			System.out.println("这个方法的值为:"+method.invoke(t2));
		}
		
		
		
		System.out.println("---------------------无敌超级分隔线------------------------");
		
		 /* 
	        * 得到类中的方法 
	        */  
	       Method[] methods = Test.class.getMethods();  
	       for(int i = 0; i < methods.length; i++){  
	           Method method = methods[i];  
	           if(method.getName().startsWith("get")){  
	              System.out.print("methodName:"+method.getName()+"\t");  
	              System.out.println("value:"+method.invoke(t2));//得到get 方法的值  
	           }  
	       }
		

	   
	   
	   
	   
	   
	   
	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值