Java 反射机制[Field反射]
Java 反射机制[Field反射]
1. 反射概念及功能
反射就是把Java类中的各种成分映射成对应的Java类。比如一个Java类中用一个Class类的对象来表示。
一个类中的组成部分分为成员变量,方法,构造方法,包等等。
Java反射机制主要提供了下面功能: 推断在执行时随意一个对象所属的类;在执行时构造随意一个类的对象;推断在执行时随意一个类所具有的成员变量和方法;在执行时调用随意一个对象的方法。生成动态代理。
2. Field反射
下面代码将obj对象中的String类型的字段相应的Value中含有i的字符替换为abc。通过这个简单的案例进行初步分析Java的反射机制。
Java Code
|
/* * System Abbrev : * system Name : * Component No : * Component Name: * File name :ReflectTestMain.java * Author :Qiuzhenping * Date :2014-10-25 * Description : <description> */ /* Updation record 1: * Updation date : 2014-10-25 * Updator : Qiuzhenping * Trace No: <Trace No> * Updation No: <Updation No> * Updation Content: <List all contents of updation and all methods updated.> */ package com.qiuzhping.reflect.main; import java.lang.reflect.Constructor; import java.lang.reflect.Field; import java.lang.reflect.Method; /** * <Description functions in a word> * 反射就是把Java类中的各种成分映射成对应的Java类。 * <Detail description> * * @author Qiuzhenping * @version [Version NO, 2014-10-25] * @see [Related classes/methods] * @since [product/module version] */ public class ReflectTestMain { /** <default constructor> */ public ReflectTestMain() { // TODO Auto-generated constructor stub } /** <Description functions in a word> * 2014-10-25 * <Detail description> * @author Qiuzhenping * @param args [Parameters description] * @return void [Return type description] * @exception throws [Exception] [Exception description] * @see [Related classes#Related methods#Related properties] */ public static void main(String[] args) throws Exception{ // TODO Auto-generated method stub //Constructor[] contructor = Person.class.getConstructors(); //Method[] method = Person.class.getMethods(); Person p = new Person(24, "Qiuzhping", "100001", "Qiuzhping"); // Field [] field = p.getClass().getDeclaredFields(); // for(Field f:field){ // f.setAccessible(true); // System.out.println(f.getName()); // Object obj = f.get(p); // System.out.println(obj); // } changeStringValue(p); System.out.println(p.toString()); } /** <Description functions in a word> * 将obj对象中的String类型的字段相应的Value中含有i的字符替换为abc<BR> * 2014-10-26 * <Detail description> * @author Qiuzhenping * @param obj [Parameters description] * @return void [Return type description] * @exception throws [Exception] [Exception description] * @see [Related classes#Related methods#Related properties] */ private static void changeStringValue(Object obj) throws Exception { Field[] fields = obj.getClass().getDeclaredFields(); for(Field f : fields){ f.setAccessible(true);//暴力反射 if(f.getType() == String.class){//字节码比較是用 == String oldValue = (String) f.get(obj); String newValue = oldValue.replaceAll("i", "abc");//将全部的i替换为abc f.set(obj, newValue); } } } static class Person { public Person(int age, String name, String id, String pwd) { super(); this.age = age; this.name = name; this.id = id; this.pwd = pwd; } @Override public String toString() { return "age = "+age +"\tname = "+name+"\tid = "+id+"\tpwd = "+pwd; } private int age; private String name; private String id; private String pwd; public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getId() { return id; } public void setId(String id) { this.id = id; } public String getPwd() { return pwd; } public void setPwd(String pwd) { this.pwd = pwd; } /** <default constructor> */ public Person() { // TODO Auto-generated constructor stub } } } |
Java 反射机制[Method反射]
Java 反射机制[Field反射]的更多相关文章
- Java 反射机制[Method反射]
Java 反射机制[Method反射] 接着上一篇Java 反射机制[Field反射],通过调用Person类的setName方法将obj的name字段的Value设置为"callPerso ...
- Java RTTI机制与反射机制
1.1 什么是RTTI? 维基百科的定义:In computer programming, RTTI (Run-Time Type Information, or Run-Time Type Iden ...
- java 类加载机制和反射机制
一.类的加载机制 jvm把class文件加载到内存,并对数据进行校验.解析和初始化,最终形成jvm可以直接使用的java类型的过程.(1)加载 将class文件字节码内容加载到内存中, ...
- 一篇文章看懂java反射机制(反射实例化对象-反射获得构造方法,获得普通方法,获得字段属性)
Class<?> cls = Class.forName("cn.mldn.demo.Person"); // 取得Class对象传入一个包名+类名的字符串就可以得到C ...
- Java高级特性——反射机制(完结)——反射与注解
按照我们的学习进度,在前边我们讲过什么是注解以及注解如何定义,如果忘了,可以先回顾一下https://www.cnblogs.com/hgqin/p/13462051.html. 在学习反射和注解前, ...
- [Java反射机制]用反射改进简单工厂模式设计
如果做开发的工作,工厂设计模式大概都已经深入人心了,比较常见的例子就是在代码中实现数据库操作类,考虑到后期可能会有数据库类型变换或者迁移,一般都会对一个数据库的操作类抽象出来一个接口,然后用工厂去获取 ...
- Java学习之反射机制及应用场景
前言: 最近公司正在进行业务组件化进程,其中的路由实现用到了Java的反射机制,既然用到了就想着好好学习总结一下,其实无论是之前的EventBus 2.x版本还是Retrofit.早期的View注解框 ...
- Java中的反射机制
Java反射机制 反射机制定义 反射机制是Java语言中一个非常重要的特性,它允许程序在运行时进行自我检查,同时也允许其对内部成员进行操作.由于反射机制能够实现在运行时对类进行装载,因此能够增加程序的 ...
- Java反射机制<1>
如果要通过一个对象找到一个类的名称,此时就需要用到反射机制(反射技术是用来做框架的,一般情况下Java私有对象不能被访问,但是暴力反射可以访问私有对象). 任何一个类如果没有明确地声明继承自哪个父类的 ...
随机推荐
- HDU-1090-A+B for Input-Output Practice (II)(骗訪问量的)
A+B for Input-Output Practice (II) Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/327 ...
- MAC-Zsh安装与使用——终极Shell
前言:Zsh可配置性强,用户可以自定义配置,个性化强.Zsh tab补全更强大,该功能可以让我们节约很多时间.Zsh 还有代码高亮功能,使得代码更好看了,显得逼格更高.Zsh 还有很多强大的功能,这里 ...
- Caused by: java.lang.NoSuchMethodError: javax.persistence.JoinColumn.foreignKey()Ljavax/persistence/
Caused by: Java.lang.NoSuchMethodError: javax.persistence.JoinColumn.foreignKey()Ljavax/persistence/ ...
- python hello wlord
入门运行第一个python程序 https://www.python.org/ 官网下载最新python3安装到电脑 安装成功 cmd进入到安装目录 1.在cmd中直接进入到python安装目录 编写 ...
- centos7 crontab 定时执行python任务不执行的原因及解决办法
1.问题描述 在用crontab设置定时任务时,发现py脚本在crontab中报错,显示import某些包找不到,但是手动直接运行py脚本,完全正常. 01 05 * * * ./get_topi ...
- 1-wire单总线DS18B20
要想实现单总线通信,每一个挂在总线上的从机必须拥有开路或3态输出.单总线DS18B20的DQ引脚用内部电路实现了开漏输出,其等效电路如下图: 当单片机IO引脚配置为 mcu IO引脚 电流流向 DS1 ...
- STM32关总中断的语句
__set_PRIMASK();//关总中断 /************ **********/ __set_PRIMASK();//开总中断
- 消息队列 概念 配合SpringBoot使用Demo
转http://www.jianshu.com/p/048e954dab40 概念: 分布式消息队列 ‘分布式消息队列’包含两个概念 一是‘消息队列’,二是‘分布式’ 那么就先看下消息队列的概念,和为 ...
- hbase能否代替mysql
代志远早年就职网易研究院从事MapReduce与DFS系统的自主研发,后增加支付宝数据平台负责Hadoop与HBase体系的架构设计与二次研发,支付宝流计算与分布式搜索系统的设计和研发,后成为支付宝海 ...
- matplotlib之设置极坐标的方向
#!/usr/bin/env python3 #-*- coding:utf-8 -*- ############################ #File Name: polar.py #Auth ...