• 反射技术


    1.

    反射就是把Java类中的各种成分映射成一个个的java对象。例如,一个类有:成员变量,方法,构造方法,包等等信息,利用反射技术可以对一个类进行解剖,

    把各个组成部分映射成一个个对象。

    2

    三种获得class文件的方法

    类名.class,   对象.getClass()     Class.forName(“类名”)

            //方法1
            Class clazz1=cn.example.People.class;
            //方法2
            Class clazz2=Class.forName("cn.example.People");
            //方法3
            People p=new People();
            Class clazz3=p.getClass();

    3

    通过反射获取对象

    package cn.example;
    
    public class People {
        String name;
        public People(){
            System.out.println("People");
        }
        public People(String name){
            this.name=name;
            System.out.println("People(name)");
        }
    }
    package cn.example;
    
    import java.lang.reflect.Constructor;
    
    import org.junit.Test;
    
    public class Demo {
        @Test
        public void test() throws Exception{
        
            Class clazz2=Class.forName("cn.example.People");
            Constructor c=clazz2.getConstructor(String.class);
            People p=(People) c.newInstance("张三");
            System.out.println(p.name);
        }
    
        
    }

    People(name)
    张三

    4 Constructor
    得到某个类所有的构造方法:




    5暴力访问
    x.setAccessible(true);
    这样可以得到私有的方法和属性,但之前要用getDeclare****;


    6得到方法,字段,设置字段
    package cn.example;
    
    public class People {
        private String name;
        public People(){
            System.out.println("People");
        }
        public People(String name){
            this.name=name;
            System.out.println("People(name)");
        }
        public void print() {
            System.out.println("my name is"+name);
        }
    }
    
    
    package cn.example;
    
    import java.lang.reflect.Constructor;
    import java.lang.reflect.Field;
    import java.lang.reflect.Method;
    
    import org.junit.Test;
    
    public class Demo {
        @Test
        public void test() throws Exception{
            People p=new People("李四");
            Class clazz2=Class.forName("cn.example.People");
            Field f=clazz2.getDeclaredField("name");
            f.setAccessible(true);
            //获取字段
            Object obj=f.get(p);
            //获取字段类型
            Class Type=f.getType();
            //打印字段值
            if(Type.equals(String.class)){
                String str=(String)obj;
                System.out.println(str);
            }
            //设置字段
            f.set(p, "王五");
            //System.out.println((String)f.get(p));
            //获取方法
            Method m=clazz2.getMethod("print",null);
            //调用方法
            m.invoke(p, null);
            
            
        }
    People(name)
    李四
    my name is王五
     
  • 相关阅读:
    尝试实现一个简单的C语言string类型
    LeetCode.49
    Python学习 —— 实现简单的爬虫
    图表可视化表达的逻辑原理
    颜色参数
    Python交互图表可视化Bokeh:7. 工具栏
    Python交互图表可视化Bokeh:6. 轴线| 浮动| 多图表
    Python交互图表可视化Bokeh:5 柱状图| 堆叠图| 直方图
    Python交互图表可视化Bokeh:4. 折线图| 面积图
    Python交互图表可视化Bokeh:3. 散点图
  • 原文地址:https://www.cnblogs.com/xurui1995/p/5246042.html
Copyright © 2020-2023  润新知