黑马程序员 Java中反射的应用
来源:互联网 发布:java的变量使用范围 编辑:程序博客网 时间:2024/06/15 08:43
---------------------- android培训、java培训、期待与您交流! ----------------------
对于一个Javabean可以通过实例化的形式得到对象,也可以通过反射的原理得到对象,并且给对象赋值
最基本的反射方法获取类字节码通过getClass方法获取
下面介绍通过反射直接给对象赋值。
先定义一个Student 的JavaBean
public class Student {
private String name;
private int age;
private String sex;
private Date birthday;
public Student(){}
public Student(String name,int age,Date birthday)
{
this.name=name;
this.age=age;
this.birthday=birthday;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
}
package com.reflect;import java.util.List;import java.lang.reflect.Field;import java.util.Date;import java.text.SimpleDateFormat;import java.util.ArrayList;public class ReflectTest {public static void main(String[] args) throws RuntimeException, Exception {// 反射构造方法设定类中的值Student s = Student.class.getConstructor(new Class[] { String.class, int.class, Date.class }).newInstance(new Object[] { "李四", 32, new Date() });System.out.println(s.getName() + "::" + s.getAge() + "::"+ s.getBirthday());// 反射实例化对象Student stu = Student.class.newInstance();//得到对象中所有field属性//不用getMethods,因为javabean中还有其它继承至Object的方法Field[] fieldName = stu.getClass().getDeclaredFields();for (Field f : fieldName) {String name = f.getName();//得到为set+属性的方法名String methodName = "set" + name.substring(0, 1).toUpperCase()+ name.substring(1);//直接给方法注入参数if (int.class == f.getType()) {stu.getClass().getMethod(methodName, f.getType()).invoke(stu,19);}if (String.class == f.getType()) {stu.getClass().getMethod(methodName, f.getType()).invoke(stu,"张三");}if (Date.class == f.getType()) {SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");Date d = (Date) sdf.parse("1988-5-5");stu.getClass().getMethod(methodName, f.getType()).invoke(stu, d);}}System.out.println(stu.getName() + "::" + stu.getAge() + "::"+ stu.getBirthday());}}
这就说明了通过set方法赋值和构造函数传参数是一样的。这样做的好处在于,当你不知道这个类中有哪些属性时,都能设置进去,可以动态的加载一些SQL语句中查询出来的对象而不是将每行数据封装成一个固定的类
---------------------- android培训、java培训、期待与您交流! ----------------------
详细请查看:http://edu.csdn.net/heima
- 黑马程序员 Java中反射的应用
- 黑马程序员--Java中反射的基础
- 黑马程序员:反射的应用
- 黑马程序员-反射的应用
- 黑马程序员-反射的应用
- 黑马程序员-Java中反射
- 黑马程序员------java中的反射,beanutils,注解的应用。
- 黑马程序员 java的反射
- 黑马程序员-java的反射
- 黑马程序员-java反射--数组的反射
- 黑马程序员----Java中反射机制的总结
- 黑马程序员+对Java中反射技术的总结
- 黑马程序员----java中强大的功能-反射
- 黑马程序员 反射的各种应用
- 黑马程序员--反射的理解应用
- 黑马程序员_java 反射的具体应用
- 黑马程序员_反射的应用
- 黑马程序员_反射的应用
- Init Call Mechanism in the Linux Kernel
- Common BeanUtils组件的使用
- linux-3.1.4 在micro2440(mini2440)上的移植(一)(by liukun321咕唧咕唧)
- r478安装ubuntu 11.04的一些心得
- java.lang.NoClassDefFoundError: org/apache/commons/codec/DecoderException
- 黑马程序员 Java中反射的应用
- QueryElevationComponent requires the schema to have a uniqueKeyField implemented using StrField
- Linux下的函数执行时间的统计方法
- MOTO安卓刷小米系统教程
- 软件开发人员的作战手册 - 让程序员活的久一点
- 一个关于页面运行时间的代码
- oracle -- 启动OEM
- 据说看完这21个故事的人,30岁前都成了亿万富翁。你是下一个吗?
- 需求分析三步法