黑马程序员技术交流社区

标题: 反射的细节问题 [打印本页]

作者: 陈希然    时间: 2011-9-24 14:29
标题: 反射的细节问题
大家学反射都知道,当我们利用反射操作类里面的成员时,为什么操作实例成员还要要传递一个对象给它,而静态成员就不需要传递一个对象给它 ?

如:

public class BirdMan {
public static void cry() {
  System.out.println("I'm crying");
}
public void shout() {
  System.out.println("I'm shouting");
}
public static void main(String[] args) throws Exception {
  
  Class.forName("cn.itcast.draft.BirdMan").getMethod("cry", null).invoke(null, null) ;  //invoke方法没有传递对象
  
  BirdMan bm = new BirdMan() ;
  Class.forName("cn.itcast.draft.BirdMan").getMethod("shout", null).invoke(bm, null) ;  //invoke方法传递了对象
}
}
作者: 匿名    时间: 2011-9-24 15:16
1:文档里面有这样一句话是这样说的@param obj (就是第一个参数) the object the underlying method is invoked from,意思invoke这个方法里的第一个参数是从自身上发起的。
2:静态属性和方法属于类方法,加载类后,就已经存在静态属性和方法,static方法可以不创建实例就能用的
3:JVM把静态方法集中放在某个地方,当要执行某个静态方法,JVM通过类型地址和方法地址在该区域中查找。
所以调用静态方法是不用new的,实例方法就得创建实例




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