`
iluoxuan
  • 浏览: 571657 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

java反射基础-实列

    博客分类:
  • java
 
阅读更多

1:Class<?> ,Class对象时所有类可以实例化出来,多用来反射,得到该类的全部信息

其中?表示,无限参数和类型,避免类型转换

2:实列

首页定义一个Person类

package com.domain;

public class Person {
     private String name;
     private String age;
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getAge() {
		return age;
	}
	public void setAge(String age) {
		this.age = age;
	}
	public String toString(){
		
		StringBuffer sb = new StringBuffer();
		sb.append("<name>").append(name).append("</name>");
		sb.append("<age>").append(age).append("</age>");
		return sb.toString();
		
	}
     
}

 

2:用反射来实例化Person类,操作该类的属性,方法。

 

package com.reflect;

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

import com.domain.Person;

public class Reflect {

	public static void main(String[] args) throws ClassNotFoundException,
			InstantiationException, IllegalAccessException, SecurityException, NoSuchMethodException, IllegalArgumentException, InvocationTargetException {
		Class<?> demo = null;
		//所有类的对象其实都是Class类的实列
		demo = Class.forName("com.domain.Person");//得到Person类的Class类对象(尽量用这种方式)
		// demo = new Person().getClass(); 方法2
		//demo = Person.class;
		Person p = (Person) demo.newInstance();//用类名得到person对象

		//拿到本类的所有属性信息,如果实取得父类和实现接口的属性用demo.getFields()方法
		Field[] field = demo.getDeclaredFields();
		for (int i = 0; i < field.length; i++) {
			//权限修饰符
			int mo = field[i].getModifiers();
			String priy = Modifier.toString(mo);

			//属性类型
			Class<?> type = field[i].getType();

			System.out.println("属性的权限--" + priy + "    属性的类型---"
					+ type.getName() + "     属性名---" + field[i].getName());
		}
		
		/*
		 * 調用改Person對象的方法
		 */
		 Object ob = null;
		 ob = demo.newInstance();
		 pset(ob,"Age","11111",String.class);
		 Pget(ob,"Age");

	}

	private static void Pget(Object ob, String att) throws SecurityException, NoSuchMethodException, IllegalArgumentException, IllegalAccessException, InvocationTargetException {
		    Method method = ob.getClass().getMethod("get"+att);
		    System.out.println(method.invoke(ob));
		
	}

	private static void pset(Object ob, String att, Object value,
			Class<?> type) throws SecurityException, NoSuchMethodException, IllegalArgumentException, IllegalAccessException, InvocationTargetException {
		      Method method = ob.getClass().getMethod("set"+att,type);
		      method.invoke(ob, value);
		
	}

}

结果:

属性的权限--private    属性的类型---java.lang.String     属性名---name
属性的权限--private    属性的类型---java.lang.String     属性名---age
11111
 

 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics