获取类对象的三种方法
| Class aClass1 = new Object().getClass(); |
| Class aClass2 = Object.class; |
| Class aClass3 = Class.forName("java.lang.Object"); |
调用默认构造器
| Class aClass = Class.forName("java.util.Random"); |
| Object obj = aClass.newInstance(); |
获取类信息
获取类中声明的私有、受保护、公有的属性、构造器和方法,不包含超类的:
| Field[] declaredFields = aClass.getDeclaredFields(); |
| Constructor[] declaredConstructors = aClass.getDeclaredConstructors(); |
| Method[] declaredMethods = aClass.getDeclaredMethods(); |
获取类和超类中公有的属性、构造器和方法:
| Field[] fields = aClass.getFields(); |
| Constructor[] constructors = aClass.getConstructors(); |
| Method[] methods = aClass.getMethods(); |
分析修饰符:
| Class randomClass = Class.forName("java.util.Random"); |
| Field seed = randomClass.getDeclaredField("seed"); |
| Modifier.isPrivate(seed.getModifiers()); |
| Modifier.isFinal(seed.getModifiers()); |
操作对象的属性
| Integer obj = new Integer("100"); |
| Class aClass = Class.forName("java.lang.Integer"); |
| Field valueField = aClass.getDeclaredField("value"); |
| valueField.setAccessible(true); |
| |
| int intValue = (int) valueField.get(obj); |
| |
| valueField.set(obj, 200); |
| intValue = valueField.getInt(obj); |
调用方法
调用对象方法:
| Class aClass = Class.forName("java.util.Random"); |
| Object obj = aClass.newInstance(); |
| |
| Method nextIntMethod = aClass.getMethod("nextInt", int.class); |
| Integer invoke = (Integer) nextIntMethod.invoke(obj, 10); |
调用静态方法:
| Class aClass = Class.forName("java.lang.Math"); |
| Method maxMethod = aClass.getDeclaredMethod("max", int.class, int.class); |
| |
| Integer invoke = (Integer) maxMethod.invoke(null, 100, 200); |
数组
按原数组的 2 倍进行扩容:
| private static Object resize(Object array) { |
| Class<?> aClass = array.getClass(); |
| if (!aClass.isArray()) { |
| return array; |
| } |
| int length = Array.getLength(array); |
| int newLength = 2 * length; |
| Object newArray = Array.newInstance(aClass.getComponentType(), newLength); |
| System.arraycopy(array, 0, newArray, 0, length); |
| return newArray; |
| } |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通