java反射的一些基础知识

本文深入探讨了Java反射机制,介绍了如何在运行时动态获取类信息并创建对象。通过Class.forName()方法获取类对象,然后利用Constructor和Method进行对象实例化和方法调用。此外,还讲解了Field的使用来访问和修改属性,以及不同构造方法的获取。总结了getFields()与getDeclaredFields()等方法的区别。
摘要由CSDN通过智能技术生成

java反射机制。在程序运行的时候获取到类,及类对象,实现动态的获取对象的机制.

比如我门创建一个对的实例化对象的时候,使用Classname obj=new Classname();这样获取到类的对象。然后通过该对象调用一些方法,设置一些属性这样.

对于反射来说,是一开始并不知道我要初始化的类对象是什么,自然也无法使用 new 关键字来创建对象了。

       Class<?> aClass = Class.forName("ok.Bean.Student");
        Constructor<?> constructor = aClass.getConstructor();
        Object o = constructor.newInstance();

分析一些:class.forname获取到的是一个类对象:我们实例化一个类对象看一下。

 实例化得到的类对象和forname得到的是同一个类对象。当然也可以通过类名.getclass()获取。

获取到类对象后,我们想要知道更多关于类的东西,如类的属性 构造方法和方法以及 注解;

 获取: Filed    (name属性,可以设置属性的值,需要参数:对象和值;)

 Field[] declaredFields = aClass.getDeclaredFields();
 Field name = aClass.getDeclaredField("name");
 name.setAccessible(true);
 name.set(student1,"小高同志");

获取方法:Method  ( 使用invoke()函数实现调用)

 Object o = constructor.newInstance();
 Method doSome = aClass.getMethod("doSome");
 doSome.invoke(o,null);

获取到对象的方法,然后调用。

构造方法:getConstructor 注意参数的类型

有参的构造方法:用参数类型区分开

 

       Class<?> aClass = Class.forName("ok.Bean.Student");
        Constructor<?> constructor = aClass.getConstructor();
      //  Object o = constructor.newInstance();
      //  Method doSome = aClass.getMethod("doSome");
       // doSome.invoke(o,null);
        Constructor<?> constructor1 = aClass.getConstructor();
        Object o1 = constructor1.newInstance();
        System.out.println("实例化");
        Constructor<?> constructor2 = aClass.getConstructor(String.class, int.class);
        Object Gao = constructor2.newInstance("高", 18);
        System.out.println(Gao.toString());

 关于注解,学习Spring的时候再学。

关于这个Declar的方式是

getDeclaredFields();
getDeclaredMethod();
getDeclaredConstructor();

getFields():获得某个类的所有的公共(public)的字段,包括父类中的字段。 
getDeclaredFields():获得某个类的所有声明的字段,即包括public、private和proteced,但是不包括父类的申明字段。

同样类似的还有getConstructors()和getDeclaredConstructors()、getMethods()和getDeclaredMethods(),这两者分别表示获取某个类的方法、构造函数。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值