java的反射机制


往往当我们面对一项新的知识时,我们往往需要知道三个方面,它是什么,它能做什么,它比原有知识强在哪里,我们该怎么使用它。当你能够解决这些问题时,便意味着你已经对这项知识入门了。

?

?

?

一、是什么

Java Reflaction in Action有这么一句话,可以解释。反射是运行中的程序检查自己和软件运行环境的能力,它可以根据它发现的进行改变。通俗的讲就是反射可以在运行时根据指定的类名获得类的信息。

二、为什么

我们为什么要使用反射,它的作用是什么,它在实际的编程中有什么应用。

首先我们先明确两个概念,静态编译和动态编译。

静态编译:在编译时确定类型,绑定对象,即通过。 
动态编译:运行时确定类型,绑定对象。动态编译最大限度发挥了java的灵活性,体现了多    
态的应用,有以降低类之间的藕合性。   

我们可以明确的看出动态编译的好处,而反射就是运用了动态编译创建对象。

那么我们再来看看实际中反射又有什么好处那?

往往对比能更加直观的向我们展示两者的不同。

三、怎么用

说完是什么,为什么,我们必然需要掌握如何使用反射,先看反射中涉及了那些方法。

Class c=Class.forName("className");注明:className必须为全名,也就是得包含包名,比如,cn.netjava.pojo.UserInfo;
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方法

看到这些方法,你就可以明白,反射是多么的强大了,当你正确使用这些方法的时候,基本上是掌握了反射的技巧。

下面大家可以看一下我们的java300集.里面详细的为大家介绍java如何从零基础入门的视频

https://www.bilibili.com/video/BV1qL411u7eE?from=search&seid=1993177139810072056&spm_id_from=333.337.0.0