JAVA的反射机制

没事干的时候就想写写博客,接触java那么长时间了,但是重来没有好好的思考java中反射机制的应用,确实感到非常惭愧。不过这几天我又接触到了java的反射机制,感触很深,所以控不住就在这里把我对反射机制的理解说说。

首先我们需要了解

1. 什么反射机制?

我对反射机制的理解就是,只要知道包名,类名那么这个类的所有方法,所有变量我们都能获取到(包括私有方法和变量)。而当你拥有某个类的一个实例时,你就能通过这个实例调用所有方法,获取所有变量的值(包括私有的method and field)。

2. 为什么要有反射机制?

1. 反射机制是java多态的完美体现,也实现了动态编译,我们试想下,我们只要知道类名,就能新建实例,那么可以在编写程序时通过各种字符串拼接来创建我们想要的类的实例。

2. 反射机制由于他的动态编译的优势,能让我们省去很多代码,编写出来的代码更加简单,简洁。

3. 反射机制有什么缺点吗?

任何东西只要有点太明显,那么它的确定将是致命的,反射机制也不例外。

1. 性能的影响。我们能想到动态编译必定代码性能的影响,因为在编译时我们还不能绑定对象,只有在程序运行之后,我们才能知道我们到底要创建哪个类的对象。

2.反射机制能都获取私有方法,与私有变量。这既是反射机制的有点,也是反射机制的缺点,我们想我们之所以使用修饰符来修饰方法和变量就是为了将他们保护起来,而反射机制恰恰破坏了这种机制,这是造成java很不安全的原因。(我们可以很容易获取到很多信息,在前几天工作中我就是通过反射机制爬到了很多私有信息,非常感谢)

4.怎么用反射机制?

一句话,类中有什么信息,它就可以获得什么信息,不过前提是得知道类的名字,要不就没有后文了 

首先得根据传入的类的全名来创建Class对象。 

    Class c=Class.forName("className");注明:className必须为全名,也就是得包含包名,比如,com.mysql.jdbc.Driver.class
    Object obj=c.newInstance();//创建对象的实例 
    OK,有了对象就什么都好办了,想要什么信息就有什么信息了。   
    获得构造函数的方法 
    Constructor getConstructor(Class[] params)//根据指定参数获得public构造器

    Constructor[] getConstructors()//获得public的所有构造器

    Constructor getDeclaredConstructor(Class[] params)//根据指定参数获得public和非public的构造器

    Constructor[] getDeclaredConstructors()//获得public的所有构造器 
    获得类方法的方法 
    Method getMethod(String name, Class[] params),根据方法名,参数类型获得方法

    Method[] getMethods()//获得所有的public方法

    Method getDeclaredMethod(String name, Class[] params)//根据方法名和参数类型,获得public和非public的方法

    Method[] getDeclaredMethods()//获得所以的public和非public方法 
    获得类中属性的方法 
    Field getField(String name)//根据变量名得到相应的public变量

    Field[] getFields()//获得类中所以public的方法

    Field getDeclaredField(String name)//根据方法名获得public和非public变量

    Field[] getDeclaredFields()//获得类中所有的public和非public方法 
    常用的就这些,知道这些,其他的都好办…… 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值