首先你要明白在java里面任何class都要装载在虚拟机上才能运行。这句话就是装载类用的(和new 不一样,要分清楚)。 至于什么时候用,你可以考虑一下这个问题,给你一个字符串变量,它代表一个类的包名和类名,你怎么实例化它?只有你提到的这个方法了,不过要再加一点。 A a = (A)Class.forName("pacage.A").newInstance(); 这和你 A a = new A(); 是一样的效果。 关于补充的问题 答案是肯定的,jvm会执行静态代码段,你要记住一个概念,静态代码是和class绑定的,class装载成功就表示执行了你的静态代码了。而且以后不会再走这段静态代码了。 你可以编个小程序看看就知道了
楼主【sure2003】截止到2008-07-17 21:01:59的历史汇总数据(不包括此帖):
发帖的总数量:249 发帖的总分数:10503 每贴平均分数:42
回帖的总数量:214 得分贴总数量:6 回帖的得分率:2%
结贴的总数量:246 结贴的总分数:10403
无满意结贴数:2 无满意结贴分:50
未结的帖子数:3 未结的总分数:100
结贴的百分比:98.80 % 结分的百分比:99.05 %
无满意结贴率:0.81 % 无满意结分率:0.48 %
值得尊敬
比如Class.forName("Student");
就是加载Student类。
Class.forName("Student").newInstance();
就是创建一个Student的对象。
至于什么时候用,你可以考虑一下这个问题,给你一个字符串变量,它代表一个类的包名和类名,你怎么实例化它?只有你提到的这个方法了,不过要再加一点。
A a = (A)Class.forName("pacage.A").newInstance();
这和你
A a = new A();
是一样的效果。 关于补充的问题
答案是肯定的,jvm会执行静态代码段,你要记住一个概念,静态代码是和class绑定的,class装载成功就表示执行了你的静态代码了。而且以后不会再走这段静态代码了。
你可以编个小程序看看就知道了
Class是运行时信息
这是用到了发射机制,详细了解可以看看java基础的反射相关的章节