目录
目的:根据配置文件来指定信息,创建对象,并调用其方法。
这样的需求在学习框架时特别多,即通过外部文件配置,在不修改源码情况下来控制程序,也符合设计模式的ocp原则(开闭原则:不修改源码,扩容功能)
Class对象
Filed类:
反射应用:
java反射原理图:
目的:根据配置文件来指定信息,创建对象,并调用其方法。
这样的需求在学习框架时特别多,即通过外部文件配置,在不修改源码情况下来控制程序,也符合设计模式的ocp原则(开闭原则:不修改源码,扩容功能)
// 使用反射机制解决
//(1) 加载类, 返回 Class 类型的对象 cls
Class cls = Class.forName(classfullpath);
//(2) 通过 cls 得到你加载的类 com.hspedu.Cat 的对象实例
Object o = cls.newInstance();
System.out.println("o 的运行类型=" + o.getClass()); //运行类型
//(3) 通过 cls 得到你加载的类 com.hspedu.Cat 的 methodName"hi" 的方法对象
// 即:在反射中,可以把方法视为对象(万物皆对象)
Method method1 = cls.getMethod(methodName);
//(4) 通过 method1 调用方法: 即通过方法对象来实现调用方法
System.out.println("=============================");
method1.invoke(o);
//传统方法 对象.方法() , 反射机制 方法.invoke(对象)
Class对象
// 使用反射机制解决
//(1) 加载类, 返回 Class 类型的对象 cls
Class cls = Class.forName(classfullpath);
//(2) 通过 cls 得到你加载的类 com.hspedu.Cat 的对象实例
Object o = cls.newInstance();
System.out.println("o 的运行类型=" + o.getClass()); //运行类型
//(3) 通过 cls 得到你加载的类 com.hspedu.Cat 的 methodName"hi" 的方法对象
// 即:在反射中,可以把方法视为对象(万物皆对象)
Method method1 = cls.getMethod(methodName);
//(4) 通过 method1 调用方法: 即通过方法对象来实现调用方法
System.out.println("=============================");
method1.invoke(o);
//传统方法 对象.方法() , 反射机制 方法.invoke(对象)
Class对象
类的实例化
之前: Car c = new Car( );
现在 : clazz.newInstance() --->创建对象
创建对象的四种方式 :
1.new 2.克隆 3.序列化 4.反射
Filed类:
描述类中的属性,(数值)域
Car c = new Car();
c.setBrand("蔚蓝");
c.setColor("浅蓝色");
c.setPrice(300000.00);
System.out.println(c);
Class clazz=Car.class;
Field[] fields = clazz.getDeclaredFields(); //所有属性
for (Field field : fields) {
field.setAccessible(true); //设置属性可以访问
//System.out.println(field.get(c)); //取出属性
System.out.println(field.getName());//属性名称
System.out.println(field.getType().getSimpleName());//属性类型名称
if(field.getType().getSimpleName().equals("double")) {
field.set(c, 99999999.00);
}
}
System.out.println(c);
描述类中的属性,(数值)域
反射还有Method和Constructor对象,这里就不一一举例了。
反射应用:
对数据库操作,JdbcUtil(jdbc五部曲),执行SQL语句,SQL自动生成
package com.dyit.project;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.List;
public class SQLHelper {
private static volatile SQLHelper instance;
private final StringBuilder sb = new StringBuilder();
private List
对数据库操作,JdbcUtil(jdbc五部曲),执行SQL语句,SQL自动生成



