首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

java反照机制——解析

2013-03-22 
java反射机制——解析1、java反射机制定义所谓的反射机制就是java语言在运行时拥有一项自观的能力。通过这种能

java反射机制——解析
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.Personcom.centit.reflect.Personcom.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
-----




 

1楼m1111121昨天 14:10
学习下 希望楼主多发些好文章

热点排行