反射所有功能都是通过class API来实现的

class常用API有:

1。class.GETINTERFACES();获得这个类实现的接口。

2。class。getMethods()

Method常用反射API

1.Method.invoke(),方法自己调用自己,方法调用必须通过object.method()方式,method对象本身是无法调用自己的。

2.Method.getParameterTypes()获得参数类型

3.Method.getReturnType()获得返回值类型

4.Method.getParameterCount()获得方法的参数个数

5.Method.getName()获得方法名称

6.Method.getExceptionTypes()获得方法抛出哪些异常

7.method.getAnnotation()获得注解

Field常用反射API

1.field.getAnnotations()返回属性的注解

通过反射可以获得属性Field。

1、定义一个实体类

  1. package cn.com.refelct;
  2. public class Emp {
  3. private int no;
  4. private int age;
  5. public String address;
  6. public String name;
  7. public Emp(int no, int age, String address, String name) {
  8. super();
  9. this.no = no;
  10. this.age = age;
  11. this.address = address;
  12. this.name = name;
  13. }
  14. }

2、获取Field

  1. Field[] publicFields = emp.getClass().getFields();
  2. for(Field field:publicFields){
  3. System.out.println(field);
  4. }

上述方式得到的结果如下:

  1. public java.lang.String cn.com.refelct.Emp.address
  2. public java.lang.String cn.com.refelct.Emp.name

可见:该种方式只能得到public属性的字段。

为了得到所有的Field,见如下代码:

  1. Field[] privateAndPublicFields = emp.getClass().getDeclaredFields();
  2. for(Field field:privateAndPublicFields){
  3. System.out.println(field);
  4. }

上述方式得到的结果如下:

  1. private int cn.com.refelct.Emp.no
  2. private int cn.com.refelct.Emp.age
  3. public java.lang.String cn.com.refelct.Emp.address
  4. public java.lang.String cn.com.refelct.Emp.name

3、获取Field的值

通过Filed,可以获取对应的值:

(1)获取某个public属性的值

  1. Field nameField = emp.getClass().getField("name");
  2. System.out.println("name的值:" + nameField.get(emp));

得到的结果如下:

  1. name的值:yy

(2)获取某个private属性的值

  1. Field ageField = emp.getClass().getDeclaredField("age");
  2. System.out.println("age的值:" + ageField.get(emp));

结果如下:

  1. Exception in thread "main" java.lang.IllegalAccessException: Class cn.com.refelct.ReflectField can not access a member of class cn.com.refelct.Emp with modifiers "private"
  2. at sun.reflect.Reflection.ensureMemberAccess(Reflection.java:65)
  3. at java.lang.reflect.Field.doSecurityCheck(Field.java:960)
  4. at java.lang.reflect.Field.getFieldAccessor(Field.java:896)
  5. at java.lang.reflect.Field.get(Field.java:358)
  6. <span style="white-space:pre">    </span>at cn.com.refelct.ReflectField.main(ReflectField.java:44)

可见:对于private的属性,访问不了。

做如下修改:

  1. Field ageField = emp.getClass().getDeclaredField("age");
  2. ageField.setAccessible(true);
  3. System.out.println("age的值:" + ageField.get(emp));

通过暴力反射的方式进行值的获取。

结果如下:

  1. age的值:25

另外:对于static字段,当获取其值时,传入的对象为null或者任何一个实体类的对象。

反射常用API的更多相关文章

  1. 反射常用API以及内省机制(代码)

    学习内容: (1)获取构造函数 这里不贴Person类了,不然代码太多太乱了,只给出一些常用API // 创建字节码对象 Class<?> aClass = Class.forName(& ...

  2. Java反射常用API汇总

    “JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意方法和属性” 一.类对象的获取 1.通过对象获取 Object obj = ne ...

  3. 反射的常用API

    反射的常用API 加载程序集 Assembly assembly = Assembly.Load("程序集名称"); // 从前目录加载程序集,提供程序集名称,无后缀 Assemb ...

  4. Javassist之常用API的应用 02

    测试模型代码: package org.study2.JavaSenior.annotation.javassistDemo; /** * @Auther:GongXingRui * @Date:20 ...

  5. Java 常用API(二)

    目录 Java 常用API(二) 1. Object类 2. Date类 概述 构造方法和成员方法 3. DateFormat类 概述 SimpleDateFormat类 练习 4. Calendar ...

  6. Java | 个人总结的Java常用API手册汇总

    目录 常用API JavaAPI 1 java.lang String StringBuilder Integer parseXxx Math Object System Throwable Thre ...

  7. html5 canvas常用api总结(一)

    1.监听浏览器加载事件. window.addEventListener("load",eventWindowLoaded,false); load事件在html页面加载结束时发生 ...

  8. compass General 常用api学习[Sass和compass学习笔记]

    compass 中一些常用api 包括一些浏览器hack @import "compass/utilities/general" Clearfix Clearfix 是用来清除浮动 ...

  9. java基础3.0:Java常用API

    本篇介绍Java基础中常用API使用,当然只是简单介绍,围绕重要知识点引入,巩固开发知识,深入了解每个API的使用,查看JavaAPI文档是必不可少的. 一.java.lang包下的API Java常 ...

随机推荐

  1. CentOS7 内核参数优化

    # allow testing with buffers up to 128MBnet.core.rmem_max = 134217728net.core.wmem_max = 134217728# ...

  2. google搜索引擎使用方法

    搜索引擎命令大全!这是一个我最喜欢的Google搜索技巧的清单: link:URL = 列出到链接到目标URL的网页清单. related:URL = 列出于目标URL地址有关的网页. site:ht ...

  3. javascript必须知道的知识要点(二)

    该文章不详细叙述各知识要点的具体内容,仅把要点列出来,供大家学习的时候参照,或者检测自己是否熟练掌握了javascript,清楚各个部分的内容. 内建对象可划分为数据封装类对象.工具类对象.错误类对象 ...

  4. windows系统下nodejs安装、环境配置及删除NPM全局配置

    nodejs安装及设置NPM全局路径 删除NPM全局路径配置 一.nodejs安装及设置NPM全局路径 第一步:下载安装文件 下载nodejs,官网:http://nodejs.org/downloa ...

  5. python 11:range(起始索引,终止索引,步数)(默认情况下步数为1,生成从起始索引,每次增加(终止索引-起始索引)/步数,到终止索引前的数字串)

    squares = [] for value in range(1,11): #第三参数默认为1,生成从1开始,每次增加1步数,到11前的10为止的数字串 square = value ** 2 sq ...

  6. MySQL 的单表查询

    单表查询 语法: 一.单表查询的语法 SELECT 字段1,字段2 ,...FROM 表名 WHERE 条件 GROUP BY field HAVING 筛选 ORDER BY filed LIMIT ...

  7. B - Substrings Sort

    Problem description You are given nn strings. Each string consists of lowercase English letters. Rea ...

  8. sql 添加列并设置默认值

    ALTER TABLE tablsename ADD fieldname BIT NULL DEFAULT

  9. RabbitMQ 官方NET教程(四)【路由选择】

    在上一个教程中,我们构建了一个简单的日志记录系统. 我们能够广播日志消息给所有你的接收者. 在本教程中,我们将为其添加一个功能 - 我们将让日志接收者可以仅订阅一部分消息. 例如,我们将能够仅将关键的 ...

  10. 在mac上截屏的几种方式

    方法 1: 对屏幕的一部分进行截图 按下Command+Shift+4   方法 2: 对整个屏幕进行截图 按下Command+Shift+3   方法 3: 把截图保存到粘贴板 按下Command+ ...