java-reflect

来源:互联网 发布:商之友软件 编辑:程序博客网 时间:2024/05/16 03:49
实体类
package reflectTest;public class Person {private String name;private String age;public String sex;public Person(String name, String age, String sex) {super();this.name = name;this.age = age;this.sex = sex;}public Person() {super();}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 getSex() {return sex;}public void setSex(String sex) {this.sex = sex;}private String getPrivateMethod(){return "success";}@Overridepublic String toString() {return "Person [name=" + name + ", age=" + age + ", sex=" + sex + "]";}}

反射测试

Class personClass = null;//获得class方法一//personClass = personClass.class;//获得class方法二//try {//personClass = Class.forName("reflectTest.personClass");//} catch (ClassNotFoundException e) {//e.printStackTrace();//}//获得class方法三Person p=new Person();p.setName("laoliu");p.setAge("99");p.setSex("man");personClass=p.getClass();

// 获取对象的 修饰符、名字System.out.println(Modifier.toString(personClass.getModifiers())+" class "+personClass.getName()+" simpleName:"+personClass.getSimpleName());//获取对象属性的修饰符、类型、名字Field[] allFields = personClass.getDeclaredFields();//所有属性//Field[] publicFields = personClass.getFields();//公共属性if (allFields != null && allFields.length > 0) {for (int i = 0; i < allFields.length; i++) {System.out.println(Modifier.toString(allFields[i].getModifiers())+ " "+ allFields[i].getType().getSimpleName()+" "+allFields[i].getName());}}

out: 

public class reflectTest.Person simpleName:Person
private String name
private String age
public String sex

//获取对象的方法//Method[] methods=personClass.getMethods();//获取公共方法Method[] methods=personClass.getDeclaredMethods();//获取全部方法(公有和私有)Method.setAccessible(methods, true);String mName="";for(Method m : methods){mName=m.getName().toString();StringBuffer sb=new StringBuffer();if(mName.startsWith("get") && !mName.startsWith("getClass")){try {sb.append(mName+"---Value---"+m.invoke(p, null));//Method.invoke(obj,args) obj对象调用该方法} catch (Exception e) {e.printStackTrace();} }else{sb.append(mName);}System.out.println(sb.toString());}

out:

toString
getName---Value---laoliu
setName
getPrivateMethod---Value---success
setAge
setSex
getAge---Value---99
getSex---Value---man

//根据给定属性名称获取该属性在实例中的值String fieldName="name";try {String fieldValue=personClass.getMethod("get"+fieldName.substring(0,1).toUpperCase()+fieldName.substring(1), null).invoke(p,null).toString();System.out.println("fieldValue:"+fieldValue);} catch (Exception e) {e.printStackTrace();}
out:

fieldValue:laoliu

//获取构造方法//Constructor[] cons=personClass.getConstructors();//获取public构造方法Constructor[] cons=personClass.getDeclaredConstructors();//获取所有构造方法StringBuffer sb=null;for(Constructor c : cons){sb=new StringBuffer();sb.append(Modifier.toString(c.getModifiers())  +" ");//获取修饰符sb.append(c.getName()  +" (");//获取构造方法名字Class[] parameterTypes= c.getParameterTypes();//获取参数列表for(Class pt : parameterTypes){sb.append(pt.getSimpleName()  +",");//获取参数名称}sb.append("){}");System.out.println(sb.toString());//构造方法实例化化实例if(parameterTypes.length==3){try {Object obj=c.newInstance("gebilaoliu","26","man");//用指定的参数初始化实例System.out.println(obj.toString());} catch (Exception e) {e.printStackTrace();}}}
out:

public reflectTest.Person (String,String,String,){}
public reflectTest.Person (){}

Person [name=gebilaoliu, age=26, sex=man]



0 0
原创粉丝点击