• Reflect反射练习


    通过反射获得对象的成员变量,构造方法,方法

    package Reflect; import java.lang.reflect.Constructor; import java.lang.reflect.Field; import java.lang.reflect.Method; import java.util.Arrays; import java.util.Scanner;
    public class ReflectDemo { public static void main(String[] args) throws ClassNotFoundException { System.out.println("请输入完整的类名"); String string = new Scanner(System.in).nextLine(); //获取类对象 Class<?> c = Class.forName(string); //包名、类名 System.out.println(c.getPackage().getName());//包名 System.out.println(c.getName());//完整类名 System.out.println(c.getSimpleName());//简写类名 System.out.println("-----------成员变量----------"); f1(c); System.out.println("-----------构造方法----------"); f2(c); System.out.println("-----------方法----------"); f3(c); } private static void f1(Class<?> c) { /*获取所有的成员变量 * Field对象 封装变量的定义信息 * 定义信息包括:private static final String s:修饰符、类型、名称 * */ Field[] a = c.getDeclaredFields(); for (Field f : a) { //类型 String t = f.getType().getSimpleName(); //变量名 String n = f.getName(); } } private static void f2(Class<?> c) { /* * Constructor对象,封装构造方法定义的信息 * 构造方法定义信息包括: * public A(参数) throws异常 :修饰词、方法名、参数列表、异常四部分 * */ Constructor<?>[] a = c.getDeclaredConstructors(); for (Constructor<?> t : a) { //名称(类名) String n = c.getSimpleName(); //参数列表,类对象数组,得到的是Int/String类对象数组 Class<?>[] p = t.getParameterTypes(); System.out.println(Arrays.toString(p)); } } private static void f3(Class<?> c) { /*Method对象 封装方法定义的信息 * 方法定义信息有:public static Date f(参数) throws异常 : 修饰符、返回数据类型、方法名、参数列表、异常*/ Method[] a = c.getDeclaredMethods(); for (Method t : a) { //返回类型 String r = t.getReturnType().getSimpleName(); //方法名 String n = t.getName(); //参数列表 Class<?>[] p = t.getParameterTypes(); System.out.println(Arrays.toString(p)); } } }

    通过反射获得对象实例:

    package Reflect;
    
    import java.lang.reflect.Constructor;
    import java.lang.reflect.Field;
    import java.lang.reflect.Method;
    import java.util.Arrays;
    import java.util.Scanner;
    
    public class ReflectDemo2 {
        public static void main(String[] args) throws ClassNotFoundException {
            System.out.println("输入完整类名 ");
            String aString = new Scanner(System.in).nextLine();
            Object o1=null;
            Object o2=null;
            //获得类对象
            Class<?> c = Class.forName(aString);
            //创建无参构造
            try {
                o1 = c.newInstance();
                System.out.println("创建了无参构造");
            } catch (Exception e) {
                System.out.println("没有无参构造");
            }
            
            //int 有参构造方法
            try {
                //获得int 参数构造方法
                Constructor<?> t = c.getConstructor(int.class);
                //xinji新建实例,并执行这个构造方法
                o2 = t.newInstance(5);
                System.out.println("新建int类型的构造方法实例");
            } catch (Exception e) {
                System.out.println("没有int参数的构造方法");
            }
            
            
            
        }
    }
  • 相关阅读:
    [摘]MongoDB范围查询的索引优化
    python ftp 暴破
    写mongodb日志
    [转]使用 Python 实现跨平台的安装程序
    HDOJ 1008 Elevator
    第一个数字
    反转串
    HDOJ 1108 最小公倍数
    HDOJ 1096 A+B for InputOutput Practice (VIII)
    报数游戏
  • 原文地址:https://www.cnblogs.com/gxlaqj/p/11429177.html
Copyright © 2020-2023  润新知