Java 中的反射机制
import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; class Fruit { static { System.out.println("Class Fruit been init"); } private String name; private int weight; public int public_field; public Fruit() { } public void setWeight(int weight) { this.weight = weight; } public void setName(String name) { this.name = name; } public String getName() { return name; } public int getWeight() { return weight; } public String getClassName() { return this.getClass().getName(); } } class Apple extends Fruit { public Apple() { super(); } } public class test { public static void main(String[] args) throws ClassNotFoundException, IllegalAccessException, IllegalArgumentException, InvocationTargetException, NoSuchMethodException, SecurityException { // 通过对象获得 Apple apple = new Apple(); Class<?> classGetByObj = apple.getClass(); System.out.println(classGetByObj.getName()); System.out.println(classGetByObj.hashCode()); // 通过 <Classname>.class 获得 Class<?> classGetByClassName = Apple.class; System.out.println(classGetByClassName.getName()); System.out.println(classGetByClassName.hashCode()); // 通过 forname 获得 Class<?> classGetByForname = Class.forName("Apple"); System.out.println(classGetByForname.getName()); System.out.println(classGetByForname.hashCode()); Field[] fields; // getFields: 能获取父类的字段,但是得是 public System.out.println("Fruit getFields:"); fields = Class.forName("Fruit").getFields(); for (Field field : fields) { System.out.println(field.getName()); } // 获取父类 declared 字段 System.out.println("Fruit getDeclaredFields:"); fields = Class.forName("Fruit").getDeclaredFields(); for (Field field : fields) { System.out.println(field.getName()); } System.out.println("Apple getFields:"); fields = Class.forName("Apple").getFields(); for (Field field : fields) { System.out.println(field.getName()); } // declared,也就是真的写到 .java 文件里的字段 System.out.println("Apple getDeclaredFields:"); fields = classGetByForname.getDeclaredFields(); for (Field field : fields) { System.out.println(field.getName()); } Class classApple = Class.forName("Apple"); Method appleSetName = classApple.getMethod("setName", String.class); appleSetName.invoke(apple, "apple"); System.out.println(apple.getName()); } }
如果您有任何关于文章的建议,欢迎评论或在 GitHub 提 PR
作者:dutrmp19
本文为作者原创,转载请在 文章开头 注明出处:https://www.cnblogs.com/dutrmp19/p/15962481.html
遵循 CC 4.0 BY-SA 版权协议
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本