java反射基本操作
反射相关方法
-
访问类的字段
-
访问类的方法
-
访问类的构造器
// 获取到类对象的方式(三种)
User user = new User("lisi","123abc");
Class clazz = user.getClass();// 第一种
Class<?> userClazz = Class.forName("com.example.demo.myenum.User");// 第二种,需要处理异常
Class userClazz1 = User.class;// 第三种
// 获取类的所有字段(私有,公开,默认,受保护)
Field[] fields = clazz.getDeclaredFields();
// 获取指定字段,需要处理异常
Field username = clazz.getDeclaredField("username");
// 获取父类
Class superClass = class.getSuperClass();
// 获取到所有父类的字段
while(superClass != null && superClass != Object.class) {
Field[] superFields = superClass.getDeclareFields();
superClass = superClass.getSuperClass();
}
// 访问字段
for(Field field : fields) {
// 设置访问权限,打开后可以访问私有修饰的字段
field.setAccessible(ture);
// 获取到字段名字
String name = field.getName();
// 获取字段值
Object object = field.get(user);
// 获取字段的类型,当需要判断类型时使用
Class<?> type = field.getType();
// 判断字段的访问修饰符
Modifier.isPrivate(field.getModifiers());
// 判断字段是否静态
Modifier.isStatic(field.getModifiers());
// 往字段中set值
Object o = clazz.getConstructor(String.class, String.class).newInstance();
field.set(o,"666");
}
// 访问方法
Method[] methods = clazz.getMethods();// 获取所有方法
Method method = clazz.getMethod("test", String.class);// 获取指定方法,参数为方法名,参数类型
// 调用方法
for(Method method1 : methods) {
method1.setAccessible(true);
Object o = clazz.getConstructor(String.class, String.class).newInstance();
method1.invoke(o,"hello world");// 参数
}
// 访问构造器
// 获取所有的public的构造器
Constructor[] constructors = clazz.getConstructors();// 批量
// 获取所有的构造器(四种访问修饰符都可)
Constructor[] constructors1 = clazz.getDeclaredConstructors();
// 获取public的无参构造器
Constructor constrctor = clazz.getConstructor(null);// 指定
// 获取private的有参构造器
Constructor constructor1 = clazz.getDeclaredConstructor(String.class,String.class);// 参数类型要传
// 通过构造器获取对象
Object object = constructor1.newInstance("lisi","1236565");// 使用时要注意类型强转
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· AI与.NET技术实操系列(六):基于图像分类模型对图像进行分类