java.lang.reflect.Field

java.lang.reflect.Field

一、Field类是什么
  Field是一个类,位于java.lang.reflect包下。
  在Java反射中 Field类描述的是 类的属性信息,通俗来讲 有一个类如下:

 1 package com.testReflect;
 2 public class FieldDemo {
 3     public int num1 = 1;
 4     protected int num2 = 2;
 5     int num3 = 3;
 6     private int num4 = 4;
 7
 8     public String s1 = "a";
 9     protected String s2 = "b";
10     String s3 = "c";
11     private String s4 = "d";
12 }

  在Java反射中FieldDemo类中的属性: num1、num2、num3、num4 都是Field类的实例,这个Field类的实例描述了属性的全部信息。(包括:属性名称、属性类型、属性修饰符、属性注解 等等)

二、如何获取Field类对象
  一共有4种方法,全部都在Class类中:
    - getFields(): 获取类中public类型的属性
    - getField(String name): 获取类特定的方法,name参数指定了属性的名称
    - getDeclaredFields(): 获取类中所有的属性(public、protected、default、private),但不包括继承的属性。
    - getDeclaredField(String name): 获取类特定的方法,name参数指定了属性的名称

三、Field类中常用的方法
  对于类中的属性,我们常用的操作:获取属性的值、修改属性的值。

 1 package com.testReflect;
 2
 3 import java.lang.reflect.Field;
 4 import java.lang.reflect.Modifier;
 5
 6 public class FieldTest {
 7     public static void main(String[] args) throws Exception {
 8         //使用反射第一步:获取操作类FieldDemo所对应的Class对象
 9         Class<?> cls = Class.forName("com.testReflect.FieldDemo");
10         //使用FieldDemo类的class对象生成 实例
11         Object obj = cls.newInstance();
12
13         //通过Class类中getField(String name): 获取类特定的方法,name参数指定了属性的名称
14         Field field = cls.getField("num1");
15
16         //拿到了Field类的实例后就可以调用其中的方法了
17
18         //方法:getModifiers()  以整数形式返回由此 Field 对象表示的字段的 Java 语言修饰符
19         System.out.println("修饰符:  " + Modifier.toString(field.getModifiers()));
20
21         //方法:getType()  返回一个 Class 对象,它标识了此 Field 对象所表示字段的声明类型
22         System.out.println("类型:  "+field.getType());
23
24         //方法:get(Object obj) 返回指定对象obj上此 Field 表示的字段的值
25         System.out.println("属性值:  "+field.get(obj));
26
27         //方法: set(Object obj, Object value)  将指定对象变量上此 Field 对象表示的字段设置为指定的新值
28         field.set(obj, 55);
29         System.out.println("修改属性值后 --> get(Object obj):  "+field.get(obj));
30     }
31 }
时间: 2024-10-24 13:11:16

java.lang.reflect.Field的相关文章

JAVA反射系列之Field,java.lang.reflect.Field使用获取方法

JAVA反射系列之Field,java.lang.reflect.Field使用获取方法.   转载https://my.oschina.net/u/1407116/blog/209383 摘要 java.lang.reflect.Field使用 Field. 首先必须明一点 Field类主要是用来辅助获取和操作类的属性的! 1.怎么通过反射获取类的属性 先来看JDK提供的方法有如下几种: a)Class.getDeclaredField(String name);      返回一个 Fiel

java.lang.reflect.Field详解

首先说一下个人观点,Field类,我认为它所代表的事一个实体类的所有属性,因为它的很多方法都是作用在类与属性之间的,下面让我们分析一下Field类的一些方法.  boolean equals(Object obj) 将此 Field 与指定对象比较. 详解: 让我们看一下它的方法: 我们会发现equals方法的参数一定要是Field的类型的.也就是说我们所进行比较的也是Field的类型的进行比较,如果我们输入null或非Field的类型会返回false.(问题:为何不直接用Field,直接用Fi

java.lang.reflect操作对象属性(域)的值

import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; /*2015-10-28*/ public class RefactorDemo { /** * @param args * @throws NoSuchFieldException * @throws SecurityException * @throws Ill

moon 反射机制---java.lang.reflect包

java反射机制:在运行状态中,对于一个已经加载到JVM的java对象/类 在程序中实现访问.检查.修改.描述java对象本身的信息(构造方法.方法.成员变量.类本身的信息) 这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制. C++,Java,C#不是动态语言.但是JAVA有着一个非常突出的动态相关机制:Reflection, 反射是java中一种强大的工具,能够使我们很方便的创建灵活的代码,这些代码可以再运行时装配,无需在组件之间进行源代码链接. 二,反射机制的作用:

Java反射API研究(2)——java.lang.reflect详细内容与关系

对于最新的java1.8而言,reflect中接口的结构是这样的: java.lang.reflect.AnnotatedElement java.lang.reflect.AnnotatedType java.lang.reflect.AnnotatedArrayType java.lang.reflect.AnnotatedParameterizedType java.lang.reflect.AnnotatedTypeVariable java.lang.reflect.Annotated

JAVA中反射机制六(java.lang.reflect包)

一.简介 java.lang.reflect包提供了用于获取类和对象的反射信息的类和接口.反射API允许对程序访问有关加载类的字段,方法和构造函数的信息进行编程访问.它允许在安全限制内使用反射的字段,方法和构造函数对其底层对等进行操作. 二.java.lang.reflect AccessibleObject类 java.lang.reflect.AccessibleObject类是Field,Method和Constructor类对象的基类. 它提供了将反射对象标记为在使用它时抑制默认Java

java.lang.reflect.InvocationHandler中invoke()方法调用时机

Java中动态代理的实现,关键就是这两个东西:Proxy.InvocationHandler,下面从InvocationHandler接口中的invoke方法入手,简单说明一下Java如何实现动态代理的. invoke方法的完整形式如下: public Object invoke(Object proxy, Method method, Object[] args) throws Throwable       {              method.invoke(obj, args);  

java.lang.reflect(一)

要梳理这个包,就必须要整理一下反射了.为了方便描述,我们假定已经写好了一个普通类,com. 反射API 接口 AnnotatedElement GenericArrayType GenericDeclaration InvocationHandler Member ParameterizedType Type TypeVariable WildcardType 类 AccessibleObject (代表访问检查的能力) Array (代表数组) Constructor (代表构造方法) Fie

自己写一个java.lang.reflect.Proxy代理的实现

前言 Java设计模式9:代理模式一文中,讲到了动态代理,动态代理里面用到了一个类就是java.lang.reflect.Proxy,这个类是根据代理内容为传入的接口生成代理用的.本文就自己写一个Proxy类出来,功能和java.lang.reflect.Proxy一样,传入接口.代理内容,生成代理. 抛砖引玉吧,个人觉得自己写一些JDK里面的那些类挺好的,写一遍和看一遍真的是两个不同的概念,写一遍既加深了对于这些类的理解.提升了自己的写代码水平,也可以在写完之后对比一下自己的实现有哪些写得不好