常用方法
①. 判断对象是否属于反射得到的类(isInstance)
- class S {
- }
- public class IsInstance {
- public static void main(String args[]) {
- try {
- Class cls = Class.forName("S");
- boolean b1 = cls.isInstance(new Integer(37));
- System.out.println(b1);
- boolean b2 = cls.isInstance(new S());
- System.out.println(b2);
- }
- catch (Throwable e) {
- System.err.println(e);
- }
- }
- }
在这个例子中创建了一个S 类的 Class 对象,然后检查一些对象是否是S的实例。结果输出false和true。说明Integer(37) 不是,但 new S()是。
②. 获取某个反射类的所有属性字段
- /**
- * 获取反射类的所有属性字段
- *
- * @param ownerClass 反射的类
- * @return
- * @throws Exception
- */
- public Field[] getProperty(Class ownerClass) throws Exception {
- //获取该类所有属性字段
- //Field[] fields = ownerClass.getFields();//只获取public访问权限的属性字段(包括父类的)
- Field[] fields = ownerClass.getDeclaredFields();//只获取该类的所有访问权限的属性(不含父类)
- //输出所有属性字段
- for(int i=0;i<fields.length;i++){
- System.out.println("属性:"+fields[i]);
- }
- return fields;
- }
③. 获取反射类的某个public属性值
- /**
- * 获取反射类的某个public属性值
- *
- * @param ownerClass 反射的类
- * @param fieldName 属性名
- * @return
- * @throws Exception
- */
- public Object getProperty(Object owner,String fieldName) throws Exception {
- //得到对象所属类
- Class ownerClass = owner.getClass();
- //获取该类的某个属性
- Field field = ownerClass.getField(fieldName);
- //获取某个对象的特定属性
- Object property = field.get(owner);
- //输出该属性信息
- System.out.println(fieldName+"的属性值:"+property.toString());
- return property;
- }
④.获取反射类的该中的所有方法
- /**
- * 获取反射类的该中的所有方法
- * @param ownerClass 反射的类
- * @return
- * @throws Exception
- */
- public Method[] getMethods(Class ownerClass) throws Exception {
- //获取该类所有方法
- //Field[] fields = ownerClass.getMethods();//只获取public访问权限的方法(包括父类的)
- Method[] methods = ownerClass.getDeclaredMethods();//只获取该类的所有访问权限的方法(不含父类)
- //输出所有方法
- for(int i=0;i<methods.length;i++){
- System.out.println("方法:" +methods[i]);
- }
- return methods;
- }
⑤. 执行反射类的该中的某个方法
- /**
- * 执行反射类的该中的某个方法
- * @param ownerClass 反射的类
- * @param methodName 方法名
- * @return
- * @throws Exception
- */
- public Object invokeMethod(Object owner,String methodName,Object[] args) throws Exception {
- //得到对象所属类
- Class ownerClass = owner.getClass();
- //获取该类的某个方法
- Method method = ownerClass.getMethod(methodName, null);
- //执行某个对象的方法
- Object result = method.invoke(owner, args);
- //输出结果信息
- System.out.println("结果返回值:"+ result);
- return result;
- }
- /**
- * 测试反射常用方法
- */
- public void refTest(){
- String className = "com.java.reflecttest.Student";
- try {
- //通过反射机制,使用类装载器,装载该类
- Class<?> stu = Class.forName(className);
- Object objStu = stu.newInstance();
- //获取反射类的所有属性
- System.out.println("\n>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>\n");
- System.out.println("调用 getProperty 方法,获取Student类的所有属性");
- getProperty(stu);
- //获取反射类的某个属性值
- System.out.println("\n>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>\n");
- System.out.println("调用 getProperty 方法,获取Student类的NAME属性值");
- getProperty(objStu,"NAME");
- //获取反射类的所有方法
- System.out.println("\n>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>\n");
- System.out.println("调用 getMethods 方法,获取Student类的所有方法");
- getMethods(stu);
- //执行反射类的getInfo方法
- System.out.println("\n>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>\n");
- System.out.println("调用 invokeMethod 方法,执行Student类的getInfo方法");
- invokeMethod(objStu, "getInfo", null);
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
演示所用的Student类
- package com.java.reflecttest;
- /**
- * 学生信息类
- *
- * @author Longxuan
- *
- */
- public class Student {
- /**
- * 学号
- */
- private String stuId ;
- /**
- * 学号
- */
- public String STUID;
- /**
- * 姓名
- */
- private String name ;
- /**
- * 姓名
- */
- public String NAME;
- /**
- * 年龄
- */
- private int age;
- /**
- * 年龄
- */
- public int AGE;
- /**
- * 班级
- */
- private String classid;
- public String getStuId() {
- return stuId;
- }
- public void setStuId(String stuId) {
- this.stuId = stuId;
- }
- public String getName() {
- return name;
- }
- public void setName(String name) {
- this.name = name;
- }
- public int getAge() {
- return age;
- }
- public void setAge(int age) {
- this.age = age;
- }
- public String getClassid() {
- return classid;
- }
- public void setClassid(String classid) {
- this.classid = classid;
- }
- /**
- * 输出学生信息
- */
- public void getInfo(){
- System.out.println("学生信息:\n学号:"+stuId+"\t姓名:"+name+"\t年龄:"+age+"\t班级:"+classid);
- }
- /**
- * 构造函数
- */
- public Student(){
- init();
- }
- /**
- * 私有初始化方法
- */
- private void init(){
- this.name = "张三";
- this.stuId ="1001";
- this.age = 14;
- this.classid = "A001";
- this.NAME = name;
- this.AGE = age;
- this.STUID = stuId;
- }
- }