java反射
来源:互联网 发布:plc编程题目 编辑:程序博客网 时间:2024/05/01 01:28
动态的生成对象:运行时绑定对象,优点是比较灵活,缺点是效率比较低下
例如:
Class.forName("com.mysql.jdbc.Driver.class");加载数据库驱动
获得对象Object obj = Class.forName("xxx").newInstance();
得到对象后就可以获得类的所有信息了
获得构造函数的方法
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方法
比如我们要往数据库中插入一条记录,我们可以新建一个Java bean用来保存这组信息的类
比如数据库 中有个userinfo表,包含_id,name,age,address,email等信息
我们可以新建一个userinfo类类中分别含有这几个属性,再生成分别生成get和set方法
这样我们要插入一条user信息,我们可以先定义一个函数用来产生执行插入的SQL语句
String getInsertObjectSQL(Object obj){
StringBuilder sqlBuilder = new StringBuilder();
Class c = obj.getClass();
Method[] methods = c.getMethods();
Field[] fields = c.getFields();
String cName = c.getName();
String tableName = cName.subString(cName.lastIndexOf(".")+1,cName.length);
sqlBuilder.append("insert into "+tableName+"(");
List<String> mList = new ArrayList<String>();//方法名(也就是字段值)
List vList = new ArrayList();//字段值
for(Method method:methods){
String mName = method.getName();
if(mName.startsWith("get") && !mName.startsWith("getClass")){
String fieldName = mName.subString(3,mName.length);
mList.add(fieldName);
Object value = method.invoke(obj,null);
if(value instanceof String){
vList.add("\""+value+"\"");
}else{
vList.add(value);
}
}
for(int i=0; i<mList.size(); i++){
sqlBuilder.append(mList.get(i)+",");
}
sqlBuilder.append(") ");
for(int i=0; i<vList; i++){
sqlBuilder.append(vList.get(i)+",");
}
sqlBuilder.append(")");
}
return sqlBuilder.toString();
}
这样我们就通过反射得到了类的具体信息方便了查询操作的执行,减少了代码量和冗余度
- 【反射】JAVA反射机制
- JAVA 反射
- java 反射
- Java反射
- java反射
- java反射
- JAVA反射
- java 反射
- Java 反射
- java 反射
- Java反射
- java反射
- JAVA 反射
- java 反射
- Java反射
- java反射
- java 反射
- java 反射
- nyoj 477 a+bproblem
- C#下的JS脚本引擎ReoScript
- mysql 分区与分表
- 字典树(trie树)、后缀树
- Oracle设置和修改system和scott的口令,并且如何连接到system和scott模式下
- java反射
- BASH快速入门手册
- 秒杀的问题
- mysql
- Linux 下的一个全新的性能测量和调式诊断工具 Systemtap, 第 3 部分: Systemtap
- 设计模式之结构型模式
- git shell
- 自定义adapter
- Lua数据结构 — Table(三)