Java反射(Reflection)就是在运行 Java 程序时,可以加载、探知、使用编译期间完全未知的类。也就是说,Java 程序可以加载一个运行时才得知类名的类,获得类的完整构造方法,并实例化出对象,给对象属性设定值或者调用对象的方法。本文我们就来通过Java反射实例来理解Java中的反射机制。

一、利用反射获取类信息的方式、获取当前类的所有方法和获取当前类及其父类的所有方法

实体类

package org.dennisit.reflect.entity;

import java.io.Serializable;

public class User implements Serializable{

private String test;

public void execute(String name,int age){

System.out.println("name=" + name + ",age=" + age);

}

}

反射测试类

package org.dennisit.reflect.main;

import java.lang.reflect.Field;

public class ReflectEx {

public static void main(String[] args)throws Exception {

Class cls = Class.forName("org.dennisit.reflect.entity.User");

Object obj = cls.newInstance();       //创建User的对象

Field f = cls.getDeclaredField("test");    //获取test属性

f.setAccessible(true);                    //打开私有属性test的访问权限

f.set(obj, "zhangsan");                    //为test重新复制

System.out.println(f.get(obj));            //获取obj的test属性值

//根据方法名execute获取方法

java.lang.reflect.Method m = cls.getMethod("execute", String.class, int.class);

m.invoke(obj, "dennisit",23);            //调用execute方法

}

}

运行效果

zhangsan

name=dennisit,age=23

二、编写一个反射动态实例化类的例子

package org.dennisit.reflect.main;

import java.lang.reflect.Field;

import java.lang.reflect.Method;

import java.util.Map;

import java.util.Set;

public class DynamicReflect {

public static Object getInstance(String className,Map map)throws Exception{

Class c = Class.forName(className);

Object obj = c.newInstance();                //对象对象

Set keys = map.keySet();            //获取对应的所有属性

Field[] fAll = c.getDeclaredFields();        //获取类中所有属性

for(int i=0;i

for(String key:keys){                    //循环匹配

if(fAll[i].getName().equals(key)){    //如果用户传入的属性跟获取到的类中的属性名匹配

Field f = c.getDeclaredField(key);//获取该属性

//构建setXxx()方法名

String methodName = "set" + key.substring(0,1).toUpperCase()+key.substring(1);

Method method = c.getMethod(methodName, f.getType());//根据构建的用户名获取对应的方法

method.invoke(obj, map.get(key));//方法调用

}else{

continue;

}

}

}

return obj;

}

}

三、接下来我们测试我们编写的动态反射实例化例子

实体类

package org.dennisit.reflect.entity;

import java.io.Serializable;

public class User implements Serializable{

private String name;

private int age;

private String email;

public User() {  //必须有无参构造

}

//getter() and setter()

}

主测试类

package org.dennisit.reflect.main;

import java.util.HashMap;

import java.util.Map;

import org.dennisit.reflect.entity.User;

public class ReflectEx {

public static void main(String[] args)throws Exception {

Class cls = Class.forName("org.dennisit.reflect.entity.User");

String className = "org.dennisit.reflect.entity.User";

Map map = new HashMap();

map.put("name", "dennisit");

map.put("age", 22);

map.put("email", "dennisit@163.com");

User user = (User)DynamicReflect.getInstance(className, map);

System.out.println(user.getName() + "," + user.getAge() + "," + user.getEmail());

}

}

程序运行结果

dennisit,22,dennisit@163.com

以上就是Java反射实例,借助这些Java反射实例,能够帮助我们刚好的理解Java反射机制。实际上,反射的工作原理就是借助Class.java、Constructor.java、Method.java、Field.java这四个类在程序运行时动态访问和修改任何类的行为和状态。想要了解更深层次的反射机制,快来观看本站的Java基础教程吧!

反射 java 例子 get_Java反射实例相关推荐

  1. json 反射java 实体_java反射实现javabean转json

    BeantoModel->利用cglib BeanMap . create ( src );直接将Bean装成Map,然后model . _setAttrs (map)即可. ModeltoBe ...

  2. 根据实例详解Java中的反射机制

    概念: JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的信息以及动态调用对象的方法的功能称为java ...

  3. 【Java 19】反射 - 反射机制概述、获取Class实例、类的加载与ClassLoader的理解、创建运行时类的对象、获取运行时类的完整结构、调用运行时类的指定结构、动态代理

    反射机制概述.获取Class实例.类的加载与ClassLoader的理解.创建运行时类的对象.获取运行时类的完整结构.调用运行时类的指定结构.动态代理 反射 1 Java反射机制概述 1.1 Java ...

  4. java技术详解_Java反射技术详解及实例解析

    前言 相信很多人都知道反射可以说是Java中最强大的技术了,它可以做的事情太多太多,很多优秀的开源框架都是通过反射完成的,比如最初的很多注解框架,后来因为java反射影响性能,所以被运行时注解APT替 ...

  5. Java反射Method和Field简单实例

    目录 定义 使用方法 1.Field 2.Method 3.简单实例 定义 JAVA反射机制是在运行状态中,对于任意一个实体类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意方 ...

  6. Java反射机制和动态代理实例

    反射机制是Java语言的一个重要特性,允许用户动态获取类的信息和动态调用对象的方法. 通过给定类的名字,通过反射机制就可以获取类的所有信息. JAVA反射机制是在运行状态中,对于任意一个类,都能够知道 ...

  7. Java反射实践:从反射中理解class

    写在前面 今天在需求评审的时候,遇到了挺有意思的要求.需求是什么样子就不说了.总之完成这个需求需要一个调用系统api的操作.然而这个api因为并不稳定的原因.被谷歌hide掉了. 这个时候我们最直接的 ...

  8. Java知识系列 -- 反射

    原理 要想理解 Java 反射,首先要弄清类的加载过程. 比如这行代码 Person p = new Person();. 我们想要创建一个 Person 对象,并用 p 作为对象的引用. 在 Jav ...

  9. 浅说Java中的反射机制(一)

    在学习传智播客李勇老师的JDBC系列时,会出现反射的概念,由于又是第一次见,不免感到陌生.所以再次在博客园找到一篇文章,先记录如下: 引用自java中的反射机制,作者bingoideas.(()为我手 ...

最新文章

  1. 在Server 2003上部署IIS+PHP+MySQL配置清单
  2. java表示语句结束的符号,java基础篇三(运算符号、表达式与语句)
  3. redis:list的底层实现--压缩列表
  4. 对于DataSet中的问题真是郁闷啊
  5. WindowsPhone7开发简单豆瓣网应用程序之界面设计
  6. JUnit和Hamcrest:在assertEquals上进行改进
  7. windows7远程linux,用XManager在Windows7下远程桌面连接Linux
  8. 如何构建一个流量无损的在线应用架构 | 专题尾篇
  9. 关于Java List 的remove(index)方法
  10. mysqldump 导出中文乱码
  11. Pawn Storm网络间谍行动再度现身
  12. 深度剖析微信小程序搜索的排名机制
  13. 如何修复VUM在客户端启用之后报数据库连接失败的问题
  14. 最长山脉 python
  15. CSS 文本超过部分显示省略号,解决数字或英文不换行问题
  16. Python读取Mysql数据库数据保存至csv文件,以及简单使用Python进行数据分析。(加州房价数据集)
  17. 使用钉钉发送消息(可用于 服务异常通知、定时任务异常通知 等等...)
  18. 猜数字游戏(C语言)
  19. AD17-SchDoc(原理图基础)
  20. HTTP请求的交互过程和常见的相应状态码

热门文章

  1. android windows的一些item属性
  2. Difference between Win-builds vs MinGW-builds
  3. OSChina 周六乱弹 —— 知道今天的乱弹为什么会迟发吗?
  4. Session分三级做处理。
  5. jwt如何防止token被窃取_如何使用 NodeJS 实现 JWT 原理
  6. 浙江省二级计算机试题,2015浙江省计算机等级考试试题 二级ACCESS考试题库
  7. java 测试磁盘io,详解三种Linux测试磁盘IO性能的方法总结,值得收藏
  8. python turtle_Python:turtle画粽子
  9. 外贸常用术语_外贸常用贸易术语之间,要这么换算……
  10. 神经网络中的前向和后向算法