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));
    	}
    }
    

    完。

  • 相关阅读:
    一个万能的工具包下载网站
    Keras框架简介
    发现了一个非常棒的pyqt5的例子集
    人脸识别常用数据集大全(12/20更新)
    用 opencv和numpy进行图片和字符串互转,并保存至 json
    机器学习中的范数规则化-L0,L1和L2范式(转载)
    利用face_recognition库裁取人脸
    一招解决C盘空间不足,再也不怕硬盘爆满!
    【LeetCode】394.字符串解码(辅助栈、递归、详细图解)
    程序员那些事儿:女婿程序员
  • 原文地址:https://www.cnblogs.com/weixuqin/p/11220743.html
Copyright © 2011-2022 走看看