java 反射field_Java基础--反射之Field
一、Field
(1)Field
/**
* Field: 分装了字段的信息
* 1. 获取字段
* 1.1 Field[] fields = clazz.getDeclaredFields();
* 1.2 Field field = clazz.getDeclaredField("name");
*
* 2. 获取指定对象的指定字段的值
* public Object get(Object obj)
* obj 为字段所在对象
* 3. 设置指定对象的指定字段的值
* public void set(Object obj, Object value)
* obj 字段所在对象
* value 要设置的值
*/
@Test
public void test10() throws Exception {
Class clazz = Class.forName("com.wang.reflection.Person");
//1.获取字段
//1.1 获取Field的数组
Field[] fields = clazz.getDeclaredFields();
for(Field field : fields) {
System.out.println("1.1 " + field);
}
//1.2 获取指定名字的Field
Field field = clazz.getDeclaredField("name");
System.out.println("1.2 " + field.getName());
//2.获取指定对象的Field的值
Person person = new Person("AAA", 22);
Object val = field.get(person);
System.out.println("2 " + val);
//3. 设置指定对象的Field值
field.set(person, "BBB");
System.out.println("3 " + person.getName());
//4. 若该字段是私有的,需要调用
Field field2 = clazz.getDeclaredField("age");
field2.setAccessible(true);
System.out.println("4 " + field2.get(person));
}
结果输出:
(2)为私有属性赋值
@Test
public void test11() throws Exception {
String className = "com.wang.reflection.Student";
String fieldName = "age";
Object val = 20;
//创建className所对应的对象,并为其fieldName赋值为val
Object obj = null;
Class clazz = Class.forName(className);
Field field = null;
for(Class clazz2 = clazz; clazz2 != Object.class; clazz2 = clazz2.getSuperclass()) {
try {
field = clazz2.getDeclaredField(fieldName);
} catch (Exception e) {}
}
obj = clazz.newInstance();
field.setAccessible(true);
field.set(obj, val);
Student stu = (Student)obj;
System.out.println(stu.getAge());
}
二、Constructor
/**
* Constructor: 构造器
*/
@Test
public void test12() throws Exception {
String className = "com.wang.reflection.Person";
Class clazz = Class.forName(className);
//1. 获取构造器对象
//1.1 获取所有构造器
Constructor [] constructors =
(Constructor[]) Class.forName(className).getConstructors();
for(Constructor cons : constructors) {
System.out.println("1.1 " + cons);
}
//1.2 获取指定的构造器
Constructor constructor = clazz.getConstructor(String.class,Integer.class);
System.out.println("1.2 " + constructor);
//2. 调用构造器的newInstance方法创建对象
Object obj = constructor.newInstance("AAA", 18);
}
输出:
java 反射field_Java基础--反射之Field相关推荐
- java 反射field_java – 使用反射获取Field的泛型类型
有没有办法在 Java中获取字段的泛型类型? 我有以下对象变量: protected ScheduleView scheduleLine1; protected ScheduleView schedu ...
- 支撑Java框架的基础技术:泛型,反射,动态代理,cglib
以Spring为例要想看明白他的源码需要彻底理解Java的一些基础技术泛型,反射同时对于一些高级技术例如动态代理,cglib和字节码技术也需要掌握,下面就按章节来一一说清楚这些技术的核心部分,最后手写 ...
- Java、Android基础之—反射
前言 写这篇文章原因之一,是因为之后会对一些Android第三方框架进行分析.虽不能达到完全清晰,但大体的涉及知识需明白. 反射概述 反射是框架设计的灵魂.(使用的前提条件:必须先得到代表的字节码的C ...
- [Java基础] 反射机制汇总
引言 初学Java反射机制的时候,只是感觉很神奇,但是不知道学了该怎么用,所以过了一段时间就忘得差不多了:最近接触到了框架,在学习中遇到了反射,深深体会到了反射机制的神奇,回来复习了一下反射机制,写一 ...
- Java基础-反射机制
目录 1.反射机制概述 2.获取class的三种方式 2.1.Class.forName()方式 2.2.obj.getClass()方式 2.3..class方式 3.通过反射实例化对象 4.通过读 ...
- 16、Java 基础-反射
Java 反射 1.反射 反射是指程序可以访问.检测.修改它本身的状态或行为的一种能力. 2.Java的反射机制 java的反射机制是指在程序的运行状态中,给定任意一个类,都可以获取到这个累的属性和方 ...
- JAVA基础 (二)反射 深入解析反射机制
在谈论到反射这个问题时,你是否有例如以下疑问? 不管是在.NET还是Java中反射的原理和机制是一样的,理解了一种还有一种就能够迎刃而解,想要理解反射首先须要了解底层的一些概念和执行.理解了反射有助于 ...
- java基础反射知识总结_非常好的Java基础反射总结
前言疯狂复习基础ing- 最近复习的Jv基础反射做了应该总结,果然反射不只有那么一点点东西,多的是精髓! 最重要的是最后推荐的那两篇文章,写的非常非常好!!反射 1.反射的原理Jv反射机制就是在运行状 ...
- Java基础——反射.
反射 反射是什么? Class类 利用反射还原类 通用toString() 通用数组拷贝 反射是什么? 能够分析类能力的程序称为反射,利用反射能够编写动态操作Java代码的程序 Class类 每个对象 ...
最新文章
- 关于MYSQL 字符转义问题总结
- 038_JavaScript对象
- ubuntu中忘记root密码的解决方法
- 关于SpringBoot中的多数据源集成
- POJ 1742 Coins ( 经典多重部分和问题 DP || 多重背包 )
- 中芯国际能靠14nm工艺翻身么?
- 三星在美国开售低价版5G手机 吸引价格敏感消费者
- Android功能点(一)——判断网络是否真正连通
- [交叉验证]机器学习中分类器的选择
- html jQuery 光标位置,jquery实现在光标位置插入内容的方法
- Oracle单实例开机自启动
- 小甲鱼python学习笔记之函数(一)
- 《软件过程管理》 第一章 软件过程规范
- 算法笔记和上机实战训练指南(附下载)
- Android WebView 示例
- 一芯FC1179主控扩容U盘量产修复教程(图文详解)
- 思科Cisco交换机运维手册
- 解决win8 64位版本下无法使用debug
- 【Hive】如何在 Hive 中创建外部表映射 Hbase 中已存在的表
- 嫁给玩股票男人的九大理由
热门文章
- 关于.NET中的Server push技术
- 单片机文件系统的学习
- app.vue中引用图片src=“../assets/logo.png“报错未找到图片
- 获取android应用签名证书(打包APK用到的那个文件)的SHA1,MD5,SHA256值
- 【☢️伤害性不高,侮辱性极强!☢️】Win10更新21H1后关闭右下角天气和新闻
- 全局变量、成员变量、类变量、静态变量、实例变量、局部变量的定义与区别
- 操作系统(二十一)信号量机制
- Nand分区及nand erase简解
- maven学习笔记之IDEA+Maven+Jetty运行一个简单的web项目
- Algorithm, Secret key and Protocol