当前位置: 代码迷 >> J2SE >> in thread "main" java.lang.NoSuchMethodException:
  详细解决方案

in thread "main" java.lang.NoSuchMethodException:

热度:537   发布时间:2016-04-24 18:08:35.0
求解:为什么选String.class;int.class ?
我在学习java的反射时候,遇到一个方法:getDeclaredMethod(String name,Class...parameterType);举例:
  Method m=c.getDeclaredMethod("Study",____),

  询问空格里面该选择哪一项?


A.String, int.
B."zhangsan,20
C.String.class,int class
D."String calss " "int class".

答案选:C. 


对这一项不是很懂,请教为什么?  

对于C那个类型的写法不是很懂。

------解决方案--------------------
getDeclaredMethod(String name,Class...parameterType)第一个参数是函数名 字符串类型 第二个是一个可变参数 ,传入的是那个函数(如你所讲的“study”函数)的字节码 参数是String类型的话就得传入String.class int类型的就的是int.class
------解决方案--------------------
getDeclaredMethod(String name,Class...parameterType);
这个方法是接受一个String类型参数,一个或者任意多个class类型的参数
所以选择C int.class是正确的等价于Integer.TYPE;Integer.class;其实用第三种会更加容易理解
------解决方案--------------------

public class Test {

public void test(int x){
System.out.println(x);
}

public static void main(String[] args) throws ClassNotFoundException, SecurityException, NoSuchMethodException, IllegalArgumentException, IllegalAccessException, InvocationTargetException, InstantiationException {

//error: Exception in thread "main" java.lang.NoSuchMethodException: com.webex.learning.Test.test(java.lang.Integer)


/* Class<?> forName = Class.forName("com.webex.learning.Test");
Method method = forName.getDeclaredMethod("test", Integer.class);
method.invoke(forName.newInstance(), 10);*/


Class<?> forName = Class.forName("com.webex.learning.Test");
Method method = forName.getDeclaredMethod("test", int.class);
method.invoke(forName.newInstance(), 10); 

}

}

测试了下:
说明(1)int.Class和integer.class不是一回事情

------解决方案--------------------
getDeclaredMethod(String name,Class...parameterType);

String name是方法名
Class...parameterType 这个是参数类型列表

比如一个方法 public void setUserName(String userName);
setUserName方法名对应就对应String name
String name这个参数对应Class...parameterType因为要求的是Class类型的参数所以用String.class
楼主敲敲代码就知道了

另外int等基本类型是有class属性的,不知道的别瞎说
  相关解决方案