java反射——字段
大家都知道反射技术在Java里面时非常重要的一个技术点,因为Java好多框架的编写都是基于反射的,别的不多说,spring框架里面的IOC就是基于反射实现。那么什么是反射呢?JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;这种动态获取信息以及动态调用对象方法的功能称为java语言的反射机制。说白了,反射就是加载类,并且反射出类的各个组成部分的一种实现方式。
Java是一种面向对象的语言,它使用一个类中的字段对数据进行分装,这样的话可以方便类的操作和描述,下面的例子将演示如何利用反射获取类的字段。
1.创建一个简单的Person类
package com.day09;
public class Person {
public String name = "zhangsan";
private int age = 23;
public static String country = "China";
}
2.利用Junit来演示进行演示测试
package com.day09;
import java.lang.reflect.Field;
import org.junit.Test;
public class ReflectFieldDemo {
/**
* 反射类的字段 public String name = "zhangsan";
*
* @throws Exception
*/
@Test
public void reflectPublicField() throws Exception {
// 将person类加载到内存中
Class<?> clazz = Class.forName("com.day09.Person");
// 通过clazz创建一个对象
Person p = (Person) clazz.newInstance();
// 通过字段的名字获取对应的字段
Field filed = clazz.getField("name");
// 获取字段的类型
Class type = filed.getType();
System.out.println(type);
// 传入一个对象,来获取该对象的值
Object obj = filed.get(p);
if (type.equals(String.class)) {
String value = (String) obj;
System.out.println(value);
}
// 赋值
filed.set(p, "王五");
System.out.println(p.name);
}
/**
* 反射类的字段 private int age = 23;
*
* @throws Exception
*/
@Test
public void reflectPrivateField() throws Exception {
// 将person类加载到内存中
Class<?> clazz = Class.forName("com.day09.Person");
// 通过clazz创建一个对象
Person p = (Person) clazz.newInstance();
// 因为是私有字段,需要通过getDeclaredField该方法传入字段的名字获取对应的字段
Field filed = clazz.getDeclaredField("age");
// 释放权限,设为可见
filed.setAccessible(true);
// 获取字段的类型
Class type = filed.getType();
System.out.println(type);
// 传入一个对象,来获取该对象的值
Object obj = filed.get(p);
if (type.equals(int.class)) {
int value = (int) obj;
System.out.println(value);
}
}
/**
* 反射类的字段 public static String country = "China";
*
* @throws Exception
*/
@Test
public void reflectStaticField() throws Exception {
// 将person类加载到内存中
Class<?> clazz = Class.forName("com.day09.Person");
// 通过字段的名字获取对应的字段
Field filed = clazz.getField("country");
// 获取字段的类型
Class type = filed.getType();
System.out.println(type);
// 因为是静态的无需传入对象,来获取该类该对象的值
Object obj = filed.get(null);
if (type.equals(String.class)) {
String value = (String) obj;
System.out.println(value);
}
}
}
至此,我们已将常见的几种通过反射获得类中字段的方法演示完毕,有不足的地方,希望大家多多提意见!
java反射——字段的更多相关文章
- 【译】4. Java反射——字段
原文地址:http://tutorials.jenkov.com/java-reflection/fields.html ======================================= ...
- 【译】7. Java反射——私有字段和私有方法
原文地址:http://tutorials.jenkov.com/java-reflection/private-fields-and-methods.html =================== ...
- Java 反射机制学习资料
Java反射——引言 Java反射——Class对象 Java反射——构造函数 Java反射——字段 Java反射——方法 Java反射——Getter和Setter Java反射——私有字段和私有方 ...
- Java反射——引言
Java反射——引言 原文地址:http://tutorials.jenkov.com/java-reflection/index.html *By Jakob Jenkov Java的反射机制使得它 ...
- 【译】1. Java反射——引言
原文地址:http://tutorials.jenkov.com/java-reflection/index.html *By Jakob Jenkov Java的反射机制使得它可以在运行时检查类.接 ...
- 【译】2. Java反射——Class对象
原文地址:http://tutorials.jenkov.com/java-reflection/classes.html ====================================== ...
- 【译】3. Java反射——构造函数
原文地址:http://tutorials.jenkov.com/java-reflection/constructors.html ================================= ...
- 【译】5. Java反射——方法
原文地址:http://tutorials.jenkov.com/java-reflection/methods.html ====================================== ...
- 【译】6. Java反射——Getter和Setter
原文地址:http://tutorials.jenkov.com/java-reflection/getters-setters.html ============================== ...
随机推荐
- tomcat 工作原理简析
https://github.com/HappyTomas/another-tutorial-about-java-web/blob/master/00-08.md 在00-02.理解HTTP中给出了 ...
- oblique perspective projection
参考: https://en.wikibooks.org/wiki/GLSL_Programming/Vertex_Transformations <3D游戏与计算机图形学中的数学方法>E ...
- 打败 IE 的葵花宝典:CSS Bug Table
博主说:本博客文章来源包括转载,翻译,原创,且在文章内均有标明.鼓励原创,支持创作共享,请勿用于商业用途,转载请注明文章链接.本文链接:http://www.kein.pw/?p=35 原文发表于:A ...
- tail 命令详解
tail 指令 功能:从指定点开始将文件写到标准输出.使用tail命令的-f选项可以方便的查阅正在改变的日志文件,tail -f filename会把filename里最尾部的内容显示在屏幕上,并且不 ...
- linux学习笔记5--命令rmdir和rm
昨天学习了创建目录的命令mkdir ,接下来学习一下linux中删除文件和目录的命令: rm命令. rm是一个危险的命令,使用的时候要特别当心,尤其对于新手,否则整个系统就会毁在这个命令(比如在/(根 ...
- 1. DataBinding - offical tutorial
1. DataBinding - offical tutorial android DataBinding tutorial 构建环境 数据与布局文件的绑定 data binding 表达式 数据对象 ...
- 1.2 Activity
Activity是个应用组件,它给用户提供了为了完成某些工作而可以进行交互操作的界面,例如,电话详情,打电 话,发邮件,或是浏览地图.每一个Activity都有一个窗口来绘制自已的用户界面.通常来说, ...
- PHP——上传文件
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- hdu6078 Wavel Sequence dp+二维树状数组
//#pragma comment(linker, "/STACK:102400000,102400000") /** 题目:hdu6078 Wavel Sequence 链接:h ...
- ctrl +z
#bg 1 [1]+ /root/bin/rsync.sh & 用 jobs 命令查看正在运行的任务: #jobs [1]+ Running /root/bin/rsync.sh & ...