一句话概括就是使用反射可以赋予jvm动态编译的能力,否则类的元数据信息只能用静态编译的方式实现,例如热加载,Tomcat的classloader等等都没法支持

Java中编译类型有两种:

静态编译:在编译时确定类型,绑定对象即通过。

动态编译:运行时确定类型,绑定对象。动态编译最大限度地发挥了Java的灵活性,体现了多态的应用,可以减低类之间的耦合性。

Java反射是Java被视为动态(或准动态)语言的一个关键性质。这个机制允许程序在运行时透过Reflection APIs取得任何一个已知名称的class的内部信息,包括其modifiers(诸如public、static等)、superclass(例如Object)、实现之interfaces(例如Cloneable),也包括fields和methods的所有信息,并可于运行时改变fields内容或唤起methods。

Reflection可以在运行时加载、探知、使用编译期间完全未知的classes。即Java程序可以加载一个运行时才得知名称的class,获取其完整构造,并生成其对象实体、或对其fields设值、或唤起其methods。

反射(reflection)允许静态语言在运行时(runtime)检查、修改程序的结构与行为。

在静态语言中,使用一个变量时,必须知道它的类型。在Java中,变量的类型信息在编译时都保存到了class文件中,这样在运行时才能保证准确无误;换句话说,程序在运行时的行为都是固定的。如果想在运行时改变,就需要反射这东西了。

实现Java反射机制的类都位于java.lang.reflect包中:

1、Class类:代表一个类

2、Field类:代表类的成员变量(类的属性)

3、Method类:代表类的方法

4、Constructor类:代表类的构造方法

5、Array类:提供了动态创建数组,以及访问数组的元素的静态方法

* 对于修改静态常量类型是需要小心

对于基本类型的静态常量,JAVA在编译的时候就会把代码中对此常量中引用的地方替换成相应常量值

* 参考阅读

http://www.imooc.com/learn/199

https://blog.csdn.net/u010832551/article/details/74202467

http://wiki.jikexueyuan.com/project/java-reflection/jave-guide.html

JAVA中的糕富帅技术——反射(一)

前言 突然发现好久没写博客了,前面写的都是关于Android的东西,今天心血来潮突然有一种冲动想写一篇基于JAVA技术的博客,别问我为什么?有钱.任性! 今天就来谈谈反射机制:学过JAVA的人不一定懂 ...

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

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

Java中通过Class的反射来获取方法

本文转自:http://z3sm2012.iteye.com/blog/1933227 今天在程序中用到java反射机制时,遇到的问题记录一下:我当时遇到的问题是,我用反射getMethod()调用类 ...

java中的泛型与反射

在java开发中,大多数情况是多人开发,那么如何在没有API的情况下,快速的理解到别人开发的一些类的详细信息呢? 比如函数名,类名,返回参数等等 我们可以定义一个反射机制的类,通过此类来打印此你想要操 ...

Java中关于OOM的场景及解决方法

java为什么要用反射_Java中为什么需要反射?反射要解决什么问题?相关推荐

  1. java初反射_java中的反射机制

    前言: ​相信很多人都知道反射可以说是Java中最强大的技术了,它可以做的事情太多太多,很多优秀的开源框架都是通过反射完成的,比如最初的很多注解框架,后来因为java反射影响性能,所以被运行时注解AP ...

  2. java注解和反射原理_Java中的注解和反射

    最近又回顾了一下 Java 中的注解和反射知识点,注解在日常开发中使用很多,但是反射比较少.值得注意的是 Java 的各种框架底层源码中大量使用了注解和反射,阅读源码,这些是基本功,面试中这部分内容也 ...

  3. java boolean几个字节_Java中boolean类型到底占用多少个字节?

    1.时间:2017-07-03 07:37:06YuanMxy 2.问题描述:今天在复习java基础的时候发现一小问题,Java中boolean类型到底占用多少个字节? 3.问题解答: (1)什么是b ...

  4. java 基本类型的引用_Java中的基本数据类型与引用数据类型

    一.基本数据类型 byte.short.int.long(整数类型) float.double(浮点数类型) char(字符型) boolean(布尔类型 ) Java数据大多数存放在堆栈中.栈区:存 ...

  5. java常见的报错_Java中常见的错误有哪些?

    原标题:Java中常见的错误有哪些? 1.java.lang.Error 错误.是所有错误的基类,用于标识严重的程序运行问题.这些问题通常描述一些不应被应用程序捕获的反常情况. 原因: 1.对系统所访 ...

  6. java i 线程不安全_java中的++i是线程安全的吗?

    java中的++i是线程安全的吗?为什么?怎么使它线程安全呢? 先说答案: 非线程安全 先说下为什么是非线程安全的? 从Java内存模型说起 Java内存模型规定了所有的便利都存储在主内存中,每个线程 ...

  7. java原始类型和引用类型_Java中的8种原始类型

    java原始类型和引用类型 几年前,当我开始编辑Java Basics系列时,我认为将一些非常详细的信息拉到自己的帖子中是很有意义的. 这样,初学者的内容就更容易消化了. 首先,我将介绍有关Java的 ...

  8. java如何使截取字符串_java中如何截取字符串中的指定一部分

    java中如何截取字符串中的指定一部分 关注:136  答案:4  mip版 解决时间 2021-02-06 13:27 提问者妳涐執唸汰深 2021-02-06 08:56 精选 比如 F:\wor ...

  9. 随机数在java 自旋锁的运用_Java 中自旋锁的实现

    Java中初始是使用mutex互斥锁,因为互斥锁是会线程等待挂起,而对获取锁后的操作时间比较短暂的应用场景来说,这样的锁会让竞争锁的线程不停的park,unpark 的操作,这样的系统的调用性能是非常 ...

最新文章

  1. 【PAT (Basic Level) 】1030 完美数列 (25 分)
  2. ssh 远程登陆异常SSH_EXCHANGE_IDENTIFICATION及解决过程
  3. Deleted表用于存储DELETE和UPDATE语句所影响的行的复本
  4. Daily Scrum 10.26
  5. 带预览图的js切换效果!
  6. oracle 事务测试
  7. 单体预聚合的目的是什么_高分子化学实验指导书-修改-2012
  8. linux两个卷组可以合并,Linux系统中所有的逻辑卷必须属于同一个卷组()。
  9. java 标题栏_如何更改java应用程序标题栏默认图标
  10. 产品经理职场面试35个经典问题
  11. UNI-APP_微信授权失败 微信授权第一次失败,需要授权两次才能成功
  12. 计算机应用基础自主学习,计算机应用基础教学中如何培养学生的自主学习能力...
  13. open连接MySQL超时_mysql5 超时链接
  14. github上有哪些好用的vba代码库
  15. 后台管理系统(第一天)
  16. 随机梯度下降matlab,matlab随机梯度下降法
  17. matlab应力分析,MATLAB有限元分析与应用概述.ppt
  18. code:block17.12汉化
  19. 盘点互联网大佬背后的女人,最后一个你肯定认识
  20. 前端上传文件或者上传文件夹

热门文章

  1. [課程筆記] 機器學習2021(李弘毅) L29.概述增強式學習(一)
  2. 华为鸿蒙os用时间长了会卡吗,外媒再放狠话!华为鸿蒙OS系统和安卓没区别:同样也会越用越卡顿...
  3. otherwise 的用法
  4. Matlab中switch_case_otherwise语句详解
  5. 光引发剂主要用途_可见光引发剂的应用
  6. 346雷达有多少tr组件_346A型有源相控阵雷
  7. 关于大数据的八大热点问题
  8. 冯诺依曼体系结构及操作系统(OS)的简单认识
  9. python批量循环图片识别_批量识别图中文字自动命名,让你1秒找到骚图
  10. 用imspost制作catia后处理_基于IMS POST五轴海德汉系统后处理的开发