zoukankan      html  css  js  c++  java
  • Java反射理解(四)-- 获取成员变量构造函数信息

    Java反射理解(四)-- 获取成员变量构造函数信息

    步骤

    获取成员变量信息:
    1. obj.getClass() 获取类类型对象
    2. 成员变量也是对象,java.lang.reflect.Field 类中封装了关于成员变量的操作:
      • getFields() 方法获取的是所有的public的成员变量的信息
      • getDeclaredFields() 获取的是该类自己声明的成员变量的信息
    3. getType() 得到成员变量的类型的类类型
    4. getName() 得到成员变量的名称
    获取成员变量构造函数信息:
    1. obj.getClass() 获取类类型
    2. 构造函数也是对象,java.lang. Constructor 中封装了构造函数的信息:
      • getConstructors() 获取所有的public的构造函数
      • getDeclaredConstructors() 得到所有的构造函数
    3. getName() 得到构造函数名称
    4. getParameterTypes() 获取参数列表类类型

    举例

    1. 获取成员变量的信息
    public class ClassUtil {
    	/**
         * 获取成员变量的信息
         * @param obj
         */
    	public static void printFieldMessage(Object obj) {
    		Class c = obj.getClass();
    		/*
    		 * 成员变量也是对象
    		 * java.lang.reflect.Field
    		 * Field类封装了关于成员变量的操作
    		 * getFields()方法获取的是所有的public的成员变量的信息
    		 * getDeclaredFields获取的是该类自己声明的成员变量的信息
    		 */
    		//Field[] fs = c.getFields();
    		Field[] fs = c.getDeclaredFields();
    		for (Field field : fs) {
    			//得到成员变量的类型的类类型
    			Class fieldType = field.getType();
    			String typeName = fieldType.getName();
    			//得到成员变量的名称
    			String fieldName = field.getName();
    			System.out.println(typeName+" "+fieldName);
    		}
    	}
    }
    

    测试:

    public class ClassDemo4 {
    	public static void main(String[] args) {
    		ClassUtil.printFieldMessage("hello");
            System.out.println("==========");
            ClassUtil.printFieldMessage(new Integer(1));
    	}
    }
    
    2. 获取成员变量构造函数的信息
    public class ClassUtil {
    	/**
    	 * 打印对象的构造函数的信息
    	 * @param obj
    	 */
    	public static void printConMessage(Object obj){
    		Class c = obj.getClass();
    		/*
    		 * 构造函数也是对象
    		 * java.lang. Constructor中封装了构造函数的信息
    		 * getConstructors获取所有的public的构造函数
    		 * getDeclaredConstructors得到所有的构造函数
    		 */
    		//Constructor[] cs = c.getConstructors();
    		Constructor[] cs = c.getDeclaredConstructors();
    		for (Constructor constructor : cs) {
    			System.out.print(constructor.getName()+"(");
    			//获取构造函数的参数列表--->得到的是参数列表的类类型
    			Class[] paramTypes = constructor.getParameterTypes();
    			for (Class class1 : paramTypes) {
    				System.out.print(class1.getName()+",");
    			}
    			System.out.println(")");
    		}
    	}
    }
    

    测试:

    public class ClassDemo5 {
    	public static void main(String[] args) {
    		ClassUtil.printConMessage("hello");
            ClassUtil.printconMessage(new Integer(1));
    	}
    }
    

    完。

  • 相关阅读:
    爆打团队 2016.04.12 站立会议
    爆打团队 2016.04.11 站立会议
    爆打团队 2016.04.10 站立会议
    爆打小组 4.3日站立会议
    随机生成题目的代码分析
    爆打 第二周第二次站立会议(2016.3.29)
    爆打小组,四则运算,算法实现
    add some template for ec-final
    2014_acmicpc_shanghai_google
    matrix_world_final_2013
  • 原文地址:https://www.cnblogs.com/weixuqin/p/11220743.html
Copyright © 2011-2022 走看看