`

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 反射例子 代码

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

    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 { ...

    javassist3.19GA.jar

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

    java反射(reflect)

    java反射(reflect)

    Java高级程序设计实战教程第三章-Java反射机制.pptx

    //构造方法 java.lang.reflect.Field; //类的成员变量 java.lang.reflect.Method;//类的方法 java.lang.reflect.Modifier;//访问权限 Java高级程序设计实战教程第三章-Java反射机制全文共15页,当前为第6页。 3.2.4 ...

    Java 高级特性.doc

    import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy; import java.util.Collection; import java.util.Vector; public class ProxyTest { public ...

    Android编程实现获取系统内存、CPU使用率及状态栏高度的方法示例

    本文实例讲述了Android编程实现获取系统内存、CPU使用率及状态栏高度的方法。分享给大家供大家参考,具体如下: DeviceInfoManage类用于获取系统的内存,CPU的信息,...import java.lang.reflect.Field; import java.ut

    Android 取消蓝牙配对框实现自动配对功能

    我看了几个文章,主要是接受配对广播,然后设置pin,实现配对,但是网上的大部分手机是不可以的,Android....import java.lang.reflect.Field; import android.bluetooth.BluetoothAdapter; import android.bluetooth

    java pdf 查看器

    import java.lang.reflect.InvocationTargetException; /** * A demo PDF Viewer application. */ public class PDFViewer extends JFrame implements KeyListener, TreeSelectionListener, PageChangeListener...

    自定义GridView并且实现拖拽(附源码)

    写在前面的话 本篇blog实现了GridView的拖拽功能。方法和上一篇自定义ListView实现拖拽ListItem项交换位置一个原理。只是在交换位置上记录了X轴... import java.lang.reflect.Field; import java.util.ArrayList; impor

    Java中的反射机制

    import java.lang.reflect.Field; import java.lang.reflect.Method; /** * */ /** * @ClassName: ReflectTest * @Description: TODO(这里用一句话描述这个类的作用) * @author zhoushun * @date 2013年11...

    候捷谈Java反射机制

    JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它...本文将谈到java.lang.Class,以及java.lang.reflect中的Method、Field、Constructor等等classes。

    java框架知识点汇总(反射,XML,设计模式,Redis缓存数据库)

    Class 类与 java.lang.reflect 类库一起对反射的概念进行了支持,该类库包含了 Field,Method,Constructor 类 (每个类都实现了 Member 接口)。这些类型的对象时由 JVM 在运行时创建的,用以表示未知类里对应的成员。...

    基础深化和提高-java反射技术

    Java反射技术的核心在于java.lang.reflect包,它提供了一系列类和接口,用于在运行时获取关于类和对象的信息,并进行相应的操作。主要的类和接口包括Class、Method、Field、Constructor等。 以下是Java反射技术的...

    eclipse安卓开发必备工具

    import java.lang.reflect.InvocationTargetException; public class SimpleTest { /** *//** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub try { Constructor...

    Android屏幕分辨率工具类使用详解

    Android开发中我们经常需要用到将dip、px相互换算、获取手机屏幕的宽度...import java.lang.reflect.Field; /** * @author: xiaolijuan * @description: 屏幕分辨率工具类 * @date: 2016-06-05 * @time: 22:55 */

    手写一个线程安全的非阻塞队列,并且实现入队出队方法

    实现思路:利用单向链表来保存队列的数据,在往队列中添加元素的时候,新建一个...import java.lang.reflect.Field; public class MyLinkQueue { //头节点 private volatile Node head; //尾节点 private volati

    java反射遍历实体类属性和类型,并赋值和获取值的简单方法

    下面小编就为大家带来一篇java反射遍历实体类属性和类型,并赋值和获取值的简单方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

    Android开发中解析xml文件XmlUtils工具类与用法示例

    本文实例讲述了Android开发中解析xml文件...import java.lang.reflect.Field; import java.util.ArrayList; import java.util.List; import org.xmlpull.v1.XmlPullParser; import android.util.Log; import android.ut

Global site tag (gtag.js) - Google Analytics