Java反射 (一些总结性知识,可能不全面)
2014-09-24 21:50
323 查看
Java反射:
1.对象存在JVM中,需要得到类的定义原型 ClassForName通过已知字符串来载入一个类的形式(字符串形式生成对象)
2.根据一个类的字符串形式,动态产生对象 (对象Object但类型不知道)
java.lang.Class:一个类的原型定义
java.lang.reflect.Method:代表类的方法
java.lang.reflect.Field:代表类的成员变量
java.lang.reflect.Constrctor:代表类的构造方法
//------------------------------------------------------------------//
Class c=o.getclass();//得到对象的基本定义
Field[] fs=c.getDeclaredFields();//得到属性
Method[] ms=c.getDeclaredMethods();//得到方法
//------------------------------------------------------------------//
//由方法获取值------动态调用方法
Method m1=c.getDeclareMethod("getName",new Class[0]);//Class[0]填充作用,针对没有参数的
Method m2=c.getdeclaredMethod("setName",String.class)//
//类.class 对象 new Class[0]
m2.invoke(对象,“字符串对象”)//调用setName
(String)m1.invoke(对象,new Object[0])//调用getName
//------------------------------------------------------------------//
//由属性得到方法名字
Field[] fs=c.getDeclaredFields();
for(Field f:fs){
String fname=f,getName();//获取属性名称
String mname="get"+Character.toUpperCase(fname.charAt(0))+fname.substring(1);//转换成方法
Method m=c.getDeclaredMethod(mname,new Class[0]);//把这个名称放进去就得到这个方法
}
--------------通用dao(插入sql)-------------------------------------
tringBuffer sql = new StringBuffer("insert into ");
StringBuffer sql2 = new StringBuffer("");
StringBuffer sql3 = new StringBuffer("");
sql = sql.append(tablename + "(");
for (Field f : fd) {
sql = sql.append(f.getName());
sql.append(",");
Method m = c.getDeclaredMethod(
sql2.append(
("get"
+ Character.toUpperCase(f.getName()
.charAt(0)) + f.getName()
.substring(1))).toString(),
new Class[0]);
String rs = (String) m.invoke(o, new Object[0]);
sql3.append(rs);
sql3.append(",");
sql2=new StringBuffer("");
}
sql = new StringBuffer(sql.substring(0, sql.length() - 1));
sql = sql.append(") values(");
sql3 = new StringBuffer(sql3.substring(0, sql3.length() - 1));// 方法名
sql = sql.append(sql3);
sql = sql.append(")");
System.out.println(sql);
----------------------------------------------------------
1.对象存在JVM中,需要得到类的定义原型 ClassForName通过已知字符串来载入一个类的形式(字符串形式生成对象)
2.根据一个类的字符串形式,动态产生对象 (对象Object但类型不知道)
java.lang.Class:一个类的原型定义
java.lang.reflect.Method:代表类的方法
java.lang.reflect.Field:代表类的成员变量
java.lang.reflect.Constrctor:代表类的构造方法
//------------------------------------------------------------------//
Class c=o.getclass();//得到对象的基本定义
Field[] fs=c.getDeclaredFields();//得到属性
Method[] ms=c.getDeclaredMethods();//得到方法
//------------------------------------------------------------------//
//由方法获取值------动态调用方法
Method m1=c.getDeclareMethod("getName",new Class[0]);//Class[0]填充作用,针对没有参数的
Method m2=c.getdeclaredMethod("setName",String.class)//
//类.class 对象 new Class[0]
m2.invoke(对象,“字符串对象”)//调用setName
(String)m1.invoke(对象,new Object[0])//调用getName
//------------------------------------------------------------------//
//由属性得到方法名字
Field[] fs=c.getDeclaredFields();
for(Field f:fs){
String fname=f,getName();//获取属性名称
String mname="get"+Character.toUpperCase(fname.charAt(0))+fname.substring(1);//转换成方法
Method m=c.getDeclaredMethod(mname,new Class[0]);//把这个名称放进去就得到这个方法
}
--------------通用dao(插入sql)-------------------------------------
tringBuffer sql = new StringBuffer("insert into ");
StringBuffer sql2 = new StringBuffer("");
StringBuffer sql3 = new StringBuffer("");
sql = sql.append(tablename + "(");
for (Field f : fd) {
sql = sql.append(f.getName());
sql.append(",");
Method m = c.getDeclaredMethod(
sql2.append(
("get"
+ Character.toUpperCase(f.getName()
.charAt(0)) + f.getName()
.substring(1))).toString(),
new Class[0]);
String rs = (String) m.invoke(o, new Object[0]);
sql3.append(rs);
sql3.append(",");
sql2=new StringBuffer("");
}
sql = new StringBuffer(sql.substring(0, sql.length() - 1));
sql = sql.append(") values(");
sql3 = new StringBuffer(sql3.substring(0, sql3.length() - 1));// 方法名
sql = sql.append(sql3);
sql = sql.append(")");
System.out.println(sql);
----------------------------------------------------------
相关文章推荐
- Java基础知识 十七 (关于反射一些方法的总结)
- 网页资料 一些java小知识总结
- 黑马程序员_java反射知识总结
- DataGridView 控件用法(可能不是很全面,因为这是自己常常用到的一些小总结):
- 【JavaWeb-19】Struts2总结案例中的一些实战知识小点和注意事项
- Java 容器相关知识全面总结
- java的一些知识总结
- 总结java反射相关知识
- 总结一些java中的基础知识
- 项目中一些java知识的整理和总结
- java全面的知识体系结构总结
- 黑马程序员_09Java反射知识总结
- 黑马程序员——java —反射知识总结
- JAVA_SE ----- 基础知识总结-----反射
- Java反射知识总结
- Java Collection框架:你可能不知道的一些小知识
- 黑马程序员学习log第九篇基础知识:JAVA的面向对象之正则表达式及反射总结
- java反射实战 -- 一些基础知识
- 黑马程序员-------java循环的一些总结(基础知识)
- Java 容器相关知识全面总结