关于EKT相关知识(类的反射)

|   |   reflect

提供类和接口,以获得关于类和对象的反射信息

1.实现了反射的类:

Class类:代表一个类。

Field 类:代表类的成员变量(成员变量也称为类的属性)。

Method类:代表类的方法。

Modifier类:代表修饰符。

Constructor 类:代表类的构造方法。

Array类:提供了动态创建数组,以及访问数组的元素的静态方法

2.java反射机制:

  1)在Java运行时 环境中,对于任意一个类,能否知道这个类有哪些属性和方法?    

     2) 对于任意一个对象,能否调用他的方法?这些答案是肯定的,这种动态获取类的信息,以及动态调用类的方法的功能来源于JAVA的反射。从而使java具有动态语言的特性。 

3.代码示例

1)注意事项:

a.运行jdk环境版本:jdk1.8.0_131

b. 编译工具:Idea 2018 版本

2)Contructor类实现反射:

代码示例:

package com.liujie.demo.Demo2;


import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Modifier;

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

        //找带string,int类型参数的构造方法 Student s = new Student("zhangsan",12)
        con = clz.getDeclaredConstructor(String.class, int.class);
        obj = con.newInstance("zhangsan", 12);
        System.out.println(obj);

        con = clz.getDeclaredConstructor(String.class);
        obj = con.newInstance("zhangsi");
        System.out.println(obj);

    }
}

控制台运行结果:

心得:

  在程序员这行,既然你进来了,你就得准备好满满的热情,等待竞争强烈的互联网企业猛烈的风雨摧残,

平均程序员一万多的工资毕竟也不是擒手就来的

原文地址:https://www.cnblogs.com/xiaojieDeam/p/13542915.html