2008-07-19

Java Reflection

关键字: java

  说到动态语言大家都会想到Perl,Python,Ruby;一般来说,动态语言的特性是 能在运行的时候改变程序的结构或者变量的类型,以此来说,Java ,C#,C++ 不是动态语言。

  虽然如此定义下Java不是动态语言,但是Java有着动态机制:Reflection。这指的是我们在Java程序运行的时候能够动态的加载,获知和使用编译时期完全未知的Java Classes 。换句话说,Java程序可以加载一个运行时才得知名称的class,获悉其完整构造,并生成其对象实体,或对field设值,或唤起methods。

  说起Java Reflection 就必须提及Class 这个类。

  Class 十分特殊。它和一般class一样继承自Object,其实体用以表达Java程序运行时的类或接口,也用来表达enum、array、primitive Java types(boolean, byte, char, short, int, long, float, double)以及关键词void。当一个class被加载,或当加载器(class loader)的defineClass()被JVM调用,JVM 便自动产生一个Class object。这个类没有Constructor。

 

Java 允许我们从多种管道为一个 class 生成对应的 Class object

Class object 
                                示例
运用 getClass()
注:每个 class 都有此函数
String str = "abc";
Class c1 = str.getClass();
运用
Class.getSuperclass() 2
Button b = new Button();
Class c1 = b.getClass();
Class c2 = c1.getSuperclass();
运用 static method
Class.forName()
(最常被使用)
Class c1 = Class.forName ("java.lang.String");
Class c2 = Class.forName ("java.awt.Button");
Class c3 = Class.forName ("java.util.LinkedList$Entry");
Class c4 = Class.forName ("I");
Class c5 = Class.forName ("[I");
运用
.class 语法
Class c1 = String.class;
Class c2 = java.awt.Button.class;
Class c3 = Main.InnerClass.class;
Class c4 = int.class;
Class c5 = int[].class;
运用
primitive wrapper classes
TYPE 语法
 
Class c1 = Boolean.TYPE;
Class c2 = Byte.TYPE;
Class c3 = Character.TYPE;
Class c4 = Short.TYPE;
Class c5 = Integer.TYPE;
Class c6 = Long.TYPE;
Class c7 = Float.TYPE;
Class c8 = Double.TYPE;
Class c9 = Void.TYPE;



 

评论
发表评论

该博客是同时发布到论坛的,无法评论在论坛已被锁定的帖子

chen-516888
搜索本博客
博客分类
我的相册
1a8a55a2-8a9d-35ea-bba5-9d7fc566e002-thumb
IMG_9122
共 1 张
最近加入圈子
存档
最新评论