• Java反射机制详情


     1.运行环境

    JDK8+lntellij IDEA 2018.3

    2.反射机制是什么

    反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。

    3.反射机制能做什么

    反射机制主要提供了以下功能: 

    • 在运行时判断任意一个对象所属的类;

    • 在运行时构造任意一个类的对象;

    • 在运行时判断任意一个类所具有的成员变量和方法;JDK8+lntellij IDEA 2018.3

    • 在运行时调用任意一个对象的方法;

    • 生成动态代理。


     

    Ø获取一个对象的父类与实现的接口

    public class Demo1 {
        public static void main(String[] args) {
            //1.
            Object obj=new String();
            Class cla1=obj.getClass();
            //2.
            Class cla2 = String.class;
            //3
            try {
                Class cla3 = Class.forName("java.lang.String");
            //4.
                ClassLoader cl = ClassLoader.getSystemClassLoader();
                Class cla4 = cl.loadClass("java.util.ArrayList");
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            }
    
        }
    }

    Ø反射String类的所有构造方法

    public class Demo2 {
        public static void main(String[] args) throws NoSuchMethodException, IllegalAccessException, InvocationTargetException, InstantiationException {
            // 反射String类的所有构造方法
            Class cla=Student.class;
            System.out.println("所有构造方法");
            // Constructor[] cons = clz.getConstructors();
            Constructor[] cons=cla.getDeclaredConstructors();
            for(Constructor con : cons){
                // System.out.println("访问修饰权限:" +
                // Modifier.toString(con.getModifiers()));
                // System.out.println("方法名:" + con.getName());
                // System.out.println("****************************");
                System.out.println(Modifier.toString(con.getModifiers()) + " "
                        + con.getName());
            }
            //无参的构造方法
            Student stu=new Student();
            Constructor con=cla.getDeclaredConstructor();
            Object obj = con.newInstance();
            System.out.println(obj);
    
            //找带string,int类型参数的构造方法
            Student s = new Student("daiyanye",12);
            con = cla.getDeclaredConstructor(String.class, int.class);
            obj = con.newInstance("daiyanye", 12);
            con = cla.getDeclaredConstructor(String.class);
        }
    }

     

     Ø效果图


    心得:

    柏拉图曾经说过:“成功的唯一秘诀就是坚持带最后到一分钟”

    好比长途赛跑,最费力的并不是开始的第一步,

    而是迈向终点的最后一步。

    毅力,就是恒心的体现。

    一个没有毅力的人是不能成大器的。

    “加油,努力,上进,做自己,我要赢”

  • 相关阅读:
    挑战程序设计竞赛 dp
    算法导论 动态规划
    算法导论第二章
    divide conquer
    时间戳
    bootstrap 针对超小屏幕和中等屏幕设备定义的不同的类
    jQuery中的Ajax
    怎么判断一个变量是Null还是undefined
    认识Ajax
    关于apache
  • 原文地址:https://www.cnblogs.com/dyywht/p/13541712.html
Copyright © 2020-2023  润新知