栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java的反射

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java的反射

目录

目的:根据配置文件来指定信息,创建对象,并调用其方法。

这样的需求在学习框架时特别多,即通过外部文件配置,在不修改源码情况下来控制程序,也符合设计模式的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对象

类的实例化

之前: 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 list = new ArrayList<>();
	

	private SQLHelper() {
	}

	public static SQLHelper getInstance() {

		if (instance == null) {
			synchronized (SQLHelper.class) {
				if (instance == null) {
					instance = new SQLHelper();
				}
			}
		}
		return instance;
	}
	
	public List getValues(){
		return list;
	}
	
	
	public String createInsertSql(Object obj)  {	
	
		Class clazz = obj.getClass();
		Field[] fields = clazz.getDeclaredFields();
		
		sb.append("INSERT INTO ");
		String tableName =clazz.getSimpleName().toLowerCase();
		sb.append(tableName);
		sb.append("(");
		
		try {
			for (Field field : fields) {
				field.setAccessible(true);
				Object retVal = field.get(obj);
				if(retVal!=null) {//有值,准备放入数据库
					sb.append(tableName+"_"+field.getName());
					sb.append(",");
					list.add(retVal);
				}
			}
			sb.deleteCharAt(sb.length()-1);
			sb.append(") VALUES(");
			for(int i=0;i 

java反射原理图:

 

转载请注明:文章转载自 www.mshxw.com
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号