A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 奚华 中级黑马   /  2012-11-17 20:29  /  1904 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 奚华 于 2012-11-17 20:31 编辑
  1. Class cls=String.class;
复制代码
这句代码中的class怎么理解,是怎么来的,是一个类成员变量吗?

评分

参与人数 1技术分 +1 收起 理由
古银平 + 1 神马都是浮云

查看全部评分

6 个回复

正序浏览
楼主的代码中透露出有几个基本概念没有弄明白,请看代码:

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();  会不会清晰一点呢?

回复 使用道具 举报
反射是动态的获取类的属性,方法,便于以后修改配置,XML就是利用反射的原理,无需频繁的修改程序,而只要修改一些配置就好!
回复 使用道具 举报
奚华 发表于 2012-11-17 20:34
为什么会报错?而是对的?

Thank you!
回复 使用道具 举报
李计伟 发表于 2012-11-17 20:59
获取字节码文件对象的方式
                1:getClass()
                        Person p = new Person( ...

Thank you!
回复 使用道具 举报
本帖最后由 李计伟 于 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的文件),字节码是一种二进制的类文件

回复 使用道具 举报
为什么
  1. String str="Hello";
  2. Class cls=str.class();
复制代码
会报错?而
  1. String str="hello";
  2. Class cls=str.getClass();
复制代码
是对的?

点评

str是一个对象,不是一个类怎么可以str.class呢,str.getClass()是根据对象获取对象所属的类  发表于 2012-11-17 20:48
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马