Java 反射机制[Field反射]
Java 反射機(jī)制[Field反射]
1.? 反射概念及功能
????????? 反射就是把Java類中的各種成分映射成對(duì)應(yīng)的Java類。比如一個(gè)Java類中用一個(gè)Class類的對(duì)象來(lái)表示。
一個(gè)類中的組成部分分為成員變量,方法,構(gòu)造方法,包等等。
????????? Java反射機(jī)制主要提供了下面功能:?推斷在執(zhí)行時(shí)隨意一個(gè)對(duì)象所屬的類;在執(zhí)行時(shí)構(gòu)造隨意一個(gè)類的對(duì)象;推斷在執(zhí)行時(shí)隨意一個(gè)類所具有的成員變量和方法;在執(zhí)行時(shí)調(diào)用隨意一個(gè)對(duì)象的方法。生成動(dòng)態(tài)代理。
2.? Field反射
???????? 下面代碼將obj對(duì)象中的String類型的字段相應(yīng)的Value中含有i的字符替換為abc。通過(guò)這個(gè)簡(jiǎn)單的案例進(jìn)行初步分析Java的反射機(jī)制。
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類中的各種成分映射成對(duì)應(yīng)的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對(duì)象中的String類型的字段相應(yīng)的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){//字節(jié)碼比較是用 == ???????????????????????????????????? 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 反射機(jī)制[Method反射]?
總結(jié)
以上是生活随笔為你收集整理的Java 反射机制[Field反射]的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: phpcms v9 搜索页显示自定义字段
- 下一篇: es6之块级作用域