黑马程序员技术交流社区

标题: 反射中getMethod问题 [打印本页]

作者: 罗家辉    时间: 2013-4-14 23:54
标题: 反射中getMethod问题
本帖最后由 罗家辉 于 2013-4-15 16:25 编辑
  1. class Person{
  2.         private String name;
  3.         private int age;
  4.         Person(String name,int age){
  5.                 this.setAge(age);
  6.                 this.setName(name);
  7.         }
  8.         public String toString(){
  9.                 return "姓名:"+name+",年纪:"+age;
  10.         }
  11.         public int getAge() {
  12.                 return age;
  13.         }
  14.         public void setAge(int age) {
  15.                 this.age = age;
  16.         }
  17.         public String getName() {
  18.                 return name;
  19.         }
  20.         public void setName(String name) {
  21.                 this.name = name;
  22.         }
  23. }
复制代码
  1. public static void main(String[] args) throws Throwable{
  2.   
  3.          Class<Person> c = Person.class;
  4.                 Method m = c.getMethod("getName");
  5.                 System.out.println(m);
  6.         }
复制代码
{:soso_e116:}通过他c.getMethod("getName");可以获取getName的方法,但是当Person类中的方法有参数,他就获取不了,报异常: java.lang.NoSuchMethodException
c.getMethod("setName")编译没有错,运行时就出异常,为什么会这样?


作者: 王洪宇    时间: 2013-4-14 23:58
  1. public static void main(String[] args) throws Throwable{
  2.   
  3.         Class<Person> c = Person.class;
  4. //需要把参数类型也要列出来,setName(String name)
  5.                 Method m = c.getMethod("getName",String.class);//               
  6.                  System.out.println(m);
  7.         }
复制代码

作者: Asan    时间: 2013-4-15 00:10
你的初始值呢,你的main方法中没有设那么的初始值!
作者: 吴林飞    时间: 2013-4-15 10:36
本帖最后由 吴林飞 于 2013-4-15 10:41 编辑
  1. Class<Person> c = Person.class;
  2. Method setName = c.getMethod("setName",String.class);
  3. //你的JavaBean中的setName(String name)方法是不是带参数的,编译期只检查语法,运行期才参与运算,
  4. //你要反射带参数的方法,你必须带上参数反射,否则JVM识别不了
  5. System.out.println(setName);
  6. Method getName = c.getMethod("getName");
  7. //你的JavaBean中的getName()是不是空参数的,
  8. System.out.println(getName);
复制代码





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