在验证Reflect的时候写个测试程序老抛java.lang.ClassNotFoundException
Father.java:
public class Father{
String name = "father";
int age = 40;
public Father (){};
public void fatherMothed(){

}
private void fatherMethod2 (){

}
}
class Son extends Father{
String name = "son";
int age = 20;
public Son(){};
public void sonMethod(){

}
}下面是TestReflect.javaimport java.lang.reflect.*;
import java.util.Scanner;public class TestReflect {
public static void main(String []args)  {
Scanner sca = new Scanner(System.in);
String className = sca.next();
System.out.println(className); try {
Class cl= Class.forName(className);
Field field = cl.getDeclaredField(className);
Constructor[] con = cl.getDeclaredConstructors();
Method[] method = cl.getDeclaredMethods();
    System.out.println(field.toString());
for (Constructor cn :con){
System.out.println("Construtor" + cn.toString());
}
for (Method md: method){
System.out.println("method" + md.toString());
}
} catch (SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (NoSuchFieldException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();

}

}

}
老是抛java.lang.ClassNotFoundException异常...希望高手能够指点一下多谢了..

解决方案 »

  1.   


    Class cl= Class.forName(className);
    Field field = cl.getDeclaredField(className); 
    className到底是类名还是field名,大小写对吗?
      

  2.   

    确认下className 看这个类名所表示的类是不是存在
      

  3.   

    不知道你输入的是什么,先这么测试一下
    Class cl = Class.forName("Son");
    Field field = cl.getDeclaredField("name");
    没问题
      

  4.   

    java.lang.ClassNotFoundException 
    这个异常就是找不到类。而出现这个问题的原因就是路径不对。
    Class cl= Class.forName(className);
    这里ClassName是在classPath中吗?
      

  5.   

    不行啊...输入Son也不行.输入Father也不行老抛异常
    但要是这么写就行..
    Father fa = new Father();
    Class cl = fa.getClass();
    Field fi = cl.getDeclaredField("name");
      

  6.   

    看我2楼的回复,两句话用的都是className当然不正确了,输什么也不对.
      

  7.   

    class.forName(className)中的类名要是完整路径. 比如java.util.ArrayList
      

  8.   

    Class cl= Class.forName("Father"); 
    Field field = cl.getDeclaredField("name"); 
    试试
      

  9.   

    Field field = cl.getDeclaredField(className); 
    这个句子有问题改成这句就没问题Field[] field = cl.getDeclaredFields() ;
      

  10.   

    问题应该是出在:
    Field field = cl.getDeclaredField(className); 
    你的className是类名不是字段名