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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© .ˋMr.Ivan 中级黑马   /  2013-12-9 10:16  /  1303 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

在获取Class对象时  .class 和  forName()有什么区别啊

评分

参与人数 1技术分 +1 收起 理由
FFF + 1 淡定

查看全部评分

3 个回复

倒序浏览
Class.forName(类的全路径)、实例对象.class(属性)
相同点:得到的都是Java.lang.Class对象
区别:
Class cl=A.class; JVM将使用类A的类装载器,将类A装入内存(前提是:类A还没有装入内存),不对类A做类的初始化工作.返回类A的Class的对象
Class.forName("类名")装入类A,并做类的初始化

评分

参与人数 1技术分 +1 收起 理由
FFF + 1 赞一个!

查看全部评分

回复 使用道具 举报
首先说方式不同。(别笑,看分解)

方式一:对象.getClass() 方法是 根对象Object的方法。 是其他类继承Object的getClass方法。

方式二:类名.class,你可以理解为字节码本身就是静态的,类加载的时字节码就进JVM了。所以类.class好比类调用静态方法似得调用字节码对象。
方式三:Class.forName()是Class类的静态方法。参数是字符串,字符串是类的全路径名。

接着上面的说。对象.getClass()必须要有对象,那么必须有对象。所以你得先创建对象。创建这个类对象的前提就是,你能访问到这个类(访问修饰符满足),你建对象的时候必须成功。

类名.class,那你必须要引用到这个类。(要么该类同包,要么import进来),例如:必须要import java.io.InputStream;  才能  InputStream.class
当然也可以  java.io.InputStream.class

以上两种方式,不满足上面说的条件,编译不会通过,直接报错。

而第三种方式 Class.forName("类的全路径名")  ,因为参数是字符串,所以你随便写,都会编译通过。如果全路径写错了,运行才会报错。第三种方式,可以最后才将类全路径名读入,所以常用与反射,类名不确定也不会编译错,就可以根据自己需要随意配置。


另外,仅有第二种方式:类名.class   还支持九 种类型(八种基本类型+void)//原因:九种类型没对象,不支持第一种方式
                                                                                                                        //原因:九种类型没有不是类,没路径,没法写全路径名
例如: Class  clazz=int.class;    //返回字节码为int





回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马