栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

2021-10-22

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

2021-10-22

JAVA反射机制

文章目录
    • JAVA反射机制
      • 一. 反射的定义
      • 二. 反射机制用处
      • 三. 反射的实现方式有哪些
      • 四. 实现Java反射的类
      • 五. 关于class对象和这个class类
      • 六. class类 :代表一个类,是Java反射机制的起源和入口
      • 七. 反射机制的优缺点

一. 反射的定义

首先我们得知道什么是java反射机制,所谓反射机制就是在运行的时候,可以获取一个类中的所有属性和方法,也可以调用一个对象的任意方法 。在java中,给定一个类名,就能通过反射机制获取到类的所有信息。简单来说 是java语言种的一种机制,可以通过这种机制动态的实例化对象,读写属性,调用方法

二. 反射机制用处

1.通过反射机制可以访问java对象的属性,方法,构造方法等

2.当我们使用IDE ( 如 EclipseIDEA) 时 输入一个对象或者类,并想调用他的属性和方法时,一按 . 点号,编译器就会自动列出它的属性或者方法

3 反射机制最重要的是开发各种通用框架,为了保证框架的通用性,他们可能需要根据配置文件加载不同的类或者对象,调用不同的方法,这个时候就必须使用到反射了,运行时动态加载需要的加载的对象。

加载数据库驱动的jdbc就是典型的反射

Class.forName(‘com.mysql.jdbc.Driver.class’);//动态加载MySQL的驱动类

还有hibernate,Struts等框架使用反射实现的

三. 反射的实现方式有哪些

获取Class对象的4种方法:

1.Class.forName(“完整类名”)
2.类名.class
3.对象名.getClass()
4.基本类型的包装类,可以调用包装类的Type属性来获得该包装类的Class对象

注1:ClassNotFoundException (类名错误/少jar包)
注2:同一类,类对象只会在JVM加载一次

四. 实现Java反射的类

1.Class:表示正在运行的Java应用程序种的类和接口
2.Field:提供有关类和接口7的属性信息,以及对它的动态访问权限
3.Constructor:提供关于类的单个构造方法信息以及它的访问权限
4.Method:提供类或接口某个方法信息
5.Modifier:访问修饰符

五. 关于class对象和这个class类
  • Class对象的由来是将class文件读入内存,并为之创建一个Class对象
    -

对于类加载机制与双亲委派模型感兴趣的小伙伴可以阅读这篇文章:https://blog.csdn.net/a745233700/article/details/90232862

六. 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

七. 反射机制的优缺点

优点:

  1. 可以动态获取类的实例,提高灵活性
  2. 与动态编译结合

缺点:
1)性能较低,需要通过解析字节码,解析内存中的对象
解决的方法:

  1. 通过setAccessible(true)关闭JDK的安全检查来提升速度
  2. 多次创建一个类的实例,有缓存速度快一些
  3. ReflectASM工具,通过字节码生成的方式加快反射速度

2)相对不安全,破坏了封装性(通过反射可以获取私有方法和属性)

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/343105.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号