JAVA反射
来源:互联网 发布:天眼查 知乎 编辑:程序博客网 时间:2024/06/15 19:14
/通过类的名字的字符串表达形式,获取到类这个对象。1
//类的完整名称为:所在包的包名+自己定义的名称
Class cls = Class.forName("extension.Person");
//得到指定的包名
String packageName = cls.getPackage().getName();
System.out.println("得到包名:" + packageName);
//获取其父类
Class superCls = cls.getSuperclass();
String superClsName = superCls.getName();
System.out.println("Person类的父类:" + superClsName);
//获取其实现的构造方法
Constructor[] constructors = cls.getConstructors();
System.out.println("Person类实现的构造方法:" + Arrays.toString(constructors));
//获取其成员方法
Method[] methods = cls.getMethods();
System.out.println("Person中的成员方法:" + Arrays.toString(methods));
//得到方法的返回类型
Class returnType = methods[1].getReturnType();
System.out.println("getName方法的返回类型:" + returnType);
//通过反射的类,实例化该类的对象
Person person = (Person) cls.newInstance();
Field nameField = cls.getDeclaredField("name");
//解除封装,如果没有这句话,则会抛出异常
nameField.setAccessible(true);
nameField.set(person, "小明");
//打印该属性的值
System.out.println("Person类中Name属性的值是:" + nameField.get(person));
//利用反射动态的调用方法
Method getNameMethod = cls.getDeclaredMethod("getName");
getNameMethod.setAccessible(true);
String name = (String) getNameMethod.invoke(person);
System.out.println("调用getName方法得到:" + name);
Method setSexMethod = cls.getDeclaredMethod("setSex", String.class);
setSexMethod.setAccessible(true);
setSexMethod.invoke(person, "男");
0 0
- 【反射】JAVA反射机制
- JAVA 反射
- java 反射
- Java反射
- java反射
- java反射
- JAVA反射
- java 反射
- Java 反射
- java 反射
- Java反射
- java反射
- JAVA 反射
- java 反射
- Java反射
- java反射
- java 反射
- java 反射
- 树的同构
- 上传文件配置
- 维吉尼亚密码器/维吉尼亚方阵 Vigenere Cipher & Vigenere Square
- MVC为什么不是一种设计模式?
- 第三周项目4-顺序表应用(2)
- JAVA反射
- Gym 100507J Scarily interesting!
- C++:sprintf()的用法
- Spring学习第六天:Bean之间的关系
- Day 14: Scope Java stream OptionalInt
- IDEA集成golang插件
- NOIP提高组需要的一些模板【不定时更新】
- 判断某年是否为闰年
- 2016 ACM/ICPC Asia Regional Qingdao Online 1002Cure