现在的位置: 首页 > 综合 > 正文

java反射机制——解析

2013年01月21日 ⁄ 综合 ⁄ 共 3375字 ⁄ 字号 评论关闭
文章目录

1、java反射机制定义

所谓的反射机制就是java语言在运行时拥有一项自观的能力。通过这种能力可以彻底的了解自身的情况为下一步的动作做准备。例如,使用它能获得 Java 类中各成员的名称并显示出来

2、java反射机制的关键类

Java的反射机制的实现要借助于4个类:class,Constructor,Field,Method;

     class——类对象,

    Constructor——类的构造器对象,

    Field——类的属性对象,

    Method——类的方法对象。通过这四个对象我们可以粗略的看到一个类的各个组 成部分。

3、java反射机制事例

1)class——类对象用 java.lang.Class 类来描述类和接口等。

package com.centit.reflect;
import java.lang.reflect.Method;
/**
 * @author zjh
 * 
 */
class Person{
	private String name;
	private int age;

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}

	public Person(String name, int age) {
		super();
		this.name = name;
		this.age = age;
	}

	public Person() {
		super();
	}

}

public class DumpMethods {

	public static void main(String[] args) {
		try {
			//定义一个Person实例对象
			Person man=new Person("测试",30);
			//获得一个 Class 对象的方法
			Class manClass=man.getClass();
			//获得一个 Class 对象的方法
			Class womanClass=Class.forName("com.centit.reflect.Person");
			//获得一个 Class 对象的方法
			Class boyClass=Person.class;
			System.out.println(manClass.getName());
			System.out.println(womanClass.getName());
			System.out.println(boyClass.getName());
		} catch (Throwable e) {
			System.err.println(e);
		}
	}

}
输出结果:
com.centit.reflect.Person
com.centit.reflect.Person
com.centit.reflect.Person
2)Constructor——类的构造器对象
 
public class DumpMethods {

	public static void main(String[] args) {
		try {
			//定义一个Person实例对象
			Person man=new Person("测试",30);
			Class manClass=man.getClass();
			//获取构造对象
			Constructor manCon[]=manClass.getDeclaredConstructors();
			for(int i=0;i<manCon.length;i++){
				Constructor con=manCon[i];
				System.out.println("name========"+con.getName());
				System.out.println("decl class========="+con.getDeclaringClass());
				Class param[]=con.getParameterTypes();
				for(int j=0;j<param.length;j++){
					System.out.println("param------"+param[j]);
				}
			}
		} catch (Throwable e) {
			System.err.println(e);
		}
	}

}

输出结果:

name========com.centit.reflect.Person
decl class=========class com.centit.reflect.Person
param------class java.lang.String
param------int
name========com.centit.reflect.Person
decl class=========class com.centit.reflect.Person

3)Field——类的属性对象

public class DumpMethods {

	public static void main(String[] args) {
		try {
			//定义一个Person实例对象
			Person man=new Person("测试",30);
			Class manClass=man.getClass();
			Field manField[]=manClass.getDeclaredFields();
			for(int i=0;i<manField.length;i++){
				Field fie=manField[i];
				System.out.println("name====="+fie.getName());
				System.out.println("type====="+fie.getType());
			}
		} catch (Throwable e) {
			System.err.println(e);
		}
	}

}

4) Method——类的方法对象

public class DumpMethods {

	public static void main(String[] args) {
		try {
			// 定义一个Person实例对象
			Person man = new Person("测试", 30);
			Class manClass = man.getClass();
			Method manMethod[] = manClass.getDeclaredMethods();
			for (int i = 0; i < manMethod.length; i++) {
				Method m = manMethod[i];
				System.out.println("name = " + m.getName());
				System.out.println("decl class = " + m.getDeclaringClass());
				Class pvec[] = m.getParameterTypes();
				for (int j = 0; j < pvec.length; j++)
					System.out.println("param #" + j + " " + pvec[j]);
				Class evec[] = m.getExceptionTypes();
				for (int j = 0; j < evec.length; j++)
					System.out.println("exc #" + j + " " + evec[j]);
				System.out.println("return type = " + m.getReturnType());
				System.out.println("-----");

			}
		} catch (Throwable e) {
			System.err.println(e);
		}
	}

}

输出结果:

name = getName
decl class = class com.centit.reflect.Person
return type = class java.lang.String
-----
name = setName
decl class = class com.centit.reflect.Person
param #0 class java.lang.String
return type = void
-----
name = getAge
decl class = class com.centit.reflect.Person
return type = int
-----
name = setAge
decl class = class com.centit.reflect.Person
param #0 int
return type = void
-----

 

【上篇】
【下篇】

抱歉!评论已关闭.