• Java反射基础


    1.反射的定义:在我看来反射就是在程序运行过程中通过解剖类/接口的信息来动态操作类/接口的一种机制

    实验用例:

    public class Person{
        private String name;
        public int old;
        public Person(){this.name="";this.old=-1;}
        public Person(String name,int old){this.name=name;this.old=old;}
        private void print()
        {
            System.out.println(this.name="已经"+this.old+"岁了!");
        }
        public String toString()
        {
            return this.name+":"+this.old;
        }
            //setter,getter
    }

    2.Class的获取

    //1.通过.class获得
    Class clazz=int.class;
    //2.通过.getClass()获得,不能用基本类型.getClass()
    clazz=Integer.getClass();
    //3.通过Class.forName()获得
    clazz=Class.forName("com.jz.reflect.Person")

    3.Field的获取和操作

      Field field=cl.getField("old");//获得公有字段信息
      field=cl.getDeclaredField("name");//获得任意字段信息
      Field[] fields=cl.getFields();//获得所有公有字段信息
      fields=cl.getDeclaredFields();//获得所有字段信息
      field.setAccessible(true);//如果要操作非公有字段必须设置
      field.set(cl.newInstance(), "蒋曾");//将指定对象变量上此 Field 对象表示的字段设置为指定的新值

     4.Method的获取和操作

    Method method=clazz.getDeclaredMethod("print");//根据方法名和参数获得私有Method,这里参数为空
    method.setAccessible(true);//如果要使用非公有方法必须要设置
    Method[] methods=clazz.getMethods();//获得所有公有参数
    method.invoke(clazz.newInstance(), null);//对带有指定参数的指定对象调用由此 Method 对象表示的底层方法

     5.Constructor的获取和操作

    Constructor constructor=clazz.getConstructor(String.class,int.class);//根据参数类型获取构造器
    constructor.newInstance("蒋曾",21);//通过构造器创建对象实例

    6.修饰符类型获取和操作

      int modifier=clazz.getModifiers();//通过Class,Field,Method,Constructor的getModifiers()获得一个int值
      System.out.println(Modifier.toString(modifier));//Modifier的静态方法toString()获得修饰符

    
    

    此外还有更多更详细的东西可以查询相关API java.lang和java.lang.reflect

  • 相关阅读:
    samtools flags 分解
    epollo
    springaop 执行顺序问题
    java解析String类型的xml
    服务器调用服务器接口之间的抓包
    windows下mysql忘了安装时的root密码
    docker+jenkins+gitlab自动化构建
    influxdb基本操作
    记一次CPU过高排查过程
    dockercompose部署一个可远程连接的容器
  • 原文地址:https://www.cnblogs.com/blogofjzq/p/9225978.html
Copyright © 2020-2023  润新知