posts - 6,  comments - 7,  trackbacks - 0

1.2 反射

1.2.1 学习笔记

参考资料:Java 2 核心技术I:基础知识(第7版) 5.5 反射

(1) Class

    在程序运行期间,Java运行时系统始终为所有对象的维护一个被称为运行时的类型标识。这个信息保存着每一个对象所有属性的类足迹。虚拟机利用运行信息选择相应的方法执行。

获取Class类对象的三种方法

(a)     getClass()

         Employee e;

         …

         Class cl=e.getClass();

         System.out.println(cl.getName()+“  ” +e.getName());

 Result:

         Employee Harry

(b)    forName()

String className= “java.util.Date ”;

Class cl=Class.forName(className);

(c)    .class

  Class cl1=Date.class;

 Class cl2=int.class;

(2) 反射的分析能力

 示例:

Employee.java:

publicclass Employee {

    private String name;

    privateintage;

    public String getName() {

        returnname;

    }

    publicvoid setName(String name) {

        this.name = name;

    }

    publicint getSalary() {

        returnage;

    }

    publicvoid setSalary(int salary) {

        this.age = salary;

    }

    public Employee(String name, int salary) {

        this.name = name;

        this.age = salary;

    }

}

Test.java

import java.lang.reflect.Field;

publicclass test {

         publicstaticvoid main(String[] args) throws SecurityException,

                            NoSuchFieldException, IllegalArgumentException,

                            IllegalAccessException {

                   Employee zhanjh = new Employee("zhan jh", 1000);

                   Class<?> cl = zhanjh.getClass();

                   Field f = cl.getDeclaredField("name"); // 返回名称为“name”的私有或公有成员(域)

                   f.setAccessible(true); // 非常重要,否则无法调用f.get(zhanjh)方法

                   Object v = f.get(zhanjh);// 返回zhanjh对象中 name成员(域)的值

                   System.out.println(v.toString());

         }

}

/*

 * 运行结果: zhan jh

 */

posted on 2008-02-26 17:09 zhan 阅读(151) 评论(0)  编辑  收藏

只有注册用户登录后才能发表评论。


网站导航:
 
<2008年2月>
272829303112
3456789
10111213141516
17181920212223
2425262728291
2345678

常用链接

留言簿(1)

随笔档案

搜索

  •  

最新评论

阅读排行榜

评论排行榜