反射_Class对象功能概述

* Class对象功能:
* 获取功能:
1. 获取成员变量们
* Field[] getFields() :获取所有public修饰的成员变量
* Field getField(String name) 获取指定名称的 public修饰的成员变量 * Field[] getDeclaredFields() 获取所有的成员变量,不考虑修饰符
* Field getDeclaredField(String name)
2. 获取构造方法们
* Constructor<?>[] getConstructors()
* Constructor<T> getConstructor(类<?>... parameterTypes) * Constructor<T> getDeclaredConstructor(类<?>... parameterTypes)
* Constructor<?>[] getDeclaredConstructors()
3. 获取成员方法们:
* Method[] getMethods()
* Method getMethod(String name, 类<?>... parameterTypes) * Method[] getDeclaredMethods()
* Method getDeclaredMethod(String name, 类<?>... parameterTypes) 4. 获取全类名
* String getName()

  

Person类:

public class Person {
private String name;
private int age;
public String a; public Person() {
} public Person(String name, int age) {
this.name = name;
this.age = age;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public int getAge() {
return age;
} public void setAge(int age) {
this.age = age;
} @Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
", a='" + a + '\'' +
'}';
public void eat() {
System.out.println("eat...");
} public void eat(String food) {
System.out.println("eat..." + food);
}
}

反射_Class对象功能_获取Field

Field[] getFields():获取所有public修饰的成员变量

Field getField(String name):获取指定名称的 public修饰的成员变量

Field[] getDeclaredFields():获取所有的成员变量,不考虑修饰符

Field getDeclaredField(String name)

Field:成员变量

操作:

1、设置值

void set(Object obj,Object value)

2、获取值

get(Object obj)

3、忽略访问权限修饰符的安全检查

setAccessible(true):暴力反射

import domain.Person;
import java.lang.reflect.Field; public class ReflectDemo2 {
public static void main(String[] args) throws Exception { //0、获取Person的Class对象
Class personClass = Person.class; //1、Field[] getFields()
Field[] fields = personClass.getFields();
for (Field field : fields) {
System.out.println(field);
} System.out.println("--------");
//Field getField(String name)
Field a = personClass.getField("a");
//获取成员变量a的值
Person p = new Person();
Object value = a.get(p);
System.out.println(value);
//设置a的值
a.set(p,"张三");
System.out.println(p); System.out.println("##################"); //Field[] getDeclaredFields(),获取所有的成员变量,不考虑修饰符
Field[] declaredFields = personClass.getDeclaredFields();
for(Field decl : declaredFields){
System.out.println(decl);
}
//Field getDeclaredField(String name)
Field d = personClass.getDeclaredField("age");
//忽略访问权限修饰符的安全检查
d.setAccessible(true);//暴力反射
Object value2 = d.get(p);
System.out.println(value2);
}
}

运行结果:

 

最新文章

  1. iOS推送原理
  2. Javascript:Javascript数据类型详解
  3. Easy Tag Write(2)
  4. 16.语句include和require的区别是什么?为避免多次包含同一文件,可用(?)语句代替它们?
  5. 【转载】Windows 7 不同安装模式简要区别(图解)
  6. Makefile总述②文件命名、包含其他文件makefile、变量、重建重载、解析
  7. sql 读取本地txt文件批量插入数据库
  8. .frm文件
  9. easyui datagrid用formtater的问题
  10. JavaScript装逼指南
  11. listbox多选实现上下移动 js版和服务器版
  12. 《PyQt5快速开发与实战了》正式发售 !!!
  13. nginx 配置白名单
  14. mybatis源码阅读心得
  15. Oracle 进入数据库 新增用户 修改密码方法
  16. linux C API连接并查询mysql5.7.9
  17. linux系统下git使用
  18. apache日志
  19. 用JSP从数据库中读取图片并显示在网页上
  20. 亚马逊写作文档tip

热门文章

  1. 0基础90分钟会用PS——GenJi笔记
  2. String基础: String两种创建对象方式的比较
  3. node 创建服务器方法
  4. zk系列二:zookeeper实战之分布式统一配置获取
  5. [leetcode] 547. Number of Provinces
  6. 还在手撸TCP/UDP/COM通信?一个仅16K的库搞定!
  7. 轻松玩转awk
  8. js 获取相同name元素的属性值
  9. python2和python3的区别(1)
  10. 搭建漏洞环境及实战——搭建DVWA漏洞环境