反射方法名输出碰到的问题

fastsy 2017-02-23 05:25:25
public class OomTest {
public static void main(String[] args){
Class clz = OomTest.class;
Method[] methods = clz.getDeclaredMethods();
System.out.println(methods.length );//1
System.out.println(methods[2].getName());
Method m2 = methods[2];
Class[] p = m2.getParameterTypes();
System.out.println(p[0].getName());//2

}
public void setA(){

}
public void setB(int a){

}
}
如上图,运行第一次,一切结果正常,在运行一次,会发现methods数组大小变为1,只有setA()方法了。然而,再运行一次,methods数组大小又恢复为2 了,里面方法为setA(),setB(int a)。造成这种结果的原因是什么,求大神告知
...全文
136 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
ryuugu_rena 2017-02-23
  • 打赏
  • 举报
回复
还有你setA方法里没参数,System.out.println(p[0].getName());//2这句话有时会报错。
ryuugu_rena 2017-02-23
  • 打赏
  • 举报
回复
和主线程冲突了,methods[2].getName()变为methods[1].getName()就没事了,这样数组就不会越界了。这是由于线程的执行顺序导致的数组的变化。

51,409

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧