Java反射的理解
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Java反射的理解,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2044字,纯文字阅读大概需要3分钟。
内容图文
反射:获得对象运行时的类。Person.class-->Person对象 Class.class-->Class对象
我们通过Person.class字节码文件创建一个Person对象代表现实中的一个人。Person对象用来映射一个人,它不是硬盘上得字节码文件,而是在内存里面根据加载类来创建出来的Person对象。我们所说的加载类其实就是Class类型的对象。里面只包含静态成员。
我们通过Class.class字节码文件创建一个Class对象代表现实中的一个类,Class对象用来映射一个类,它不是硬盘上的字节码文件,而是把字节码信息在内存里面封装成一个对象,这个对象就是Class对象。这个对象就映射一个类。
------------------------------------------------------------------
Person p=new Person()的完成过程是这样的:首先到硬盘上找Person.class字节码文件。然后把字节码信息在内存里面封装成一个类对象,这个对象的类型就是Class类型的对象,简称加载类,然后通过Class对象来创建Person对象。
注:每一个对象(NEW对象)对应一个Class对象(加载类),不同的CLass对象代表JAVA中不用的数据类型。JAVA中所有的class都会被封装成Class对象。
public static void main(String[] args) throws Exception { // Person.class --> Person对象 --> zhangsan // Class.class --> Class对象(表示一个类型) --> Person.class Object obj = new Person("zhangsan", 19); //获得对象的类型有三种方式 /*1.如果拿到了对象 Class clazz = obj.getClass(); //返回class类型的实例对象。 String classname = clazz.getName(); System.out.println(classname); */ /*2.如果获得了表示类名的字符串 String classname = "cn.itcast.day9.reflectstudy.Person"; Class clazz = Class.forName(classname); System.out.println(clazz.getName()); */ /*3.明确知道要去拿哪种类型的Class对象 Class clazz = Person.class; System.out.println(clazz.getName()); System.out.println(int.class.getName()); */ Class clazz = obj.getClass(); /*遍历类的所有属性 Field[] fields = clazz.getDeclaredFields(); for(int i=0; i<fields.length; i++) { String name = fields[i].getName(); Class type = fields[i].getType(); System.out.println("属性名:" + name + " 属性类型:" + type.getName()); } */ /*获得一个属性,访问这个属性 Field field = clazz.getDeclaredField("name"); field.setAccessible(true); //取消了访问检查 field.set(obj, "曾哥"); System.out.println(obj); Object value = field.get(obj); System.out.println(value); */ /*获得对象的run方法,调一把 Method m = clazz.getDeclaredMethod("run", null); m.invoke(obj, null); */ /*获得类的构造方法,创建类的实例*/ Constructor con = clazz.getConstructor(String.class, int.class); Object object = con.newInstance("zhangsan", 29); Person p = (Person) object; System.out.println(p); }
原文:http://blog.csdn.net/u014600432/article/details/41512945
内容总结
以上是互联网集市为您收集整理的Java反射的理解全部内容,希望文章能够帮你解决Java反射的理解所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。