>Class类:反射的根源

>1.Object class,是所有的Java classes的继承根源,

其内声明了数个应该在所有Java class中被改写methods:hashCode()、equals()、clone()、toString()、getClass()等。

其中getClass()返回了一个 Class object

>2.小插曲:为什么重写hashCode()和重写eauqls()要同时进行?

>3.Class class

  • Class class十分特殊。它和一般classes一样继承自Object,其实体用以表达Java程序运行时的classes和interfaces,也用来表达enum、array、primitive Java types(8个)
  • (boolean, byte, char, short, int, long, float, double)以及关键词void
  • 当一个class被加载,或当加载器(class loader)的defineClass()被JVM调用,JVM 便自动产生一个Class object。如果想借由“修改Java标准库源码”来观察Class object的实际生成时机(例如在Class的constructor内添加一个println())不能够!因为Class并没有public constructor
  • 换句话说,不能new!Class是通过Java虚拟机通过内部机制new出来实例,并且去执行的
  • Class是Reflection的起源。针对任何想要探勘的class,唯有先为它产生一个Class object,接下来才能经由后者唤起数十多个的Reflection APIs

>4.Class 对象取得途径:

Java允许多种方式为一个class生成对应的Class object,不管一个Java类生成多少个对象,这些对象所对应的Class对象只有唯一的一个。

注意:

  • 调用Object class 对应的Class对象的getsuperclass()会返回null(再往上,null调用任意方法都会抛空指针异常)
  • 最后的方式,对于原生的8种类型,使用.class语法,包装类型,使用.TYPE语法

>5.运行时生成instances

欲生成对象实体,在Reflection 动态机制中有两种作法,一个针对“无自变量ctor”,一个针对“带参数ctor”。如果欲调用的是“带参数ctor“就比较麻烦些,不再调用Class的newInstance(),而是调用Constructor 的newInstance()。首先准备一个Class[]做为ctor的参数类型(本例指定为一个double和一个int),然后以此为自变量调用getConstructor(),获得一个专属ctor。接下来再准备一个Object[] 做为ctor实参值(本例指定3.14159和125),调用上述专属ctor的newInstance()。

不含参数构造(省略了构造步骤):

含参数构造(先获取相应的构造器,再用构造来生成对象,这种方式是通用的):

>6.运行时调用methods

这个动作和上述调用“带参数之ctor”相当类似。首先准备一个Class[]做为参数类型(本例指定其中一个是String,另一个是Hashtable),然后以此为自变量调用getMethod(),获得特定的Method object。接下来准备一个Object[]放置自变量,然后调用上述所得之特定Method object的invoke()。
为什么获得Method object时不需指定回返类型?因为方法重载不包含返回值,只包含名字和返回值构成方法签名,来唯一标识一个方法。

>7.运行时变更fields内容

首先调用Class的getField()并指定field名称。获得特定的Field object之后便可直接调用Field的get()和set()

最后,关于一些反射方法调用时,我们会发现传入了某个对象的引用,这是因为一个类可能生成多个不同的实例,当调用成员或者成员方法时,可能会得到不同的结果,所以我们必须要指定获取哪一个对象里的成员或者成员方法的执行。

Java 反射(Class class相关)相关推荐

  1. Java 反射(Array相关)

    >使用Array的静态方法 动态创建一维数组 public class ArrayTester1 {/*** java.lang.reflect.Array类 提供了动态创建和访问数组的 各种静 ...

  2. java 7 反射_【7】java 反射详解

    [7]java 反射详解 获取Class对象的方式: 1. Class.forName("全类名"); 将字节码加载进内存,返回Class对象,多用于配置文件,将类名定义在配置文件 ...

  3. 安卓逆向-new-sec6-4 Java反射相关知识以及平头哥框架hook构造函数 | App发布测试版本感染

    反射机制 app加上这个属性,也能发布测试版本,被成功感染,无需签名和发布那个release版本 APP是E:\1A_androidstudio_project\course4 插件是E:\1A_an ...

  4. Java反射机制基本概念与相关Class类对反射机制的实现

    Java反射机制 1.何为反射 2.反射作用 3.Class类实例化应用 3.1.进行Class类对象的实例化的三种方式 3.2.Class类实例化其他类对象的两种方式 3.2.1.调用newInst ...

  5. Java 反射 (快速了解反射)

    反射的概念 JAVA反射机制是在运行状态中,对于任意一个实体类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意方法和属性:这种动态获取信息以及动态调用对象方法的功能称为java ...

  6. java 获取 反射 方法 名_乐字节Java反射之一:反射概念与获取反射源头Class

    一.Java反射机制概念 "程序运行时,允许改变程序结构或变量类型,这种语言称为动态语言",如Python, Ruby是动态语言:显然C++,Java,C#不是动态语言,但是JAV ...

  7. Java反射(详述版)

    一.什么是反射? 我们先来看一个例子: package venus; public class Student {public String name;public Student(){System. ...

  8. java 反射 动态代理

    在上一篇文章中介绍Java注解的时候,多次提到了Java的反射API.与javax.lang.model不同的是,通过反射API可以获取程序在运行时刻的内部结构.反射API中提供的动态代理也是非常强大 ...

  9. Java反射机制分析指南

    一.JAVA是动态语言吗? 一般而言,说到动态言,都是指在程序运行时允许改变程序结构或者变量类型,从这个观点看,JAVA和C++一样,都不是动态语言. 但JAVA它却有着一个非常突出的动态相关机制:反 ...

  10. 反射 字段_详解面试中常考的 Java 反射机制

    反射(Reflection) 是 Java 程序开发语言的特征之一,它允许运行中的 Java 程序对自身进行检查,或者说"自审",并能直接操作程序的内部属性和方法. 反射是一项高级 ...

最新文章

  1. 如何二值图转化为灰度图_木工真空吸附雕刻机如何用精雕5.21把精雕图模型转为灰度图...
  2. numpy.concatenate详解
  3. css清除浮动的几种方法_CSS--清除浮动
  4. 我的世界源代码python_用Python写的游戏《我的世界》 还原初代世界
  5. clickhouse建库_ClickHouse高性能数据库
  6. mysql5.6允许远程服务器访问数据库
  7. fwrite函数Matlab,fread和fwrite函数,C语言fread和fwrite函数详解
  8. TOMCAT开放远程调试端口
  9. Mysql学习总结(63)——Mysql数据库架构方案选择与分析
  10. 【汇编优化】ARM Intrinsic优化
  11. 你值得收藏:这个免费AI可以神奇拯救低分辨率照片
  12. 基于java的客户关系管理系统的设计与实现(论文+毕业设计)(完整源码可演示)
  13. MM-DD-RRRR / MM-DD-YYYY 的区别【Blog 搬家】
  14. 令人迷惑的scp路径
  15. 用Python来玩微信小游戏跳一跳
  16. linux 读卡器信息,Linux如何使用笔记本自带的SD/MMC读卡器
  17. 云服务器SNAT访问互联网
  18. 微信公众号开发--微信消息可以直接点击,然后请求中控服务器获取数据
  19. 安卓10 charles抓Https包 和 配置
  20. 第二银河找不到更新服务器,第二银河可以挂机吗?挂机设置步骤一览

热门文章

  1. 40张图全面解析TCP 三次握手和四次挥手
  2. springboot整合Apollo
  3. 搭建 ELK 问题排查
  4. solr集群搭建,zookeeper集群管理
  5. 《SSM框架实战》 整合 Freemarker
  6. Chapter 3 Phenomenon——13
  7. 网友评论:Struts漏洞为什么来势凶猛
  8. C++类的前向声明的学习
  9. 宽容随和 不失勤恳 充满信心--对工作、生活的一些感悟
  10. 夏天快到了,教你怎样干掉讨厌的蚊子『转』