Java反射之剖析字段

通过反射获取字段:

--

反射方法并调用时,静态方法可以不传递对象。

字段有点小不同,即使是静态字段也需要传递对象

以下是测试类:包括一个测试实体类:Girl.java,一个反射测试Demo.java

Girl.java:

 1 package cn.rt.gwq;
 2
 3 public class Girl {
 4
 5     private int age = 18;
 6     public int height = 168;
 7     public static String name = "alice" ;
 8
 9     public Girl() {
10         // TODO Auto-generated constructor stub
11     }
12
13     public Girl(int age,int height,String name){
14         this.age = age;
15         this.height = height;
16         this.name = name;
17     }
18
19 }

Demo_FieldRflt:

 1 package cn.rt.gwq;
 2
 3 import java.lang.reflect.Field;
 4
 5 import org.junit.Test;
 6
 7 public class Demo_FieldRflt {
 8
 9     /**
10      * 反射获取字段
11      * @throws Exception
12      */
13     @Test
14     public void test1() throws Exception{
15
16         Girl girl = new Girl(18,168,"alice");
17
18         //加载类
19         Class clazz = Class.forName("cn.rt.gwq.Girl");
20
21         //公有字段
22         Field height = clazz.getField("height");
23         int h = (int) height.get(girl);
24
25         //私有字段
26         Field age = clazz.getDeclaredField("age");
27         age.setAccessible(true);
28         int a = (int) age.get(girl);
29
30         //静态字段
31         Field name = clazz.getField("name");
32         String n = (String) name.get(girl);
33
34         //输出验证
35         System.out.println("name:"+n+",age:"+a+",height:"+h);
36     }
37
38 }
时间: 2024-10-27 12:22:19

Java反射之剖析字段的相关文章

Java反射机制剖析(三)-简单谈谈动态代理

通过Java反射机制剖析(一)和Java反射机制剖析(二)的学习,已经对反射有了一定的了解,这一篇通过动态代理的例子来进一步学习反射机制. 1.     代理模式 代理模式就是为其他对象提供一种代理来控制对这个对象的访问.其实代理模式是在访问的对象时引入一定程度的间接性,这种间接性可以附加多种用途. 它 的特征是代理类与委托类有同样的接口,代理类主要负责为委托类预处理消息.过滤消息.把消息转发给委托类,以及事后处理消息等.代理类与委托类之间通常会 存在关联关系,一个代理类的对象与一个委托类的对象

Java反射机制剖析(四)-深度剖析动态代理原理及总结

动态代理类原理(示例代码参见java反射机制剖析(三)) a)  理解上面的动态代理示例流程 a)  理解上面的动态代理示例流程 b)  代理接口实现类源代码剖析 咱们一起来剖析一下代理实现类($Proxy0)的源代码和整个动态代理的流程. $Proxy0生成的代码如下: import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy; impo

java反射类的字段

java反射类的字段: package com.ma.reflection; import java.lang.reflect.Field; import org.junit.Test; import com.ma.bean.StudentBean; /** * 反射字段 * @author ma * */ public class Demo4 { /** * 反射公有字段 * @throws ClassNotFoundException * @throws NoSuchFieldExcepti

【54】Java反射机制剖析

java反射机制: 1.指的是可以于运行时加载,探知和使用编译期间完全未知的类. 2.程序在运行状态中, 可以动态加载一个只有名称的类, 对于任意一个已经加载的类,都能够知道这个类的所有属性和方法; 对于任意一个对象,都能调用他的任意一个方法和属性; 3.加载完类之后, 在堆内存中会产生一个Class类型的对象(一个类只有一个Class对象), 这个对象包含了完整的类的结构信息,而且这个Class对象就像一面镜子,透过这个镜子看到类的结构,所以被称之为:反射. 4.每个类被加载进入内存之后,系统

java反射机制剖析(三)—类类型Class

为了区别于我们常用的Class,因此给了个中文名类类型.目的就是为了知道此Class非彼Class.上一篇博客已经介绍了Class Loader,它的作用是根据提供的信息来加载类到内存中.我之前有提过这个类信息的提供者就是本篇博客要介绍的Class.提醒:一个类的Class对象和它的Instance是不一样的,切记,不然你会混乱的.开始了! 概念 Class类是所有类(注意是对象)的共有信息的抽象,比如该类实现的接口.对应的加载器.类名等等.一句话,类类型保存了每个类所对应的类型信息.每一个类都

java反射机制剖析(二)— Class Loader

上一篇博客简要的提了一下java反射机制中涉及到的一些相关知识,那么ClassLoader就是其中之一.本篇博客就详细的对ClassLoader做一个相对深入的了解.作为了解需要知道的是,其实类类型(Class Class)是和ClassLoader分不开的,因为ClassLoader需要的信息是由它提供的.类类型将在下一篇博客介绍. 简介 ClassLoader是负责加载类的对象,作用是根据Jvm请求提供的类信息,将请求的类加载的内存中或者说加载到Jvm中.另外,每一个类的Class对象(注意

Java反射之剖析构造函数

反射通俗理解 (根据字符串)解析出一个类的各个组成部分(构造函数,字段,方法). 主要用来做框架 以下是一个简单的测试类 首先是一个测试实体,在此为一个Person类.类里面有五个构造函数.里面的构造有两种类型的: 1.公开的 2.私有的 其中每种类型又包含无参数的,和有参数的(一个或多个) 然后是一个测试类,主要测试了上面所说的几种类型组合的构造函数的获取,以及创建对象并输出测试代码.测试是用Junit来测试的. **** 反射创建对象时,有两种方式. 关于第一种方式,获取私有构造函数需要ge

Java反射之剖析方法

继上篇反射构造函数后,今剖析函数方法. 要通过反射执行方法: 1.可以先反射出类或构造函数,创建实例对象,通过对象调用方法(反射通过构造函数创建对象参见上篇). 2.可以通过类反射出方法,传入关联对象,从而实现对象调用方法. 以下是一个简单测试类: 包含两个文件: 1.Person.java,用于反射操作 2.Deom:Demo_MtdRft.java,反射的测试代码 测试的情况包括:1.公有方法,2.私有方法,3.无参数方法,4.有参数方法,5静态方法 下面是两个测试代码文件: Person.

Java反射之剖析main方法

上篇反射了类的成员方法,main方法其实也应该包含在其中,因为main方法就是一个静态方法. 但实际mian的反射稍有不同,其原因主要是为在升级过程中保持1.5兼容1.4版本:推理如下 1.main方法的参数为一个类型为String[]的参数 2.1.5支持可变参数,所以是可以可变参数形式来读取参数的, 如:main(String[]{"arg1","arg2"})===> main("arg1","arg2") 3.但