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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

张老师讲反射,有个例子
代码如下
  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(),结果老师举了这个例子,我还是不明白。

大家给个解释?谢谢。

2 个回复

倒序浏览
startingClassName就是所需类的完全限定名,比如说在哪个包下的具体类名称
以下代码片段返回命名为 java.lang.Thread 的类的运行时 Class 描述符。

   Class t = Class.forName("java.lang.Thread")
回复 使用道具 举报
1、Class.forName("java.lang.Thread") 返回的是Thread这个类。
2、你要明白在java里面任何class都要装载在虚拟机上才能运行。
3、Class.forName(“XXX.XXX.XXX”) 这句话就是装载类用的,具体就是要求JVM查找并加载指定的类,也就是说JVM会执行该类的静态代码段
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马