🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
[TOC] ## 获取Class对象 ### 使用 Class.forName 静态方法。 当你知道该类的全路径名时,你可以使用该方法获取 Class 类对象。 ~~~ Class clz = Class.forName("java.lang.String"); ~~~ ### 使用 .class 方法 这种方法只适合在编译前就知道操作的 Class。 ~~~ Class clz = String.class; ~~~ ### 使用类对象的 getClass() 方法。 ~~~ String str = new String("Hello"); Class clz = str.getClass(); ~~~ ## 创建类对象 ### 通过 Class 对象的 newInstance() 方法。 ~~~ Class clz = Apple.class; Apple apple = (Apple)clz.newInstance(); ~~~ ### 通过 Constructor 对象的 newInstance() 方法 ~~~ Class clz = Apple.class; Constructor constructor = clz.getConstructor(); Apple apple = (Apple)constructor.newInstance(); ~~~ 通过 Constructor 对象创建类对象可以选择特定构造方法,而通过 Class 对象则只能使用默认的无参数构造方法。下面的代码就调用了一个有参数的构造方法进行了类对象的初始化。 ~~~ Class clz = Apple.class; Constructor constructor = clz.getConstructor(String.class, int.class); Apple apple = (Apple)constructor.newInstance("红富士", 15); ~~~ ## 反射获取类属性、方法、构造器 * 通过 Class 对象的 getFields() 方法可以获取 Class 类的属性,但无法获取私有属性。 * 通过Class 对象的getDeclaredFields() 方法则可以获取包括私有属性在内的所有属性。 * 与获取类属性一样,当我们去获取类方法、类构造器时,如果要获取私有方法或私有构造器,则必须使用有 declared 关键字的方法。 ## 推荐阅读 [深入解析Java反射(1) - 基础](https://www.sczyh30.com/posts/Java/java-reflection-1/) [大白话说Java反射:入门、使用、原理](https://www.cnblogs.com/chanshuyi/p/head_first_of_reflection.html)