• 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

  • 相关阅读:
    【AtCoder】Tenka1 Programmer Contest(C
    【AtCoder】AGC024
    【AtCoder】ARC098题解
    java反射机制详解 及 Method.invoke解释
    Spring切入点表达式常用写法
    border-radius 样式表CSS3圆角属性
    jquery判断自己是父节点的第几个子节点
    Spring事务配置的五种方式
    Spring中PropertyPlaceholderConfigurer的使用
    js中使用s(c)标签
  • 原文地址:https://www.cnblogs.com/blogofjzq/p/9225978.html
Copyright © 2020-2023  润新知