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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 海带 中级黑马   /  2015-4-14 09:14  /  750 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. package learn.fanshe;

  2. import java.lang.reflect.Method;

  3. public class Test2 {
  4.          
  5.             public static void main(String[] args){  
  6.                 for(String arg : args){  
  7.                     System.out.println(arg);  
  8.                 }  
  9.             }  
  10.          

  11. }
  12. class ReflectTest   
  13. {   
  14.    public static void main(String[] args) throws Exception
  15.    
  16.    {   
  17.            Test2.main(new String[] {"123","abc","你好"});
  18.            String className=args[0];  
  19.        Class clazz=Class.forName(className);
  20. //       Class clszz = Class.forName(args[0]);   
  21. //       Method main = clszz.getMethod("main", String[].class);   
  22. //       main.invoke(null,"黑马程序员","黑马论坛","CSDN社区");  
  23.            Method methodMain=clazz.getMethod("main",String[].class);  
  24.        //方式一:强制转换为超类Object,不用拆包  
  25.        methodMain.invoke(null, (Object)new String[]{"123","456","789"});  
  26.        //方式二:将数组打包,编译器拆包后就是一个String[]类型的整体   
  27.        methodMain.invoke(null, new Object[]{new String[]{"123","456","789"}});
  28.    }   
  29. }   
复制代码
  1. 123
  2. abc
  3. 你好
  4. Exception in thread "main" java.lang.ClassNotFoundException: LearnJava.learn.fanshe.ReflectTest
  5.         at java.net.URLClassLoader$1.run(Unknown Source)
  6.         at java.net.URLClassLoader$1.run(Unknown Source)
  7.         at java.security.AccessController.doPrivileged(Native Method)
  8.         at java.net.URLClassLoader.findClass(Unknown Source)
  9.         at java.lang.ClassLoader.loadClass(Unknown Source)
  10.         at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
  11.         at java.lang.ClassLoader.loadClass(Unknown Source)
  12.         at java.lang.Class.forName0(Native Method)
  13.         at java.lang.Class.forName(Unknown Source)
  14.         at learn.fanshe.ReflectTest.main(Test2.java:22)
复制代码
我不知道为什么找不到类 java.lang.ClassNotFoundException: LearnJava.learn.fanshe.ReflectTest,想知道为什么?
求大神指点指点

3 个回复

倒序浏览
没有配置完整的类名吗?
回复 使用道具 举报
Java 中给我们提供了专门的开发工具包,这个lang包中出现的一个异常,意思是找不到找不到该类,就是在dos命令行下你编译的第二步没有写对类名,你定义了两个类,并且两个类都有自己的主方法,所以在编译是首先你要编译这个Java文件,然后执行是就要执行这两个类,就不会出现你上述的问题
回复 使用道具 举报
问题我自己解决了。还是要thanks!
出现问题的原因是我们通过反射调用main方法时 ,在编译时我们只告诉了jvm我们要调用某个类的main方法,但没有具体指明 是哪个类的main方法。当运行时我们传的那个具体类名jvm就去调用那个类。而 出现上诉问题是由于我没有吧完整的类名通过eclipse告诉jvm。当jvm在当前路径下找不到时就报错了。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马