Java基础——反射

反射在Java中提供了一种在运行时分析类和对象的能力。本文详细介绍了Class类的加载过程,如何通过反射创建运行时类的对象,并探讨了反射在动态代理中的应用。Class类的实例可以表示所有Java结构,包括类、接口、枚举等。ClassLoader分为引导类加载器、扩展类加载器和系统加载器,用于加载不同类型的类。在创建运行时类对象时,通常需要一个公共无参构造器。最后,文章提到了反射在实现动态代理中的关键作用,允许我们在运行时创建代理对象来间接访问原对象。
摘要由CSDN通过智能技术生成


反射与直接new的方式的区别:
编译的时候不知道造哪个类的对象,需要用到反射,因为反射具有动态性。比如,服务器不知道用户登录还是注册,因而不知道造谁的对象,所以需要用到反射。

反射与封装性:
反射解决的是能不能调的问题,封装性解决的是应该调谁的问题。

Class类

类的编译过程:
程序接受javac.exe命令后,会新建一个或多个字节码文件,以.class结尾。

类的加载过程:
使用java.exe命令运行字节码文件,首先是加载到内存中去,这就是运行时类。运行时类就是Class的对象,每个Class的实例都对应着一个实例。静态方法、变量也是对象在调。

Class实例有四种获取方式,不同方式获取或赋予不同名称的实例都是同一个对象,也就是说内存地址都相同。

Class的实例揽括Java的所有结构,包括Class自己、接口、枚举类、数组、基本数据类型、void、注解。

ClassLoader类

引导类加载器:加载JDK的核心库

扩展类加载器:负责jre/lib/ext目录下的jar包或–D java.ext.dirs指定目录下的jar包装入工作库,不能被获取。

系统加载器:自定义类的加载器。使用ClassLoader类可以获取这个加载器。

使用ClassLoader可以加载src文件夹下的配置文件。
举例:Reflection\ClassLoaderTest.java

通过反射创建运行时类的对象

通用做法的要求:
·类必须要有空参构造器
·类的空参构造器不能由private修饰,一般用public修饰

*Java 9以后已经抛弃Class的newInstance()方法,改用Constructor的newInstance()方法。

反射在动态代理中的应用

在直接访问对象不太方便时,我们可以此对象的代理对象。
代理类与被代理类共用接口。

静态代理:编译时明确代理某个类。
动态代理:不明确代理哪个类,只在运行时确定。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值