您的位置:首页 > 编程语言 > Java开发

Java的反射机制(1)-反射功能的基本介绍

2015-04-23 17:54 246 查看
参考网址: http://my.oschina.net/u/1407116/blog/209417 http://www.cnblogs.com/rollenholt/archive/2011/09/02/2163758.html
在此之前需了解的背景知识:
Class类:
Class的实例表示正在运行的类和接口,基本的数据类型(boolean, byte, char, short, int, long, float, double)以及void也比表示Class对象。

Class 没有公共构造方法。Class 对象是在加载类时由 Java 虚拟机以及通过调用类加载器中的 defineClass 方法自动构造的。(不能直接new出来)

重要方法:
newInstance():创建此Class对象所表示的类的一个对象并返回。只能使用在默认的构造方法中。一定要自己定义无参的构造函数。
getName():以String的形式返回此Class对象所表示的实体(类、接口、数组类、基本类型或void)名称。
forName():返回与带有给定字符串名的类或接口相关联的Class对象,Class的静态方法。

代码:
//直接将People类赋值
Class<?> demo1 = People.class;
//调用Class的静态方法forName,返回一个People,即Class的对象
Class<?> demo2 = Class.forName("www.baidu.com.People");
//通过实例的getClass()方法获取类,赋值给Class
People people = new People();
Class<?> demo3 = people.getClass();

People mPeople = null;
mPeople = (People)demo1.newInstance();

Class<People> demo4 = People.class;
People people2 = null;
people2 = demo4.newInstance();


//demo4中应用了泛型。

这边比较乱,画了个图:



反射机制:
Java反射机制主要提供了以下功能: 在运行时判断任意一个对象所属的类;在运行时构造任意一个类的对象;在运行时判断任意一个类所具有的成员变量和方法;在运行时调用任意一个对象的方法;生成动态代理。

反射使用:
Method是反射最基本的一个类。
getMethod(String name, Class<T>…parameterTypes):返回一个Method对象,它反映此Class对象所表示的类或接口的指定公共成员方法。
invoke(Object obj, Object… agrs):对带有指定参数的指定对象调用由此 Method 对象表示的底层方法。

代码:
Method method[] = demo4.getMethods();
     System.out.println(method[0]);
     System.out.println(method[1]);

输出: public java.lang.String www.baidu.com.People.getAge()
      public void www.baidu.com.People.setAge(java.lang.String)

Method myMethod = demo4.getMethod("sayHi");
myMethod.invoke(demo4.newInstance());

输出:
HelloWorld!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: