JavaBean:
每种编程语言,肯定都有自己独有的编程规范,我们的java也是如此。下面就浅谈一下JavaBean。
那么什么是JavaBean呢?java不用解释了哈,bean就是豆子的意思。大家应该都看过java的卡通形象吧
?就是一个长得像一颗咖啡豆的小人,那就是JavaBean的第一层意思。
那第二层意思是什么呢?就是我们的编程规范了。
JavaBean的编程规范,总的来说有下面5类:
1、一个类 必须 包含一个public无参的构造方法。
2、必须 包含符合命名规范的get和set方法,以便访问javabean的属性。
3、JavaBean 应该 是可串行(序列化)的,即实现Serializable接口。
4、必须支持内省(反射)。
5、如果JavaBean有运行时外观,那 必须 扩展java.awt.Component类。
反射(Reflection):
反射的定义:在运行期去探究和使用一个在编译期未知的类。
为什么能通过反射获取到类的相关信息呢?
因为,java虚拟机在装载类的时候,会先创建一个该类的类模板对象,该类的所有信息都封装在了这个对
象中。所以,我们才能通过这个类模板对象去获得我们想要的该类的信息。
如何取得一个类模板呢?有下列三种方式:
1--知道类型
Class cl = String.class;
**注意这里的.class既不是属性,也不是方法哦。是一个关键字**
如果这里的String为int,那么在JDK1.5以后是正确的,在之前会报错。因为JDK1.5以后有了一个自动装
箱的功能。写一个int(基本数据类型)其实是先转成了包装类,再获取的Class对象。
2--有了对象后:
Class cl = new String("123").getClass();
3--通过完整的类名(包名+类名)获取****重点****
Class cl = Class.forName("完整的类名");
获取到类模板以后,是不是就应该获取这个类里面的构造方法、属性、方法了?
获取构造方法:
获取所有的公共的构造方法
Constructor publicCons = cl.getConstructors();
获取所有的构造方法
Constructor publicCons = cl.getDeclaredConstructors();
获取指定的公共的构造方法
Constructor publicCon = cl.getConstructor(AAA);
获取所有的构造方法
Constructor anyCon = cl.getDeclaredConstructor(AAA);
//AAA:是参数类型,如该构造方法传一个int类型,那么就是int.class,无参就什么都不写。
方法、属性是一样的,只是把getConstructor等里面的Constructor分别改成了Field 和Method。
当一个方法或者属性甚至构造方法没有访问权限的时候,可以先强制设置它的访问权限。但这是一种破坏
封装的做法,具体的,大家就自己去看了。就一句代码,我就不写了哈。
得到了相关的信息后,是不是就要调用了?
调用构造方法产生实例:
Object obj = (Object)anyCon.newInstance(AAA);当然了,这里直接就用的Object,也可以不用强转。
使用反射对属性进行设值
anyField.set(要被设值的对象,具体的值);
使用反射调用方法:
anyMethod.invoke(要被设值的对象,被调用的方法需要的实参);
综上所述,我们就能发现,整个反射的流程就是:
获取想要操作的类的类模板对象
调用方法获取到该类的我们需要的信息
使用Reflection API来操作这些信息
反射是很高级的应用,这里只是介绍了如果使用简单的反射,有什么不足之处请大家多多指教。一起交流
进步!