Java中的反射机制

Java中的反射机制_第1张图片

获取字节码文件对象的三种方式

 

 1,(常用)源代码阶段,Class.forName("全类名")

2,(传参)加载阶段 类名.class

3,(前提有对象)运行阶段 对象.getClass()


Java反射机制(动态获取类的信息)

         框架需要处理任意类,而框架只知道类的地址,就需要对不同的类进行创建对象,方法调用。

        框架通过反射机制,在只知道类地址的情况下,就可以操作类。 

        框架可以通过反射机制在写一套处理程序后,就可以达到以不变应万变。

        java的反射机制在运行状态中,可以动态获取任意类的信息,并且可以创建对象,还可以调用任意对象的方法和属性。这种动态获取,调用的机制称java反射机制。(反向使用类)

反向使用类的前提:获取Class字节码对象。

Class类中的方法

        constructor.setAccessible(true);//设置指定构造方法为允许访问   暴力反射:表示临时取消权限校验
        constructor.getModifiers();//获取构造方法的权限修饰符
        adminClass.getConstructor();//获取指定参数个数的公共构造方法(public)
        adminClass.getDeclaredConstructor();//获取指定参数个数的所有构造方法(包括私有)
        adminClass.getConstructors();//获取所有公共构造方法
        adminClass.getDeclaredAnnotations();//获取所有构造方法
        adminClass.getFields();//获取所有属性,返回的是一个Field类型的数组
        adminClass.getField("gender");//获取公共权限指定名称的属性
        adminClass.getDeclaredFields();//获取所有属性
        adminClass.getDeclaredField("gender");//获取指定属性名称的属性
        adminClass.getMethod("getAds");//获取指定公共方法
        adminClass.getMethods();//获取所有公共方法
        adminClass.getDeclaredMethod("getAccount");//获取指定方法
        adminClass.getDeclaredMethods();//获取所有方法
public class test3 {
    public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException, IllegalAccessException, InvocationTargetException, InstantiationException {
        Class adminClass = Class.forName("com.ffyc.mybatis.model.Admin");//获取Admin类的Class对象
        Constructor constructor=adminClass.getConstructor();//获取类的一个无参构造方法(公共的)
        Object obj=constructor.newInstance();//新建一个对象

        constructor = adminClass.getDeclaredConstructor(int.class);//获取有一个参数的构造方法(包括私有)
        constructor.setAccessible(true);//设置私有的为允许访问
        obj = constructor.newInstance(10);//新建一个对象
        System.out.println(obj.toString());
        System.out.println(adminClass.getDeclaredConstructors().length);//获取所有构造方法(包括私有)
    }
}

暴力反射:表示临时取消权限校验。

.setAccessible(true);

 

你可能感兴趣的:(后端,JAVA,Mybatis,java,开发语言)