Java 反射机制笔记

本文深入探讨Java类加载过程,包括加载、连接和初始化阶段,解析类加载器的种类及作用,如BootstrapClassLoader、ExtensionClassLoader和SystemClassLoader。同时,介绍了Java反射机制的基本概念和应用场景,以及动态代理的原理与实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

类加载器
    当程序要使用某个类时,如果该类还未被加载到内存中,则系统通过加载,连接,初始化三步来实现对这个类进行初始化。
    加载
        就是指将class文件读入内存 ,并为之创建一个Class对象。
        任何类被使用时系统都会建立一个class对象
    连接:
        验证 是否有正确的内部结构,并和其他类协调一致
        准备 负责为类的静态成员分配内存,并设置默认初始值
        解析 将类的二进制数据中的符号引用替换为直接引用
    初始化 就是我们以前讲过的初始化步骤

    类初始化时机
        创建类的实例
        访问类的静态变量,或者为静态变量赋值
        调用类的静态方法
        使用反射方式来强制创建某个类或接口对应的java.lang.Class对象
        初始化某个类的子类
        直接使用java.exe命令来运行某个主类
    类加载器
        类加载器
            负责将class文件加载到内存中,并为之生成对应的class对象
            虽然我们不要关心类加载机制,但是了解这个机制我们就能更好地理解程序的运行
        类加载器的组成
            Bootstrap ClassLoader 根类加载器
                引导类加载器,负责java核心类的加载,例:System,String  在jar lib 目录下 rt.jar 文件中    
            Extension ClassLoader 扩展加载器
                负责jar的扩展目录中jar包的加载。
                    在jdk中jre lib ext 目录
            System ClassLoader 系统类加载器
                负责在jvm启动是加载来自java命令的class文件,以及classpath环境所指定的jar包和类路径
            
反射
    java 反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法,对于任何一个对象,都能调用他的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制
    要想解刨一个类,必须先要获取该类的字节码文件对象,而解刨使用的就是Class类中的方法,所以先要获取到每个字节码文件对应的Class类型的对象
    
动态代理

XJad 反编译工具
native 本地意思  

反射高级应用

动态代理
    代理:
        本来应该自己做的事情,却请了别人来做,被请的人就是代理对象。
            举例: 春季回家买票让人代买
    动态代理:
        在程序运行过程中产生的这个对象
            而程序运行过程中产生对象其实就是我们刚才反射讲解的内容,所以,动态代理就是通过反射生成的一个代理
    在java 中java.lang.reflect 包下提供了一个Proxy类 和一个invooationHardler接口 ,通过使用这个类和接口就可以生成代理对象,jdk提供的代理只能针对接口做代理。我们有更强大的cglib
    Proxy 类中的方法创建动态代理对象    
        public static Object newProxyinstance(classLoader loader,Class<?>[] interfaces,InvocationHandler h)
        最终会调用invocationHandler 的方法
    InvocationHandler
        Object invoke (Object proxy.Method method.Objce[] aree);

        动态代理:就是使用一个特定对象,帮我们完成公共的事情

模板设计模式
    概述:
        模板方法模式就是定义一个算法的骨架,而将具体的算法延迟到子类中实现
    优点:
        使用模板方法模式,在定义算法骨架的同时,可以很灵活的实现具体的算法,满足用户灵活多变的需求
    缺点:
        如果算法骨架要修改的话,则需要修改抽象类

装饰设计模式
    概述:
        装饰模式就是使用该类的一个子类的实例,在客户端将这个子类实例交给装饰类,是继承的替代方案
    优点:
        使用装饰模式,可以提供比继承更灵活的扩展对象的功能,它可以动态的添加对象的功能,并且可以随意的组合这些功能
    缺点:
        正因为可以随意组合,所以可能出现一些不合理的逻辑

微笑的java

欢迎关注转发评论点赞沟通,让编码不在孤单。

 
    

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

果核 JAVA

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值