java 反射

反射概述

反射是指对于任何一个Class类,在“运行的时候”都可以直接得到这个类全部成分

在运行时,可以直接得到这个类的构造器对象:Constructor

在运行时,可以直接得到这个类的成员变量:Field

在运行时,可以直接得到这个类的成员方法对象:Method

这种运行时动态获取类信息以及动态调用类中成分的能力称为java语言的反射机制

获取Class类的对象的三种方式

方式一:Class c1 = Class.forName("全类名")

方式二:Class c2 = 类名.class

方式三: Class c3 = 对象.geClass();

//1.Class类中的一个静态方法:forName
        Class<?> c = Class.forName("com.fanshe.Student");
        System.out.println(c);  //Student.class

        //2.类名.class
        Class c1 = Student.class;
        System.out.println(c1);


        //3.对象.getClass()获取对象对应类的Class对象。
        Student s = new Student();
        Class c2 = s.getClass();
        System.out.println(c2);

获取构造器

方式一:getDeclaredConstructors()

方式二:getDeclaredConstructor(Class<?>.. parameterTtypes)

//1.获取类对象
        Class c = Student.class;
        //2.提取类中的全部构造器对象,包括私有的
        Constructor[] declaredConstructors = c.getDeclaredConstructors();
        //3.遍历构造器
        for (Constructor declaredConstructor : declaredConstructors) {
            System.out.println(declaredConstructor.getName()+"======>"+declaredConstructor.getParameterCount());
        }

反射得到的构造器可以做什么

创建对象:

  • public newInstance(Object... initargs)

如果是非public的构造器,需要打开权限(暴力反射),然后在创建对象:

  • setAccessible(boolean)

  • 反射可以破坏封装性,私有的也可以执行了

	//1.获取类对象
        Class c = Student.class;
        //2.定位单个构造器对象(按照参数定位无参数构造器)
        Constructor cons= c.getDeclaredConstructor();
        System.out.println(cons.getName()+"====>"+cons.getParameterCount());

        //如果遇到私有的构造器,可以暴力放射
        cons.setAccessible(true);//权限被打开

        Student s = (Student) cons.newInstance();
        System.out.println(s);

        //3.定位某个有参构造器
        Constructor cons1 = c.getDeclaredConstructor(String.class, int.class);
        System.out.println(cons1.getName()+"====>"+cons1.getParameterCount());

        Student zhansna = (Student) cons1.newInstance("zhansna", 18);
        System.out.println(zhansna);

获取方法对象

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值