首页 > 代码库 > Java反射的理解
Java反射的理解
反射:获得对象运行时的类。
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对象。
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 = http://www.mamicode.com/field.get(obj);>Java反射的理解
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。