Class对象和Java反射机制
作者:网络转载 发布时间:[ 2016/8/24 11:43:09 ] 推荐标签:java Class 内存
Class c = Cat.class;
Field[] fields = c.getDeclaredFields();
for (Field field : fields){
System.out.println(field);
}
结果如下:
public static int Cat.count
public int Cat.age
private java.lang.String Cat.name
可以看到我们轻而易举的得到了Cat类的字段信息,再来:
Method[] methods = c.getDeclaredMethods();
for (Method method : methods){
System.out.println(method);
}
结果如下 :
public void Cat.run()
private void Cat.ruff()
好玩吧,我们竟然可以在运行时得到类的信息。同时我们发现Cat类中的静态初始化代码段并没有执行。接下来我们通过Class对象来获得对应的实例对象:
try {
Cat cat = (Cat) c.newInstance();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
这时候静态代码块执行了:
this is class Cat!
接下来我们做一件神奇的事情:
try {
Class catClass = Class.forName("Cat");
Field name = catClass.getDeclaredField("name");
name.setAccessible(true);
Cat cat2 = (Cat) catClass.newInstance();
name.set(cat2,"Aristark");
System.out.println(cat2.getName());
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (NoSuchFieldException e) {
e.printStackTrace();
}
这次我们使用Class.forname()来获取Class对象,它的作用是让jvm查找并加载指定的类,也是说Cat类的静态代码块会被执行。其次值得注意的是,我们通过Class的几个方法访问了原本不可以被访问的name属性:
this is class Cat!
Aristark
从这个意义上来说,反射机制并不符合OOP的思想,所以我们仅在必要的时候使用这个特性行了。
四、后记
理解好Class对象不仅能让我们更好的认识一切皆对象这个观点,对之后学习泛型,类型擦除都是很有帮助的,而对于java反射机制我们只需在适当的场合利用它即可。:)关于这两个知识的深入学习稍后我会贴出一些有借鉴意义的文章,大家要关注哦~
本文内容不用于商业目的,如涉及知识产权问题,请权利人联系SPASVO小编(021-61079698-8054),我们将立即处理,马上删除。
相关推荐
Java性能测试有哪些不为众人所知的原则?Java设计模式??装饰者模式谈谈Java中遍历Map的几种方法Java Web入门必知你需要理解的Java反射机制知识总结编写更好的Java单元测试的7个技巧编程常用的几种时间戳转换(java .net 数据库)适合Java开发者学习的Python入门教程Java webdriver如何获取浏览器新窗口中的元素?Java重写与重载(区别与用途)Java变量的分类与初始化JavaScript有这几种测试分类Java有哪四个核心技术?给 Java开发者的10个大数据工具和框架Java中几个常用设计模式汇总java生态圈常用技术框架、开源中间件,系统架构及经典案例等
更新发布
功能测试和接口测试的区别
2023/3/23 14:23:39如何写好测试用例文档
2023/3/22 16:17:39常用的选择回归测试的方式有哪些?
2022/6/14 16:14:27测试流程中需要重点把关几个过程?
2021/10/18 15:37:44性能测试的七种方法
2021/9/17 15:19:29全链路压测优化思路
2021/9/14 15:42:25性能测试流程浅谈
2021/5/28 17:25:47常见的APP性能测试指标
2021/5/8 17:01:11热门文章
常见的移动App Bug??崩溃的测试用例设计如何用Jmeter做压力测试QC使用说明APP压力测试入门教程移动app测试中的主要问题jenkins+testng+ant+webdriver持续集成测试使用JMeter进行HTTP负载测试Selenium 2.0 WebDriver 使用指南