java反射专题一
一丶Class的理解
1 2 3 4 5 6 7 8 9 10 11 12 | /* * Class类是反射的源头 * 创建一个类,通过编译(javac.exe),生成对应的.class文件,之后使用java.exe加载(JVM的类加载器完成的)此.class文件。 * 此.class文件加载到内存后,就是一个运行时类,存放在缓存区。 * 那么这个运行时类本身就是一个Class的实例。 * 1.每一个运行时类只加载一次; * 2.有了Class的实例后,可以进行如下操作: * 1>创建对应的运行时类的对象 * 2>获取对应的运行类的完整结构(属性、方法、构造器、内部类、父类、所在的包、异常、注解、...) * 3>调用对应的运行时类指定的结构(属性、方法、构造器) * 4>反射的应用:动态代理 */ |
一丶获得Class对象的方法
1)通过类的静态属性class获得
1 | Class clazz = Person. class ; |
2)通过运行时类的getClass方法获得
1 2 | Person person = new Person(); Class clazz = person.getClass(); |
3)通过Class的静态方法获得
1 2 | String className = "hello.Person" ; //运行时类的完全限定名 Class clazz = Class.forName(className); |
4)通过类的加载器获得(了解)
1 2 3 | String className = "hello.Person" ; //类的完全限定名 ClassLoader classLoader = this .getClass().getClassLoader(); Class clazz = classLoader.loadClass(className); |
二丶通过Class对象创建对应的运行时类的实例对象
1 2 3 4 5 | Class clazz = Person. class ; //没有使用泛型,默认是object类型的class对象 Person person = (Person) clazz.newInstance(); //需要强转,该方法默认调用运行时类的无参构造方法,所以类必须有无参构造方法,无参构造方法权限够大 Class<Person> clazz1 = Person. class ; //使用了泛型指定是Person类型的class对象 Person person1 = clazz1.newInstance(); //不需要强转 |
带着疑问去思考,然后串联,进而归纳总结,不断追问自己,进行自我辩证,像侦查嫌疑案件一样看待技术问题,漆黑的街道,你我一起寻找线索,你就是技术界大侦探福尔摩斯
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧