黑马程序员技术交流社区

标题: 不懂Class.foName()使用方法,不懂张老师的那个例子,请求帮助 [打印本页]

作者: 李哲    时间: 2012-4-11 15:56
标题: 不懂Class.foName()使用方法,不懂张老师的那个例子,请求帮助
张老师讲反射,有个例子
代码如下
  1. String startingClassName=args[0];
  2.                 Method mainMethod=Class.forName(startingClassName).getMethod("main", String[].class);
  3.                 mainMethod.invoke(null,(Object)new String[]{"kkk","sss","www"});

  4. class TestArguments{
  5.         public static void main(String[] args){
  6.                 for(String arg:args)
  7.                 {
  8.                         System.out.println(arg);
  9.                 }
  10.         }
  11. }
复制代码
不明白Class.forName()的使用,大家是怎么理解的?
API文档中Class.forName(),返回与“带有给定字符串名的类或接口“相关联的 Class 对象。
就是说上面的例子中,TestArguments类带有startingClassName?但是String startingClassName=args[0];语句不只是把args[]的第一个元素赋给字符串startingClassName了吗?怎样算是"带有"?
我觉得TestArguments类和startingClassName字符串没什么关系啊。只是字符串使用了这个类,这个类完全不依赖于这个字符串吧?这怎么算“带有给定字符串名的类或接口“?

本来就不理解Class.forName(),结果老师举了这个例子,我还是不明白。

大家给个解释?谢谢。

作者: 未长法    时间: 2012-4-11 16:08
startingClassName就是所需类的完全限定名,比如说在哪个包下的具体类名称
以下代码片段返回命名为 java.lang.Thread 的类的运行时 Class 描述符。

   Class t = Class.forName("java.lang.Thread")

作者: 陈扬    时间: 2012-4-11 16:28
1、Class.forName("java.lang.Thread") 返回的是Thread这个类。
2、你要明白在java里面任何class都要装载在虚拟机上才能运行。
3、Class.forName(“XXX.XXX.XXX”) 这句话就是装载类用的,具体就是要求JVM查找并加载指定的类,也就是说JVM会执行该类的静态代码段




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