定义
反射机制是Java语言中一个非常重要的特性,它允许程序在运行时进行自我检查,同时也允许其对内部成员进行操作。由于反射机制能够实现在运行时对类进行装载,因此能够增加程序的灵活性,但是不恰当地使用反射机制,也会严重影响系统的性能。
具体而言,反射机制的主要功能主要有:①得到一个对象所属的类,②获取一个类的所有成员变量和方法,③在运行时创建对象,调用对象的方法。

反射机制的作用:
1,反编译:.class–>.java
2,通过反射机制访问java对象的属性,方法,构造方法等;

先看一下sun为我们提供了那些反射机制中的类:
java.lang.Class;
java.lang.reflect.Constructor; java.lang.reflect.Field;
java.lang.reflect.Method;
java.lang.reflect.Modifier;

很多反射中的方法,属性等操作我们可以从这四个类中查询。还是哪句话要学着不断的查询API,那才是我们最好的老师。

Class c=Class.forName(“Employee”);
Object o=c.newInstance(); 调用了Employee的无参数构造方法

方法关键字
getDeclareMethods() 获得所有的方法
getReturnType() 获得方法的返回类型
getParameterTypes() 获得属性的传入参数类型

构造方法关键字
getDeclaredConstructors() 获得所有的构造方法
getDeclaredConstructor(参数类型.class,……) 获得特定的构造方法

父类和父接口
getSuperclass() 获取某类的父类
getInterfaces() 获取某类实现的接口
这样我们就可以获得类的各种内容,从而进行反编译
反射机制获取类的方法有三种,我们分别展示如何获取Reflection包下的Student类

Class.forName(“类的路径”)
Class Student = Class.forName(“Reflection.Student”); //包名+类名
类名.class
Class Student = Reflection.Student.class;
类实例.getClass()
Student student = new Student(); Class Student =student.getClass();

Class类中的6个重要方法
1.getName()方法,返回一个String字符串,显示该类的名称。
1.System.out.println(Student.getName()); //输出: Reflection.Student
2.newInstance()方法, 由类调用该方法,根据该类的默认构造函数创建类的实例
Object o = Student.newInstance();
3.getClassLoader()方法,返回该类对象的对应的加载器。

4.getComponentType()方法,返回类的组件类型的数组,如果这个类并不代表一个数组类,此方法返回null。
5.getSuperClass()方法,返回某子类所对应的直接父类所对应的Class对象。
6.isArray()方法,判定此Class对象所对应的是否是一个数组对象。

反射机制获取类的方法
获取类的构造方法
getDeclaredConstructors() //获取类的所有构造方法
getDeclaredConstructor(参数类型.class,……) //获取特定的构造方法

获取类的普通方法
getDeclaredMethods() //获取所有普通方法
getDeclaredMethod(“方法名”,参数类型.class,……) //获取指定名称的方法
getReturnType() //获取方法的返回类型
getParameterTypes() //获得方法的传入参数类型

new 创建对象,是静态加载类,在编译时刻就需要加载所有可能使用到的类

通过动态加载类可以解决该问题。通过类类型创建该类的对象
1、静态加载类,是编译时刻加载;动态加载类,是运行时刻加载
2、new创建对象:是静态加载类,在编译时刻就需要加载所有的【可能使用到的类】。有一个类有问题(如不存在),都不能通过编译,会报错。
3、Class.forName()通过动态加载类,可以用到一个类时,才进行加载。

什么是反射机制?反射机制有什么作用?相关推荐

  1. Java程序员从笨鸟到菜鸟之(八)反射和代理机制

    反射和代理机制是JDK5.0提供的Java新特性,反射的出现打破了java一些常规的规则,如,私有变量不可访问.但反射和代理在学习过程中也是一个比较难理解的知识点.本人曾经学过一段时间的反射和代理,但 ...

  2. Java反射机制的基本概念与使用_Java进阶之reflection(反射机制)——反射概念与基础...

    反射机制是Java动态性之一,而说到动态性首先得了解动态语言.那么何为动态语言? 一.动态语言 动态语言,是指程序在运行时可以改变其结构:新的函数可以引进,已有的函数可以被删除等结构上的变化.比如常见 ...

  3. java 内省机制_Java反射与内省机制总结

    Class对象封装了一个java类定义的成员变量.成员方法.构造方法.包名.类名等. 2.反射怎么用 1).获得java类的各个组成部分,首先需要获得代表java类的Class对象 获得Class对象 ...

  4. Java反射机制(反射Field,Method,Constructor,资源绑定器)

    目录 反射机制 1.反射机制的作用 2.反射机制的相关类在哪个包下 3.反射机制的相关类有哪些 获取Class的三种方式 通过反射实例化对象 通过读属性文件实例化对象 只让静态代码块执行可以使用for ...

  5. java 反射应用_java反射(二)--反射应用案例

    一.反射实例化对象 经过一系列的分析之后发现虽然可以获取Class类的实例化对象,但是依然觉得这个对象的获取意义不是很大,因此可以通过以下几个案例去理解反射的核心意义 --反射实例化对象:获取Clas ...

  6. 『设计模式』反射,反射程序员的快乐!为什么我老是加班?为什么我工资不如他多?原来是我不懂反射!

    23种设计模式+额外常用设计模式汇总 (持续更新) Java是一门准动态语言,是因为存在反射机制,如果你不会是不是就等于白学了? 看完不会,请评论,我亲自给你解释,嘻嘻! 什么是动态语言? 动态语言, ...

  7. 【重难点】【Java基础 05】说一说你平时遇到的异常、什么情景下会用到反射、反射的底层原理

    [重难点][Java基础 05]说一说你平时遇到的异常.什么情景下会用到反射.反射的底层原理 文章目录 [重难点][Java基础 05]说一说你平时遇到的异常.什么情景下会用到反射.反射的底层原理 一 ...

  8. 面试题总结——如何理解反射(“反射”八问)

    面试题总结--如何理解反射("反射"八问)   1.Java的反射机制到底是什么?   Java反射机制是指:在运行状态中,对于任意一个类,可以动态的创建类的对象,对于任意一个对象 ...

  9. java中的反射原理,为什么要使用反射以及反射使用场景(面试常问)

    java中的反射原理,为什么要使用反射以及反射使用场景     什么是反射 反射是框架的灵魂 JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够 ...

  10. 简述什么是反射以及反射的使用

    一.什么是反射 在了解反射之前我们需要先简单来了解一下类加载的过程 在类加载的过程中,第一步JVM(JAVA虚拟机)将A.class文件读入内存方法区,第二步JVM为A.class创建唯一的Class ...

最新文章

  1. oracle Database 10g后:闪回表
  2. 【原理+实战+视频+源码】手撸SpringBoot缓存系统
  3. PAT甲级1038 Recover the Smallest Number (30 分):[C++题解]贪心、排列成最小的数、字符串
  4. Mq安装服务器文件传输,RabbitMQ学习:安装RabbitMQ及RabbitMQ的初步配置(一)
  5. 计算机语言中空下划线,2017-7-31 Shell脚本编程基础
  6. Linux下各种常见环境变量的配置
  7. Openstack的镜像上传原理
  8. 自定义ContentProvider的一些细节探究
  9. JSP手机商城系统设计网站
  10. ubuntu16.04下ROS操作系统学习笔记(二)命令工具了解和仿真小海龟
  11. eclips 创建 maven项目
  12. html小任务,编写表单里的各项元素
  13. VSCODE添加open with code功能,实现右键打开文件夹
  14. 资源环境承载力和国土空间开发适宜性之水环境容量评价
  15. Mac下驱动BCM20702A0 USB蓝牙
  16. 37、测试Yolox+TensorRT Yolox+NCNN Yolox+Tengine
  17. c# .net iot树莓派/香橙派用到物联网包Iot.Device.bindings 支持设备说明文档
  18. QT QElapsedTimer QDeadlineTimer 计算已用时间的方法
  19. 三菱工控板底层源码_新版本STM32三菱FX2N PLC底层 源码 原理图 支持GXDeveloper
  20. 信息安全服务资质:CCRC认证审核流程说明

热门文章

  1. 脂肪秤方案中测脂模块如何实现BIA测量法功能?
  2. 【醒悟】揭露炸鸡鸭背后的真相:一位良心发现者的自白
  3. 知识付费小程序源码可开激励广告流量主+虚拟资源变现+附带视频教程
  4. 你真的知道Win 10中注销、睡眠、休眠的区别么?
  5. ticklength
  6. C语言实现大整数乘法
  7. 安装Cpython解释器(day02)
  8. 第五天 01-ftp服务器使用及arp欺骗获取ftp账号密码
  9. 你觉得学 Python 还是 Java 更好找工作?
  10. FusionCharts 的刷新