反射收集整理

概念比较清楚的理解如下,来源于:https://www.cnblogs.com/shiwanming/p/9821577.html

首先我要简单的来说一下什么是Java的反射机制:

    在Java里面一个类有两种状态--编译和运行状态,通常我们需要获取这个类的信息都是在编译阶段获得的,也就是直接点出来或者new出来,可是如果需要在类运行的阶段获得Java的类的信息的话,

就需要用到Java的反射。

    概念就是这个,但我还是不知道反射到底有什么用。到底有什么用呢?

    Java的反射用的最多的地方就是在框架里面。先举个例子,比如说有两个程序员,他们俩个都在创建两个类,第一个程序员现在需要第二个程序员创建的类,可是现在第二个程序员创建的类还没有完成。问:现在第一个程序员可以成功编译吗?

答案当然是不行的,可是现在第一个程序员又需要第二个程序员的类,这个时候,反射就可以完成这种想法。因为反射是在类运行的时候获取对象的各个信息,所以第一个程序员的类就可以完成编译了。

    这就是Java反射的一个小概念,实际应用中当然是有很复杂的效果啦。

 

 

基本操作:

        Class<?> class1 = Demo2Application.class;//通过getclass()获取
        Class<?> class2 = new Demo2Application().getClass();//通过getclass()获取
        Class<?> class3 = Class.forName("com.example.demo2.Demo2Application");//通过类名获取

  /*      System.out.println(class1);//所以结果是 class com.reflect.ReflectDemo
        System.out.println(class1.toString());//所以结果是 class com.reflect.ReflectDemo
        System.out.println(class1.getName());//所以结果是 com.reflect.ReflectDemo
        System.out.println(class1.getSimpleName());//所以结果是 ReflectDemo
        System.out.println(class1.getModifiers());//所以结果是 1
        Class<?> superclass = class1.getSuperclass();
        System.out.println(superclass);//所以结果是 class java.lang.Object
*/
        Constructor<?>[] constructors = class3.getConstructors();
        for (Constructor<?> constructor : constructors) {
            System.out.println(constructor);
        }

        System.out.println("// 2. 获取本类所有的 声明的构造器对象 ");
        constructors = class3.getDeclaredConstructors();
        for (Constructor<?> constructor : constructors) {
            System.out.println(constructor);
        }

        System.out.println("// 3. 获取单个的 公共的构造器对象   ");
        Constructor<?> constructor = class3.getConstructor(String.class,int.class,boolean.class);
        System.out.println(constructor);


        System.out.println("// 4. 获取单个的  本类声明的构造器对象  ");
        Class<?>[] cs = {String.class};
        constructor = class3.getDeclaredConstructor(cs);
        System.out.println(constructor);

        Parameter[] parameters = constructor.getParameters();
        for (Parameter parameter : parameters) {
            System.out.println(parameter);
        }

        System.out.println("1. 操作无参构造器 ");
        constructor = class3.getDeclaredConstructor(); // 获得无参的构造器
        Object instance = constructor.newInstance(); // 创建对象
        System.out.println(instance);

        System.out.println("2. 操作有参构造器 ");
        constructor = class3.getDeclaredConstructor(String.class ,int.class , boolean.class);
        instance = constructor.newInstance("二狗",18,true);
        System.out.println(instance);

        System.out.println("3. 操作无权限的构造器 ");
        constructor = class3.getDeclaredConstructor(String.class);
        constructor.setAccessible(true); // 暴力反射
        instance = constructor.newInstance("狗蛋");
        System.out.println(instance);

        System.out.println("// 1. 获取本类所有的 公共的属性对象  包含父类的公共属性");
        Field[] fields = class3.getFields();
        for (Field field : fields) {
            System.out.println(field);
        }

        System.out.println("2. 获取所有的本类声明的方法对象  不包括父类的");
        Method[] methods = class3.getMethods();
        methods = class3.getDeclaredMethods();
        for (Method method : methods) {
            System.out.println(method);
        }


        System.out.println("// 3. 获取本类公共的单个的属性对象 包括继承到的");
        Field field = class3.getField("str");
        System.out.println(field);

        System.out.println("  属性对象的基本操作  ");
        field = class3.getDeclaredField("str");
        System.out.println(field.getType());// 获取属性类型的 类对象
        System.out.println(field.getName());
        System.out.println(field.getModifiers());
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值