一,反射是什么(反射是框架设计的灵魂)

1,JAVA反射机制是在运行状态中

对于任意一个类,都能够知道这个类的所有属性和方法;

对于任意一个对象,都能够调用它的任意一个方法和属性;

这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。

2,反射提供的功能:

  • 在运行时判断任意一个对象所属的类
  • 在运行时构造任意一个类的对象
  • 在运行时判断任意一个类所具有的成员变量和方法
  • 在运行时调用任意一个对象的方法

(要想解剖一个类,必须先要获取到该类的字节码文件对象(class)。而解剖使用的就是Class类中的方法.所以先要获取到每一个字节码文件对应的Class类型的对象.)

3,关于class对象和这个class类

  • Class对象的由来是将class文件读入内存,并为之创建一个Class对象

4,class类 :代表一个类,是Java反射机制的起源和入口

  • 用于获取与类相关的各种信息, 提供了获取类信息的相关方法
  • Class类继承自Object类

  • Class类是所有类的共同的图纸

  • 每个类有自己的对象,同时每个类也看做是一个对象,有共同的图纸Class,存放类的结构信息,能够通过相应方法取出相应的信息:类的名字、属性、方法、构造方法、父类和接口。

Class 类的实例表示正在运行的 Java 应用程序中的类和接口。也就是jvm中有N多的实例每个类都有该Class对象。(包括基本数据类型)
Class 没有公共构造方法。Class 对象是在加载类时由 Java 虚拟机以及通过调用类加载器中的defineClass 方法自动构造的。也就是这不需要我们自己去处理创建,JVM已经帮我们创建好了。

没有公共的构造方法,方法共有64个太多了。下面用到哪个就详解哪个吧


原文:https://blog.csdn.net/sinat_38259539/article/details/71799078

5,反射的使用场景

  • Java编码时知道类和对象的具体信息,此时直接对类和对象进行操作即可,无需反射
  • 如果编码时不知道类或者对象的具体信息,此时应该使用反射来实现

比如类的名称放在XML文件中,属性和属性值放在XML文件中,需要在运行时读取XML文件,动态获取类的信息
            在编译时根本无法知道该对象或类可能属于哪些类,程序只依靠运行时信息来发现该对象和类的真实信息

二,获取反射入口(class对象)的三种方法

要想操作反射,必须先拿到反射的入口

1,通过通过Class.forName("全类名")

try {Class<?> perClazz = Class.forName("reflect_fanshe.Person");System.out.println(perClazz);} catch (ClassNotFoundException e) {e.printStackTrace();}

2,类名.class

Class<?> perClazz2 = Person.class;

3,对象.getClass()

Person person = new Person();
Class<?> perClazz3 = person.getClass();

三,根据反射入口对象(class)获取类的各种信息

可以用一个类的反射入口class对象获取类的所有信息

  • 例1:perClazz.getMethods()  获取此类的所有public方法(父类的,实现接口的,自己的)
Class<?> perClazz = null;try {perClazz = Class.forName("reflect_fanshe.Person");} catch (ClassNotFoundException e) {e.printStackTrace();}Method[] methods = perClazz.getMethods();//遍历所有方法for (Method method : methods) {System.out.println(method);}}
  • 例2:获取所有的构造方法

  • 例3: 获取父类

  • 例4:获取当前类(只有本类的)的所有方法和属性,包括私有的

  •  重要:可以获取当前类的对象,并通过对象调用类的方法

四,通过反射获取对象的实例,并操作对象

1,class.newInstance() ,并强转类型,然后就可以操作对象了,主要是调用方法。

2,操作属性,可以操作类里面的public属性和private属性

如果属性是private,正常情况下是不允许外界操作属性值,这里可以用Field类的setAccessible(true)方法,暂时打开操作的权限

调用方法也一样,可以调用私有的方法,null是因为这个方法没有参数

五,在 程序执行中,动态的决定调用的类,以及方法

在本例中,程序执行之前,程序根本不知道具体的类和方法名是什么,需要执行时解析properties文件,但是反射就可以办到。

配置文件:

反射机制:

java反射原理-重要相关推荐

  1. java 反射获取属性名和值_面试官这样问我Java反射原理,我刚好都会

    上周我投递出了简历,岗位是java后端开发工程师.这周美团面试官给我进行了面试,面试过程中他问了Java的反射原理.(不得不夸一句,美团的效率真高,上午面完一面,晚上二面马上安排上了.) 无论什么Ja ...

  2. 面试官这样问我Java反射原理,我刚好都会

    上周我投递出了简历,岗位是java后端开发工程师.这周美团面试官给我进行了面试,面试过程中他问了Java的反射原理.(不得不夸一句,美团的效率真高,上午面完一面,晚上二面马上安排上了.) 无论什么Ja ...

  3. Java反射原理及应用

    Java反射原理及应用 概述 底层原理 类加载 反射.直接调用的区别 反射调用性能 反射慢本质 反射应用场景 应用示例 概述 JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性 ...

  4. java反射原理三种,Java反射的原理,作用

    什么是反射,反射原理 java类的执行需要经历以下过程 编译:.java文件编译后生成.class字节码文件 加载:类加载器负责根据一个类的全限定名来读取此类的二进制字节流到JVM内部,并存储在运行时 ...

  5. java反射原理三种,java反射的原理、作用

    1.什么是反射,反射原理java反射的原理:java类的执行需要经历以下过程,编译:.java文件编译后生成.class字节码文件 加载:类加载器负责根据一个类的全限定名来读取此类的二进制字节流到JV ...

  6. Java反射原理,注解原理?

    反射机制:在运行时(Run-Time),对于任何一个对象都知道其所有属性及方法,并能够调用. 反射原理:每一个类都有一个Class对象.所有类都是在第一次使用时,动态加载到JVM中,当程序创建第一个对 ...

  7. 深入浅出Java反射原理和使用场景

    反射非常重要,特别是Spring这类框架离不开反射,而反射对于初学者理解起来其实还是有一定的难度的,本帖希望把晦涩的反色用最易懂的方式给你讲明白. 先不说反射是什么先看一个问题:如果不知道对象的真实类 ...

  8. Java反射原理和实际用法

    背景 反射在Java中非常重要,是Java区别于其他编程语言的一大特性.Java中的AOP切面.动态代理等看起来像黑魔法一样的技术,就离不开反射.字节码等.这些技术能在不侵入原有代码的情况下,做一些增 ...

  9. Java反射原理理解

    导读 我们来看一下Oracle 官方文档中对反射的描述: 从Oracle 官方文档中可以看出,反射主要应用在以下几方面: 反射让开发人员可以通过外部类的全路径名创建对象,并使用这些类,实现一些扩展的功 ...

  10. Java交互界面实现计算器开发设计【附函数源码】,java反射原理hash

    在这里我们需要首先定义私有的全局变量来接收在计算器运行过程中的一些变量,如输入的数值.小数点.操作符.输出框内容.计算结果等,因此对于在计算器使用过程中可能出现的变量要对其进行一一接收.在这里我们使用 ...

最新文章

  1. 如何学好单片机编程?学好单片机的基础是什么?
  2. 你值得拥有!一个基于 Spring Boot 的API、RESTful API 的项目
  3. 在一个tomcat 里面 两个相同的项目不能同时运行??
  4. python try catch finally执行顺序_对python中的try、except、finally 执行顺序详解
  5. 计算机系学生mac,大学生选择苹果电脑之后的经验之谈
  6. ogm session_带有Hibernate OGM的NoSQL –第三部分:在WildFly上构建REST应用程序
  7. vue的transition组件的使用
  8. 行为设计模式 - 命令设计模式
  9. a lt b lt c c语言描述,《数据结构与算法分析――c语言描述》读后笔记 4
  10. 亚马逊要做一款会说话的智能眼镜,但看起来没那么性感
  11. 新裝win7虚拟机设置记录-20180909
  12. 关系网络理论︱细讲中介中心性(Betweeness Centrality)
  13. python测试之道电子书_python测试开发面试之深浅拷贝
  14. win10计算机管理字体糊,完美解决win10系统字体模糊
  15. Proxomitron之天涯只看规则
  16. vue全家桶指的是哪些?
  17. 在区块链底下,个人自由和隐私该如何生存?
  18. 基于Python的飞机票销售系统的设计和实现
  19. 中兴设备电话人工服务器,中兴刀片服务器 ATCA机柜 中兴 6008002200 网络服务器机柜...
  20. 【文献阅读】A2-Nets: Double Attention Networks

热门文章

  1. 人生若只如初见 成也IP败也IP
  2. Mock 及 Mockito 教程
  3. Cortex-M0 LPC11C14中断控制器
  4. Spring:一、Spring的发展史-“富二代”公司成就了一个Spring帝国?
  5. 使用python玩转二维码!速学速用!⛵
  6. html5 游戏性能,技术突破:HTML5裸跑性能已可媲美APP
  7. 无人机仿真—PX4编译,gazebo仿真及简单off board控制模式下无人机起飞
  8. Nacos在spring boot的使用
  9. 气质的培养教程(哈佛管理世界)
  10. git创建分支并切换分支命令