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对象作为参数

Class对象即反射的更多相关文章

  1. java中复制对象通过反射或序列化

    在使用缓存读取数据后修改发现缓存被修改.于是找了下复制对象的方法. 关于对象克隆 按我的理解,对象是包含引用+数据.通常变量复制都是将引用传递过去.比如: Person p1 = new Person ...

  2. Java基础 -- 深入理解Java类型信息(Class对象)与反射机制

    一 RTTI概念 认识Claa对象之前,先来了解一个概念,RTTI(Run-Time Type Identification)运行时类型识别,对于这个词一直是 C++ 中的概念,至于Java中出现RT ...

  3. xml 转换成对象(采用反射机制对对对象属性赋值)

    /// <summary> /// 采用反射机制对对对象属性赋值 /// </summary> /// <param name="node">& ...

  4. python------面向对象进阶反射详解(重点)

    一.反射 通过字符串映射或者修改程序运行时的状态,属性,或者方法. 1.getattr(object,name,default=None) 2.hasattr(object,name) 3.setat ...

  5. Class对象、反射机制、获取Constructor构造方法

    1.Class对象的三种创建方法(Class首字母大写) public class Demo { public static void main(String[] args){ Object obj= ...

  6. python全栈开发day23-面向对象高级:反射(getattr、hasattr、setattr、delattr)、__call__、__len__、__str__、__repr__、__hash__、__eq__、isinstance、issubclass

    一.今日内容总结 1.反射 使用字符串数据类型的变量名来操作一个变量的值. #使用反射获取某个命名空间中的值, #需要 #有一个变量指向这个命名空间 #字符串数据类型的名字 #再使用getattr获取 ...

  7. Java基础之深入理解Class对象与反射机制

    深入理解Class对象 RRIT及Class对象的概念 RRIT(Run-Time Type Identification)运行时类型识别.在<Thinking in Java>一书第十四 ...

  8. Class对象和反射

    1.class对象在java中一切都是对象,从某种意义上,java中的对象可以分为:实例对象和Class对象.实例对象通过new关键得到,那么Class对象呢?Class对象无法通过new关键字获取, ...

  9. PHP的序列化、对象、反射、异常与错误

    1. 怎么理解php里面的序列化与反序列化? 序列化是将对象转换为字节流.反序列化就是将流转换为对象. 这两个过程结合起来,可以轻松地存储和传输数据,在网络中可以做到跨平台.快速传输. 两种序列化方式 ...

随机推荐

  1. ubuntu 安装redis两种方式 教程

    方式一: 下载地址:http://redis.io/download,下载最新文档版本. 本教程使用的最新文档版本为 2.8.17,下载并安装: $ wget http://download.redi ...

  2. FastDFS文件系统(二) fastdfs和其他文件系统区别

    FastDFS文件系统(二) fastdfs和其他文件系统区别 一.概述 普通存储方案:Rsync.DAS(IDE/SATA/SAS/SCSI等块).NAS(NFS.CIFS.SAMBA等文件系统). ...

  3. Linux下搭建SVN服务器及自动更新项目文件到web目录(www)的方法

    首先搭建SVN服务器 1,安装SVN服务端 直接用apt-get或yum安装subversion即可(当然也可以自己去官方下载安装) sudo apt-get install subversion   ...

  4. [转]CAP原理与最终一致性 强一致性 透析

    在足球比赛里,一个球员在一场比赛中进三个球,称之为帽子戏法(Hat-trick).在分布式数据系统中,也有一个帽子原理(CAP Theorem),不过此帽子非彼帽子.CAP原理中,有三个要素: 一致性 ...

  5. html 学习资料列表

    HTML 教程 HTML 简介 html div 标签介绍 html span 标签介绍 html a 超链接标签 HTML Br换行标签介绍 HTML P段落标签介绍 HTML br与p标签区别 H ...

  6. unity 读取文本与写入文本

    void writeData(string str,string file)    {        string parth = Application.dataPath;        Strea ...

  7. MySQL Workbench “Error Code: 1175” 的解决方法

    转自:http://www.linuxidc.com/Linux/2012-04/59333.htm 当用MySQL Workbench进行数据库的批量更新时,执行一个语句会碰到以下错误提示: Err ...

  8. gulp.js基础入门

    安装 Node 去 nodejs.org 根据系统选择性按照教程安装Node. 创建项目 创建项目文件夹 进入项目文件夹 初始化项目 使用npm命令:npm init,根据提示完成. 安装 Gulp ...

  9. 这些年正Android - 大学

     还记得,第一次看见小周是在大一的操场上. 她正向教学楼站着,一身白配粉的休闲上衣搭配湖蓝色的牛仔裤,穿着一双很平凡的凉鞋,手里拿着当年的Nokia 3110c,皙清的手指,素颜的站着不言不笑.现在回 ...

  10. 共享onload事件

    在做前端工作中,我们想要设置某个函数prepare,让它在网页加载完毕后执行,会触发一个onload事件,这个事件与windows对象相关联,必须把prepare函数绑定到这个时间上,语法如下:win ...