Class对象

当ClassLoader加载一个class文件到JVM的时候,会自动创建一个该类的Class对象,并且这个对象是唯一的,后续要创建这个类的任何实例,都会根据这个Class对象来创建。因此每当加载一个class文件的时候,都会创建一个与之对应的Class对象。

加载:就是指将class文件读入内存,并为之创建一个Claass对象。

任何类被使用时系统都会建立一个Class对象

反射

反射是指在程序的运行期间动态的去操作某个Class对象里面的成员(包括类信息、属性信息、方法信息等元素)。它可以让Java这种静态语言具备一定的动态性。目前大部分的开源框架实现都是基于反射的机制实现。

获取class对象

获取Class对象有以下3种方式:
1) Class.forName("完整类名");
2)类名.class
3) 对象.getClass()
(注意:这三种方式获取的都是同一个Class对象)

反射:就是通过class文件对象,去使用该文件中的成员变量,构造方法,成员方法。

要想这样使用,首先你必须得到class文件对象,其他也就是得到Class类的对象

Class类:

成员变量:Field

构造方法:Constructor

成员方法:Method

获取代参

通过反射运行配置文件内容

创建对象

创建对象
普通创建对象的方法
1) People p = new People();

使用反射机制来创建一个实例 
2) Class<?> clazz = Class.forName("org.demo.People");
    clazz.newInstance();

动态操作属性

通过Class对象可以动态的获取和操作类中的属性,属性在JDK中有一个类来进行封装,就是Field
Field提供了一些常用的API方法让我们去访问和操作类中的属性

反射的字段可能是一个类(静态)字段或实例字段。
getField() //获取所有公开的属性字段(包括继承父类的公有属性)

返回一个Field对象,,它反映此class对象所表示的类或接口的指定

公共成员字段。Name参数是一个String,用于指定所需字段的简称
getDeclaredField() //获取本类所有(包括公有和私有,但是不包括父类的)的属性字段

(注意:如果要访问和操作私有属性,必须调用setAccessible方法,打开访问开关)

返回一个Filed对象,该对象反映此Class对象表示的类或接口的指定已声明字段。Name参数是一个String,它指定所需字段的简称。

注意,此方法不反映数组类的length字段。

getFields() //获取所有公有的属性(包括继承自父类的公有属性)

getDeclaredFields() //获取本类所有的属性(包括共有和私有的,但是不包括父类的)

返回Filed对象的一个数组,这些对象反映此class对象所表示的类或接口

所声明的所有字段。包括公共、保护、默认(包)访问和私有字段。

set() //给属性赋值,需要传入两个参数,第一个参数是当前类的一个实例,第二个参数是具体要赋予的值
get() //获取属性的值,需要传入一个当前类的实例作为参数
getName() //获取属性的名称
getType() //获取属性的类型
isAnnotationPresent() //判断该属性上是否定义了指定的注解,需要传入一个注解的Class对象作为参数
getAnnotation() //获取当前属性上的注解对象,需要传入一个注解的Class对象作为参数

最新文章

  1. servlet请求转发、包含以及重定向
  2. sql统计重复数据
  3. CISCO3560 VLAN配置实例
  4. 《算法导论》习题解答 Chapter 22.1-2(邻接矩阵与链表)
  5. javaweb 中的乱码问题
  6. Extjs嵌入html
  7. iOS动画案例(2) 仿网易新闻标题动画
  8. 各种API总结大全 JAVA、HTML、HTML5等等
  9. 关于makefile中变量的多次赋值以及override指令
  10. NOI导刊2010提高装备运输
  11. Python内置函数(26)——enumerate
  12. FICO-初级会计学
  13. MybatisMapper 动态映射(增删改查)
  14. 10进制 VS 2进制
  15. 我的IT之路这样走过
  16. 《FPGA全程进阶---实战演练》第七章 让按键恢复平静
  17. promise的理解和应用
  18. iOS 中nil,Nil,NULL,NSNull的区别
  19. 使用scrapy-redis构建简单的分布式爬虫
  20. Go 语言中的 Http 路由基础

热门文章

  1. 转 strace
  2. 如何自定义Flask中的响应类
  3. Cacti监控Centos抓包unreachable - admin prohibited
  4. 在Excel中将数字转换为大写
  5. CM添加kafka服务
  6. ie8用ajax访问不能每次都刷新的问题
  7. OS X升级El Capitan后,git difftool无法打开diffmerge的解决方法
  8. openlayers优化项
  9. CocoaPods安装记录
  10. 用php怎么改文件名