黑马程序员--JDK1.5新特性(二)

长平狐 发布于 2013/07/01 15:31
阅读 62
收藏 0

----------------------android培训java培训、期待与您交流!----------------------

Java反射机制定义:
Java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性、方法、构造方法、修饰符、包等信息,这些信息就是用相应类的实例来表示。这种动态获取的信息以及动态调用对象的方法的功能称为反射机制。总结成一句话:把java类中的各种成分映射成相应的java类。
Java反射机制主要提供的功能:

  1. 在运行时判断任意一个对象所属的类;
  2. 在运行时构造任意一个类的对象;
  3. 在运行时判断任意一个类所具有的成员变量和方法;
  4. 在运行时调用任意一个对象的方法;生成动态代理。
反射机制的基础(Class类)
java程序中各个java类属于同一类事物,描述这类事物的java类名就是Class。Class类的实例对象对应各个类在内存中的字节码。


如何得到各个字节码对应的实例对象 (Class 类型 )
1) 类名 .class
2) 对象 .getClass()
3) Class.rotName("类名")
九个预定义Class实例对象:(boolean、byte、char、short、int、long、float 和 double)和关键字 void 也表示为 Class 对象。只要在源程序中出现的类型,都有各自的Class实例对象。


Constructor类代表类中的一个构造方法
1)得到某个类中的所有构造方法   

Constructor c[] = Class.forName("java.lang.String").getConstructor();
2 ) 得到某一个构造方法
Constructor c = Class.forName("java.lang.String").getConstructor(StringBuffer("abc"));
3 ) 创建实例对象
     通常方式:
String s = new String(new StringBuffer("abc"));
     反射方式:

String s = (String)constructor.newInstance(new StringBuffer("abc"));
Field类代表一个类中的一个成员变量

import java.lang.reflect.Field;
public class TestField {
	public static void main(String[] args) throws Exception{
		Point p = new Point(4,5);
		Field y = Class.forName("Point").getField("y");
		System.out.println(y.get(p));
		//Filed x = Class.forName("cn.itheima.test.Point").getField("x");返回已加载类声明的所有public成员变量的Field对象,包括从父类继承过来的成员变量,参数name指定成员变量的名称
		Field x = Class.forName("Point").getDeclaredField("x");//可以获取不能获取从父类那继承过来的成员变量
		x.setAccessible(true);
		System.out.println(x.get(p));
	}
}
class Point{
    private int x;
    public int y;
    public  Point(int x,int y){
    	super();
        this.x=x;
        this.y=y;
    }
}

Method类代表某个类中的一个成员方法
---得到一个类中的某一个类:
Method  charAt= Class.forName("java.lang.String").getMethod("charAt",int .class);
---调用方法:
通常方式:System.out.println("abc".charAt(1));
反射方式:System.out.println(charAt.invoke("abc",1));//如果传递给Method对象的invoke方法的第一个参数为null,说明该对象对应的是一个静态方法
---jdk1.4和 jdk1.5的ivoke方法的区别
jdk1.4:public Object invoke(Object obj,Object[] obj);
jdk1.5:public Object invoke(Object obj,Object... args);


----------------------android培训java培训、期待与您交流!----------------------


原文链接:http://blog.csdn.net/voiceofnet/article/details/7257138
加载中
返回顶部
顶部