一、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相关推荐

  1. java 反射field_java – 使用反射获取Field的泛型类型

    有没有办法在 Java中获取字段的泛型类型? 我有以下对象变量: protected ScheduleView scheduleLine1; protected ScheduleView schedu ...

  2. 支撑Java框架的基础技术:泛型,反射,动态代理,cglib

    以Spring为例要想看明白他的源码需要彻底理解Java的一些基础技术泛型,反射同时对于一些高级技术例如动态代理,cglib和字节码技术也需要掌握,下面就按章节来一一说清楚这些技术的核心部分,最后手写 ...

  3. Java、Android基础之—反射

    前言 写这篇文章原因之一,是因为之后会对一些Android第三方框架进行分析.虽不能达到完全清晰,但大体的涉及知识需明白. 反射概述 反射是框架设计的灵魂.(使用的前提条件:必须先得到代表的字节码的C ...

  4. [Java基础] 反射机制汇总

    引言 初学Java反射机制的时候,只是感觉很神奇,但是不知道学了该怎么用,所以过了一段时间就忘得差不多了:最近接触到了框架,在学习中遇到了反射,深深体会到了反射机制的神奇,回来复习了一下反射机制,写一 ...

  5. Java基础-反射机制

    目录 1.反射机制概述 2.获取class的三种方式 2.1.Class.forName()方式 2.2.obj.getClass()方式 2.3..class方式 3.通过反射实例化对象 4.通过读 ...

  6. 16、Java 基础-反射

    Java 反射 1.反射 反射是指程序可以访问.检测.修改它本身的状态或行为的一种能力. 2.Java的反射机制 java的反射机制是指在程序的运行状态中,给定任意一个类,都可以获取到这个累的属性和方 ...

  7. JAVA基础 (二)反射 深入解析反射机制

    在谈论到反射这个问题时,你是否有例如以下疑问? 不管是在.NET还是Java中反射的原理和机制是一样的,理解了一种还有一种就能够迎刃而解,想要理解反射首先须要了解底层的一些概念和执行.理解了反射有助于 ...

  8. java基础反射知识总结_非常好的Java基础反射总结

    前言疯狂复习基础ing- 最近复习的Jv基础反射做了应该总结,果然反射不只有那么一点点东西,多的是精髓! 最重要的是最后推荐的那两篇文章,写的非常非常好!!反射 1.反射的原理Jv反射机制就是在运行状 ...

  9. Java基础——反射.

    反射 反射是什么? Class类 利用反射还原类 通用toString() 通用数组拷贝 反射是什么? 能够分析类能力的程序称为反射,利用反射能够编写动态操作Java代码的程序 Class类 每个对象 ...

最新文章

  1. 关于MYSQL 字符转义问题总结
  2. 038_JavaScript对象
  3. ubuntu中忘记root密码的解决方法
  4. 关于SpringBoot中的多数据源集成
  5. POJ 1742 Coins ( 经典多重部分和问题 DP || 多重背包 )
  6. 中芯国际能靠14nm工艺翻身么?
  7. 三星在美国开售低价版5G手机 吸引价格敏感消费者
  8. Android功能点(一)——判断网络是否真正连通
  9. [交叉验证]机器学习中分类器的选择
  10. html jQuery 光标位置,jquery实现在光标位置插入内容的方法
  11. Oracle单实例开机自启动
  12. 小甲鱼python学习笔记之函数(一)
  13. 《软件过程管理》 第一章 软件过程规范
  14. 算法笔记和上机实战训练指南(附下载)
  15. Android WebView 示例
  16. 一芯FC1179主控扩容U盘量产修复教程(图文详解)
  17. 思科Cisco交换机运维手册
  18. 解决win8 64位版本下无法使用debug
  19. 【Hive】如何在 Hive 中创建外部表映射 Hbase 中已存在的表
  20. 嫁给玩股票男人的九大理由

热门文章

  1. 关于.NET中的Server push技术
  2. 单片机文件系统的学习
  3. app.vue中引用图片src=“../assets/logo.png“报错未找到图片
  4. 获取android应用签名证书(打包APK用到的那个文件)的SHA1,MD5,SHA256值
  5. 【☢️伤害性不高,侮辱性极强!☢️】Win10更新21H1后关闭右下角天气和新闻
  6. 全局变量、成员变量、类变量、静态变量、实例变量、局部变量的定义与区别
  7. 操作系统(二十一)信号量机制
  8. Nand分区及nand erase简解
  9. maven学习笔记之IDEA+Maven+Jetty运行一个简单的web项目
  10. Algorithm, Secret key and Protocol