Loading

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);
    }
}

 

 Ø效果图

 


 

心得:

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

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

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

毅力,就是恒心的体现。

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

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

 

posted @ 2020-08-21 16:26  戴戴代代  阅读(188)  评论(0编辑  收藏  举报