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反射]的更多相关文章

  1. Java 反射机制[Method反射]

    Java 反射机制[Method反射] 接着上一篇Java 反射机制[Field反射],通过调用Person类的setName方法将obj的name字段的Value设置为"callPerso ...

  2. Java RTTI机制与反射机制

    1.1 什么是RTTI? 维基百科的定义:In computer programming, RTTI (Run-Time Type Information, or Run-Time Type Iden ...

  3. java 类加载机制和反射机制

    一.类的加载机制 jvm把class文件加载到内存,并对数据进行校验.解析和初始化,最终形成jvm可以直接使用的java类型的过程.(1)加载         将class文件字节码内容加载到内存中, ...

  4. 一篇文章看懂java反射机制(反射实例化对象-反射获得构造方法,获得普通方法,获得字段属性)

    Class<?> cls = Class.forName("cn.mldn.demo.Person"); // 取得Class对象传入一个包名+类名的字符串就可以得到C ...

  5. Java高级特性——反射机制(完结)——反射与注解

    按照我们的学习进度,在前边我们讲过什么是注解以及注解如何定义,如果忘了,可以先回顾一下https://www.cnblogs.com/hgqin/p/13462051.html. 在学习反射和注解前, ...

  6. [Java反射机制]用反射改进简单工厂模式设计

    如果做开发的工作,工厂设计模式大概都已经深入人心了,比较常见的例子就是在代码中实现数据库操作类,考虑到后期可能会有数据库类型变换或者迁移,一般都会对一个数据库的操作类抽象出来一个接口,然后用工厂去获取 ...

  7. Java学习之反射机制及应用场景

    前言: 最近公司正在进行业务组件化进程,其中的路由实现用到了Java的反射机制,既然用到了就想着好好学习总结一下,其实无论是之前的EventBus 2.x版本还是Retrofit.早期的View注解框 ...

  8. Java中的反射机制

    Java反射机制 反射机制定义 反射机制是Java语言中一个非常重要的特性,它允许程序在运行时进行自我检查,同时也允许其对内部成员进行操作.由于反射机制能够实现在运行时对类进行装载,因此能够增加程序的 ...

  9. Java反射机制<1>

    如果要通过一个对象找到一个类的名称,此时就需要用到反射机制(反射技术是用来做框架的,一般情况下Java私有对象不能被访问,但是暴力反射可以访问私有对象). 任何一个类如果没有明确地声明继承自哪个父类的 ...

随机推荐

  1. EXCEL在使用中,jar导入问题

    报错:The type org.apache.poi.ss.usermodel.Workbook cannot be resolved. It is indirectly referenced fro ...

  2. java提高篇-----理解java的三大特性之封装

    在<Think in java>中有这样一句话:复用代码是Java众多引人注目的功能之一.但要想成为极具革命性的语言,仅仅能够复制代码并对加以改变是不够的,它还必须能够做更多的事情.在这句 ...

  3. Unity3.5 GameCenter基础教程(转载)

    原地址: http://forum.unity3d.com/threads/116901-Game-Center-Support/page3 using UnityEngine; using Unit ...

  4. Unity3D调用摄像头显示当前拍摄画面

    原地址:http://blog.csdn.net/awnuxcvbn/article/details/18621265 using UnityEngine; using System.Collecti ...

  5. 网络编程-Java中的Internet查询

    前提 在深入理解URL.URI等概念,或者学些Socket相关的知识之,有必要系统理解一下Internet相关的一些基础知识. Internet地址 连接到Internet(因特网)的设备称为节点(n ...

  6. 遍历JavaScript某个对象所有的属性名称和值

    /* * 用来遍历指定对象所有的属性名称和值 * obj 需要遍历的对象 */ function allPrpos(obj) { // 用来保存所有的属性名称和值 var props = " ...

  7. 让你的 wowza server提供 RESTful web 服务

            有时我们 nginx 须要和 wowza 服务器交互以进行一些 LB 事宜:有时我们的管理员须要实时了解 wowza 服务器的一些其它状态信息(比方一些自己定义对象的状态等等).而用 ...

  8. (八)Oracle学习笔记—— 触发器

    1. 触发器简介 触发器在数据库里以独立的对象存储,类似于过程(procedure)和函数(function),都有声明,执行和异常处理过程的PL/SQL块.它与存储过程和函数不同的是,存储过程与函数 ...

  9. HTML-HTML5+CSS3权威指南阅读(五、深入理解viewport)

    1.手机浏览器与桌面浏览器的不同 现在手机浏览器的显示分辨率与桌面浏览器差不多,但是手机的尺寸比电脑要小很多.一个没做过响应式处理的网站,在手机和电脑上显示完全一样的内容, 不可避免的会出现字体被缩小 ...

  10. EMQ(TLS)

    1.TLS证书验证 为了保障安全.我们常常会使用HTTPS来保障请求不被篡改,作为MQTT使用TLS加密的方式来保障传输安全 EMQ默认使用的TLS加密的端口是8883端口,默认证书在EMQ目录下et ...