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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 于潇 中级黑马   /  2012-5-20 09:36  /  3007 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 于潇 于 2012-5-20 09:39 编辑
  1. import java.lang.reflect.Constructor;
  2. import java.lang.reflect.Field;
  3. import java.lang.reflect.Method;
  4. class ReflectTest {
  5. /**
  6.   * @param args
  7.   */
  8. public static void main(String[] args)throws Exception {
  9.   // TODO Auto-generated method stub
  10.   String str1 = "abc";

  11.   Method methodCharAt = String.class.getMethod("charAt", int.class);//注意后面那个"charAt"
  12.   System.out.println(methodCharAt.invoke(str1, 1));
  13. }
  14. }
  15.   
复制代码
如果将“charAt”中的“c”改成大写即"CharAt",运行会报异常Exception in thread "main" java.lang.NoSuchMethodException: java.lang.String.CharAt(int)
这是为什么呢?

7 个回复

倒序浏览
方法是charAt(),所以本来就没有CharAt方法。当然会报告NoSuchMethodException。
No   Such   Method   Exception
没有  这样      方法   异常

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

回复 使用道具 举报
额 只能这么说 java中严格区分大小写 不是你想写啥就写啥滴 楼上正解 顶了
回复 使用道具 举报
亲,Java的编译机制是很成熟的,也是很严谨的,只有文档里面的显示的方法才能被编译并执行,包括已经过时的方法
回复 使用道具 举报
--☆伟☆-- 发表于 2012-5-20 10:26
亲,Java的编译机制是很成熟的,也是很严谨的,只有文档里面的显示的方法才能被编译并执行,包括已经过时的 ...

可是编译是通过的呀
回复 使用道具 举报
于潇 发表于 2012-5-20 10:28
可是编译是通过的呀

:#,错了,编译的时候只把它当成字符串进行处理了,但我觉得写程序时还是严谨点好
回复 使用道具 举报
编译检查的是语法错误,你的那个方法时自定义方法,只有在执行时才会出现找不到方法的错误提示,所以编译才会没问题。
回复 使用道具 举报
余宏 中级黑马 2012-5-20 11:24:11
8#
java.lang.String.charAt(int index);
获得指定位置index的字符。
charAt本身就是String类中的一个方法,本就是小写,Java语言是区分大小写的,要是你改了自然就找不到这个方法了
当然会报NoSuchMethodException错误
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马