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
- java reflect
- java reflect
- java reflect
- Java Reflect
- java .reflect
- Java reflect
- java-reflect
- Reflect-Java
- JAVA Reflect
- Java Reflect
- JAVA reflect
- Java-Reflect
- java.lang.reflect
- java.lang.reflect包
- java.lang.reflect.Filed
- java.lang.reflect.Method
- java 反射机制 reflect
- java反射机制reflect
- 【Cocos游戏实战】功夫小子第五课之帮助场景和选关功能的实现
- 测试Markdown
- 如何判断网站被黑?
- 【操作系统】考前回顾
- 23种设计模式(2):工厂方法模式
- java-reflect
- cocos2dx番外篇——更换精灵图片
- 新手,让我们记忆慢慢记录吧!
- 项目笔记:6.利用LVS实现网站流量高效快速的分发
- c++中的构造函数和析构函数
- PY++ 自动将你的C++程序接口封装供python调用
- 23种设计模式(3):抽象工厂模式
- Hadoop2.6集群环境虚拟机中搭建网络配置
- java学习之旅28--_面向对象_01_面向过程和面向对象的本质区别