反射机制详解

来源:互联网 发布:淘宝能搜索图片吗 编辑:程序博客网 时间:2024/06/07 19:52
import java.lang.reflect.Method;public class TestReflection {public static void main(String[] args) throws Exception {String str = "Other";Class c=Class.forName("com.yangfan.反射.Other");Object object = c.newInstance();System.out.println(object);Method[] method = c.getMethods();for(Method m:method){if (m.getName().equals("Imple")) {System.out.println("被调用方法名称:"+m.getName());m.invoke(object, 1001,1002);//这是一个可变参数!}}}}/*Other.clas is loaded!Other is intingcom.yangfan.反射.Other@c17164被调用方法名称:Imple我是Imple方法!传入参数为:10012003 */ class Other{  static{ System.out.println("Other.clas is loaded!"); } public Other(){ System.out.println("Other is inting"); } public void Imple(int i,int j){ System.out.println("我是Imple方法!传入参数为:"+i); int k=i+j; System.out.println(k); }  }


1.学习反射前先了解classloader,下面这些是jdk已有的classloader ,其中bootstrap是c写的,最先启动加载java核心类的classloader 如String类

 

2.jdk classloader的层次关系,注意这是对象这间的关系,不是类的继承关系,对象间的子对象有指向父对象的引用,

  

用一个小的while可以得出所有的classloader

public class ClassLoaderTest {public static void main(String[] args) {// TODO Auto-generated method stub//System.out.println(ClassLoaderTest.class.getClassLoader().getClass().getName());ClassLoader c = ClassLoaderTest.class.getClassLoader();while (c!=null) {System.out.println(c.getClass().getName());c = c.getParent();}}结果:sun.misc.Launcher$AppClassLoader              sun.misc.Launcher$ExtClassLoader}


 

 

 

原创粉丝点击