`

38、java.lang.reflect.Field

阅读更多

一、Field

 

  1. Field 提供有关类或接口的单个字段的信息,以及对它的动态访问权限。
  2. 反射的字段可能是一个类(静态)字段或实例字段。 
  3. Array 允许在执行 get 或 set 访问操作期间进行扩展转换,但如果将发生收缩转换,则抛出一个 IllegalArgumentException。

二、常用方法

 

public final class Field extends AccessibleObject implements Member
{
	//没有构造方法

	//返回指定对象上此 Field 表示的字段的值。如果该值是一个基本类型值,则自动将其包装在一个对象中
	public Object get(Object obj)
           throws IllegalArgumentException,
                  IllegalAccessException{}

	//获取一个静态或实例 boolean 字段的值
	public boolean getBoolean(Object obj)
                   throws IllegalArgumentException,
                          IllegalAccessException{}

	public byte getByte(Object obj)
             throws IllegalArgumentException,
                    IllegalAccessException{}

	public char getChar(Object obj)
             throws IllegalArgumentException,
                    IllegalAccessException{}

	getShort  getInt  getLong  getFloat  getDouble

	//将指定对象变量上此 Field 对象表示的字段设置为指定的新值。
	public void set(Object obj,
                Object value)
         throws IllegalArgumentException,
                IllegalAccessException{}

	public void setBoolean(Object obj,
                       boolean z)
                throws IllegalArgumentException,
                       IllegalAccessException{}

	setByte  setChar  setShort  setInt  setLong  setFloat  setDouble
}

 

三、示例

 

 

package day23;

import java.lang.reflect.*;

public class ReflectDemo {
	public static void main(String[] args)
	{
		ReflectPoint rep = new ReflectPoint(3,5);
		Field fieldX = rep.getClass().getField("x");
		System.out.println(fieldX);//public int day23.ReflectPoint.x
		
		System.out.println(fieldX.get(rep));//3
		
		//Field fieldY = rep.getClass().getField("y"); 不能访问private
		Field fieldY = rep.getClass().getDeclaredField("y");
		fieldY.setAccessible(true);//设置访问权限
		System.out.println(fieldY.get(rep));
	}
}
class ReflectPoint
{
	public int x;
	private int y;
	public ReflectPoint(int x,int y)
	{
		this.x = x;
		this.y = y;
	}
}

 

package day23;

import java.lang.reflect.*;
/**
 * 将任意一个对象中的所有String类型的成员变量所对应的字符串内容中的‘b’改成‘a’
 */
public class ReflectDemo {
	public static void main(String[] args) throws Exception
	{
		ReflectPoint rep = new ReflectPoint(3,5);
		System.out.println(rep);
		changeStringValue(rep);
		System.out.println(rep);
	}

	private static void changeStringValue(Object obj) throws Exception {
		Field[] fields = obj.getClass().getFields();
		for(Field field : fields)
		{
			//getType得到字段的类型
			if(field.getType() == String.class)
			{
				String value = (String) field.get(obj);
				if(value.contains("b"))
				{
					value = value.replace("b","a");
					field.set(obj, value);
				}
			}
		}
	}
}
class ReflectPoint
{
	public int x;
	private int y;
	public String str1 = "abbcd";
	public String str2 = "ball";
	public String str3 = "ccccc";
	public ReflectPoint(int x,int y)
	{
		this.x = x;
		this.y = y;
	}
	public String toString()
	{
		return str1+":"+str2+":"+str3;
	}
}

 

分享到:
评论

相关推荐

    Java.lang.reflect 包下常用的类及方法简介

    在Java编程语言中,`java.lang.reflect`包是核心库的一部分,它提供了运行时访问类、接口、字段和方法的能力。这个包对于理解和操作对象的动态特性至关重要,尤其是在实现反射机制时。反射允许我们在程序运行期间...

    commons-lang3-3.1jar:org.apache.commons.lang3.StringUtils等.

    Apache Commons Lang 是一个Java工具包,它提供了对Java核心库的补充,特别是在字符串处理、反射、日期和时间操作等方面。`commons-lang3-3.1.jar`是这个库的一个版本,其中包含了多个实用类和方法,有助于简化和...

    java反射(reflect)

    1. 动态代理:使用`java.lang.reflect.Proxy`和`java.lang.reflect.InvocationHandler`可以创建动态代理对象,实现AOP(面向切面编程)。 2. 数据库操作框架:如MyBatis,通过反射动态生成SQL语句并执行。 3. XML...

    JAVA反射实现和实现机制

    3. **`java.lang.reflect.Field`**:表示类的成员变量。 4. **`java.lang.reflect.Method`**:表示类的方法。 5. **`java.lang.reflect.Modifier`**:提供对成员的修饰符的访问。 ##### 基本使用方法 1. **获取...

    java 反射例子 代码

    java.lang.reflect.Constructor; java.lang.reflect.Field; java.lang.reflect.Method; java.lang.reflect.Modifier;

    什么是java中的反射机制(reflect).docx

    Class 类代表了 Java 中的一个类,而 java.lang.reflect 包提供了许多反射类,例如 Constructor、Method、Field 等。 Constructor 类代表了某个类中的一个构造方法。例如,我们可以使用 Class.forName("java.lang....

    Android平台与Web服务数据交互时运用Java反射机制解析数据的研究.pdf

    其中最经常使用的是三个类:java.lang.reflect.Field类、java.lang.reflect.Method类和java.lang.reflect.Constructor类。 Java.lang.reflect.Field类提供了有关类或接口的单个域的信息。利用这个类,我们可以得到...

    ExcelExportUtils.java

    import java.lang.reflect.Field; import java.lang.reflect.Method; import java.text.SimpleDateFormat; import java.util.Date; import java.util.List; import org.apache.poi.hssf.usermodel.HSSFWorkbook; ...

    java Reflection 反射机制 反编译

    import java.lang.reflect.Field; import java.lang.reflect.Method; import java.lang.reflect.Modifier; public class ReflectionTest { public static void main(String[] args) { Class c = null; try { ...

    java的类反射

    反射的核心类包括`java.lang.Class`、`java.lang.reflect.Field`、`java.lang.reflect.Method`和`java.lang.reflect.Constructor`。下面将详细阐述这些核心类以及反射的主要用法。 1. `java.lang.Class`:每个类在...

    javassist3.19GA.jar

    用以执行和JDK反射API中java.lang.Class,,java.lang.reflect.Method,, java.lang.reflect.Method .Field相同的操作。这些类可以使你在目标类被加载前,轻松的获得它的结构,函数,以及属性。此外,不仅仅是在功能...

    【Java基础笔记】反射.docx

    在Java中,反射主要涉及到`java.lang.Class`、`java.lang.reflect.Method`、`java.lang.reflect.Field`和`java.lang.reflect.Constructor`等类。下面将详细介绍这些知识点。 1. **反射的概述** 反射机制使得Java...

    Java rt.jar 源码分析

    6. 反射:`java.lang.reflect`包包含了反射相关的类,如`Class`、`Method`、`Field`。深入源码,我们可以掌握如何在运行时动态地访问和修改类的信息。 7. I/O操作:`java.io`和`java.nio`包提供了丰富的I/O操作接口...

    java反射机制[参照].pdf

    反射机制的核心在于Java Reflection API,其中包括`java.lang.Class`,`java.lang.reflect.Method`,`java.lang.reflect.Field`和`java.lang.reflect.Constructor`等类。 首先,`java.lang.Class`是所有Java类的元...

    java面试题--反射机制

    Java反射机制主要依赖于`java.lang.reflect`包下的API,其中包括: - `java.lang.Class`:表示一个类的运行时信息。 - `java.lang.reflect.Method`:表示类的方法。 - `java.lang.reflect.Field`:表示类的字段。 -...

    Java EE:Reflect 反射技术.docx

    - `java.lang.reflect.Method`:表示类的方法,提供获取方法信息和调用方法的功能。 - `java.lang.reflect.Field`:表示类的成员变量,用于获取和设置字段值。 - `java.lang.reflect.Constructor`:表示类的构造函数...

    Annotation工作原理

    这个接口被java.lang.Package、java.lang.Class实现,并间接地被Method类、Constructor类、java.lang.reflect的Field类实现。 6.Annotation中的方法参数可以通过Method类、Constructor类的getParameterAnnotations...

    Java语言的动态属性总结[参考].pdf

    2. **Java.lang.reflect.AccessibleObject**: `Field`, `Method`, 和 `Constructor` 类的基类,提供了访问控制的机制,如设置访问权限以允许反射操作。 3. **Java.lang.reflect.Method**: 代表类的方法信息,包括...

    java学习资料-反射机制深入理解剖析

    3. 访问类的成员变量,包括私有变量,通过`Field.get()`和`Field.set()`。 4. 调用类的方法,包括私有方法,使用`Method.invoke()`。 5. 创建动态代理,通过`java.lang.reflect.Proxy`类,可以在运行时生成代理对象...

Global site tag (gtag.js) - Google Analytics