JavaBean的反射机制
2011-07-18 11:18
106 查看
JavaBean是通过反射机制来完成的,写JavaBean和写普通的类的目的是一样的,都是为了实例化该类的对象,然后利用这个对象,就可以使用这个类了。
JavaBean和普通的类区别如下:
|-首先,要有一个无参的构造方法(但不是必须的)。
|-属性使用private修饰。
|-存在Setter和Getter方法。
既然JavaBean通过反射来完成,那么JavaBean实例化的方式,也就同样是通过反射来完成。回想一下,使用反射机制,来实例化一个类的对象的步骤:
|-首先,使用Class.forName()方法将.class文件加载入内存中,并取得一个Class类型的对象c。当然若内存中已经存在了该字节码文件,则不会再重新加载。
|-然后,调用对象c的newInstance()方法,实例化出一个其所代表的类的对象。
但是,众所周知,实例化对象的时候,在扫面完类中所有的字段和实例块后,就会调用构造方法,那么再上述过程中,调用的是哪个构造方法呢?很显然,调用的是无参的那个构造方法。
至此,答案就很显然了,若您是通过类似于上述步骤,来实例化JavaBean的时候,就必须提供一个无参的构造方法。不然运行时就会出错。若您是通过如下步骤,则就不需要提供无参的构造方法了:
假设咱们有如下的一个PersonBean。
然后咱们使用如下代码进行反射操作:
这样一来,程序照样可以运行正确。同时Person类中也不存在无参的构造方法。
总之,为了养成良好的习惯,您应该为每一个类都写上无参的构造方法。
等到您学习JavaWeb的时候,会接触到真正的JavaBean以及标签编程等技术,那些技术里面到处都充斥着反射机制,所以,理解反射技术的原理,是必须的。
JavaBean和普通的类区别如下:
|-首先,要有一个无参的构造方法(但不是必须的)。
|-属性使用private修饰。
|-存在Setter和Getter方法。
既然JavaBean通过反射来完成,那么JavaBean实例化的方式,也就同样是通过反射来完成。回想一下,使用反射机制,来实例化一个类的对象的步骤:
|-首先,使用Class.forName()方法将.class文件加载入内存中,并取得一个Class类型的对象c。当然若内存中已经存在了该字节码文件,则不会再重新加载。
|-然后,调用对象c的newInstance()方法,实例化出一个其所代表的类的对象。
但是,众所周知,实例化对象的时候,在扫面完类中所有的字段和实例块后,就会调用构造方法,那么再上述过程中,调用的是哪个构造方法呢?很显然,调用的是无参的那个构造方法。
至此,答案就很显然了,若您是通过类似于上述步骤,来实例化JavaBean的时候,就必须提供一个无参的构造方法。不然运行时就会出错。若您是通过如下步骤,则就不需要提供无参的构造方法了:
假设咱们有如下的一个PersonBean。
01.
package
org.cxy.vo;
02.
03.
public
class
Person{
04.
private
Stringname;
05.
private
Stringsex;
06.
public
Person(Stringname,Stringsex){
07.
this
.name=name;
08.
this
.sex=sex;
09.
}
10.
public
StringgetName(){
11.
return
name;
12.
}
13.
public
void
setName(Stringname){
14.
this
.name=name;
15.
}
16.
public
StringgetSex(){
17.
return
sex;
18.
}
19.
public
void
setSex(Stringsex){
20.
this
.sex=sex;
21.
}
22.
public
StringtoString(){
23.
return
"姓名:"
+
this
.name+
",性别:"
+
this
.sex;
24.
}
25.
}
然后咱们使用如下代码进行反射操作:
01.
package
org.cxy.vo;
02.
03.
import
java.lang.reflect.*;
04.
public
class
Demo{
05.
public
static
void
main(String[]args)
throws
Exception{
06.
Class<Person>p=(Class<Person>)Class.forName(
"org.cxy.vo.Person"
);
07.
Constructor<Person>con=p.getConstructor(String.
class
,String.
class
);
08.
Personinst=con.newInstance(
"张三"
,
"男"
);
09.
System.out.println(inst);
10.
}
11.
}
这样一来,程序照样可以运行正确。同时Person类中也不存在无参的构造方法。
总之,为了养成良好的习惯,您应该为每一个类都写上无参的构造方法。
等到您学习JavaWeb的时候,会接触到真正的JavaBean以及标签编程等技术,那些技术里面到处都充斥着反射机制,所以,理解反射技术的原理,是必须的。
相关文章推荐
- Spring基础(IOC原理和反射机制+JavaBean)
- JSP中通过反射机制创建javaBean对象
- 反射机制中使用JavaBean来模拟Hibernate或Ibatis设置参数
- JavaBean 反射机制实现自动配置数据
- 利用反射机制 实现 javabean 转化为 map(效率低,仅限学习)
- 通过java的反射机制实现Map、JavaBean、JSON的相互转换工具类
- JAVA中反射机制五(JavaBean的内省与BeanUtils库)
- 一个项目思路(1):用反射机制写的函数,使2个javabean相同属性一次性导入
- 使用commons-lang.jar包以及反射机制实现javabean的equals,hashCode和toString三个方法重写
- JavaBean 反射机制实现自动配置数据
- Java中的反射机制和动态性以及javaBean的自省技术
- 给定条件的反射机制
- Java中的反射机制
- 浅谈.NET框架中反射的内部机制
- iOS反射机制: objc_property_t的使用
- 第18章类加载机制和反射
- C#_反射机制
- python的反射机制
- 关于java反射机制
- Java 反射机制