java基础整理

Java反射

  • 概念:

    • 因为加载完类之后,在堆内存的方法区中就产生了一个Class类型的对象(一个类只有一个class对象)这个对象就包含了完整的类的结构信息。我们可以通过这个对象看到类的结构。这个对象就像是一面镜子,透过镜子可以看到类的机构,因此形象的称之:反射
  • 核心:

    • Java反射机制的核心是在程序运行时动态加载类并获取类的详细信息,从而操作类或对象的属性和方法。本质是JVM得到class对象之后,再通过class对象进行反编译,从而获取对象的各种信息
    • Java属于先编译再运行的语言,程序中对象的类型在编译期就确定下来了,而当程序在运行时可能需要动态加载某些类,这些类因为之前用不到,所以没有被加载到JVM。通过反射,可以在运行时动态创建对象并调用其属性,不需要提前在编译器知道运行的对象是谁
  • 优点:

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

    • ①:反射会消耗一定的系统资源,因此,如果不需要动态的创建一个对象,那么就不需要用反射
    • ②:反射调用方法时可以忽略权限检查,因此可能会破坏封装性而导致安全问题
  • 用途:

    • ①:实现.class文件到java文件的反编译
    • ②:通过反射机制访问java对象的属性、方法、构造方法等
    • ③:常用的IDEA、Eclipse等开发工具的快速实现(我们开发过程中 在某一个对象后按“点”总能列出其方法或者属性)这个就是用到了反射
    • ④:最重要的用途就是开发各种通用框架,为了保证框架的通用性,他们可能需要根据配置文件加载不同的类或者对象,调用不同的方法,此时就需要使用反射,运行时动态加载需要加载的对象
    • ⑤:在struts2框架中,在struts.xml里去配置Action,当我们请求login.action时,那么StrutsPrepareAndExecuteFilter就回去解析struts.xml文件,从action中查找出name为login的Action,并根据class属性创建创建对应的action实例,并用invoe方法来调用execute方法。这里就用到了反射。【配置文件与Action建立了一种映射关系,当View层发出请求时,请求会被StrutsPrepareExecuteFilter拦截,然后StrutsPrepareExecuteFilter会去动态地创建Action实例】
    • ⑥:Class.forName(“com.mysql.jdbc.Driver”) 动态加载mysql驱动,用到的也是反射
  • 常用的类

    • ①:Java.lang.Class
    • ②:Java.lang.reflect.Constructor
    • ③:Java.lang.reflect.Field
    • ④:Java.lang.reflect.Method
    • ⑤:Java.lang.reflect.Modifier
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值