java的反射机制

什么是反射技术

1.Java反射机制的核心是在程序运行时动态加载类并获取类的详细信息,从而操作类和对象的属性和方法。本质时JVM获取到class对象之后,在通过class对象进行反编译,从而获取对象的各种信息

2.Java属于先编译在运行的语言,程序中对象的的类型在编译期就确定下来了,而当程序在运行时可能需要动态加载某些类,这些类可能之前用不到所以没有加载到jvm。通过反射,可以在运行时动态地创建对象并调用其属性,不需要提前在编译期知道运行的对象是谁。

3.Java反射机制可以动态方式获取到class相关信息 class中的成员方法、属性,反射技术灵活调用方法或者给我们的成员属性赋值 class.forName初始化我们的对象(创建我们的对象)

简单回顾下双亲委派机制

1.启动(bootstrap)类加载器:加载JVM自身工作需要的类,它由JVM自己实现。他会加载$JAVA_HOME/jre/lib下的文件 底层时c语言事件的

2.扩展(Extension)类加载器:它是JVM的一部分由sun.misc.LauncherExtClassLoader实现,他会加载ExtClassLoader实现 他会加载JAVA_HOME/jre/ext目录中的文件(或者由System.getProperty(“java.ext.dirs”)所指定的文件)底层是Java实现

3.应用 (AppClassLoader)类加载器:应用类加载器,我们工作中接触的最多的就是这个类加载器,他由sun.misc.Launcher AppClassLoader实现。它加载我们工程目录classpath下的class以及jar包底层Java实现

4.自定义类加载器:也就是用户自己定义的类加载器

反射技术的原理

在这里插入图片描述

反射的优缺点

优点:
在运行的时候获取各种内容,进行反编译,对Java这种先编译在运行的语言。能够让我们很方便灵活的创建代码,这些代码可以在运行时装配,无需在组件之间进行源代码的链接,更加容易实现面向对象

缺点:
1.反射会消耗掉一定的系统资源,因此不需要动态的创建一个对象,那么就不需要反射;
2.反射调用方法时可以忽略权限检查,因此可能会被破坏封装性而导致安全问题

反射机制运用的场景

1.JDBC Class.forName(“com.mysql.jdbc.Driver”)反射技术加载mysql驱动
2.Spring底层基于反射初始化对象
3.(写一套自己)第三方框架扩展功能 代理设计模式反射技术

反射机制核心类

Java.lang.Class
Java.lang.reflect.Constrocter;
Java.lang.reflect.Filed;
Java.lang.reflect.Method;
Java.lang.reflect.Modifler;

反射机制API使用

1.获取Class:主要有三种方法
在这里插入图片描述

判断是否为某个类的实例

在之前我们使用instanceof关键字来判断是否为某个类的实例,同时我们也可以借助反射中的Class对象的isInstanceof方法来判断是否为某个类的实例他是一个native方法
在这里插入图片描述
在这里插入图片描述

通过反射创建对象

反射使用无参的构造方法初始化对象

使用Class对象的newInstance()方法来创建Class对象应用实例
在这里插入图片描述

反射使用有参数的方法初始化对象

在这里插入图片描述

反射获取构造方法

在这里插入图片描述

反射获取成员属性

在这里插入图片描述

反射获取成员方法

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值