黑马程序员技术交流社区

标题: 反射中的类.class中的class怎么理解? [打印本页]

作者: 奚华    时间: 2012-11-17 20:29
标题: 反射中的类.class中的class怎么理解?
本帖最后由 奚华 于 2012-11-17 20:31 编辑
  1. Class cls=String.class;
复制代码
这句代码中的class怎么理解,是怎么来的,是一个类成员变量吗?
作者: 奚华    时间: 2012-11-17 20:34
为什么
  1. String str="Hello";
  2. Class cls=str.class();
复制代码
会报错?而
  1. String str="hello";
  2. Class cls=str.getClass();
复制代码
是对的?
作者: 李计伟    时间: 2012-11-17 20:59
本帖最后由 李计伟 于 2012-11-17 21:06 编辑

获取字节码文件对象的方式
                1:getClass()
                        Person p = new Person();
                        Class c = p.getClass();
                2:class属性
                        Class c = Person.class;
                3:Class的forName方法
                        Class c = Class.forName("cn.itcast.Person");
要用类型.class()才能获取字节码文件对象,多看看Api文档,Class类和java.lang.reflect 包的Constructor
Field Method 类的方法。源文件(.java的文件)经过编译器编译之后便会生成一个字节码文件(是.class的文件),字节码是一种二进制的类文件


作者: 奚华    时间: 2012-11-17 21:32
李计伟 发表于 2012-11-17 20:59
获取字节码文件对象的方式
                1:getClass()
                        Person p = new Person( ...

Thank you!
作者: 奚华    时间: 2012-11-17 21:32
奚华 发表于 2012-11-17 20:34
为什么会报错?而是对的?

Thank you!
作者: 孙玉伟    时间: 2012-11-19 13:30
反射是动态的获取类的属性,方法,便于以后修改配置,XML就是利用反射的原理,无需频繁的修改程序,而只要修改一些配置就好!
作者: 段海涛    时间: 2012-11-22 10:27
楼主的代码中透露出有几个基本概念没有弄明白,请看代码:

String str="Hello";

Class cls=str.class();   // str.class()这样写是在调用str这个字符串对象的class()方法,问题是,字符串对象有这样一个方法吗?显然没有啊,那怎么能写这样的语句呢?

而第二段代码的含义是什么呢?请看注释:
String str="hello";

Class cls=str.getClass();  // str字符串对象确实有getClass()方法,而且该方法调用之后的返回值就是一个Class类的对象,然后将这个对象赋给一个Class类的引用cls  ,就像咱们最熟悉的new一个person类之后赋值给一个person类的引用:  Person  zhangsan = new Person();    这当然是在正确不过的了。
这句话理解的关键在于Class这个类,Class类其实不用想得太玄,按照Person类的模式一样理解就行:
              Person类是不是代表了现实世界中的“人”?  你如果定义一个Fruit类,是不是就可以代表现实世界中的“水果”?
                     那么,在万物皆对象的JAVA体系中,硬盘上,甚至内存中的文件,是不是也可以被表示成一个类?这样就“欧”了,
              你写的person.java 编译出来之后是不是产生了一个   Person.class文件在硬盘上?  Fruit.java 是不是编译后产生了
              一个Fruit.class文件?  这些*.class文件肯定有一些共同的特征,那么,你就可以把这些文件归为一个类,在java中就
             有这么一个现成的类,类名就叫Class;

      现在你再回头去理解Class cls=str.getClass();  会不会清晰一点呢?






欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2