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;
|
- 23:00
- 浏览 (56)
- 论坛浏览 (135)
- 评论 (0)
- 相关推荐
发表评论
该博客是同时发布到论坛的,无法评论在论坛已被锁定的帖子
我的相册
IMG_9122
共 1 张
共 1 张
最近加入圈子
最新评论
-
Spring中的事务传播机制
引用
-- by zhs861025 -
映射好友信息
自己解决了 还是谢谢
-- by lzg3267373 -
映射好友信息
你好,我遇到了一样的问题 请问你的friends表是如何映射的 给出xml文件参 ...
-- by lzg3267373 -
Hibernate 高级映射技术 ...
谢谢大家:)
-- by chen-516888 -
Hibernate 高级映射技术 ...
这个还是用关联表更好些。
-- by marcian







评论排行榜