java 反射(一)

来源:互联网 发布:linux makefile编写 编辑:程序博客网 时间:2024/06/05 05:31

我们首先来看一个例子

Animal a=new Dog()

首先,我们需要明白JAVA语言的运行机制,Java源文件经过编译,产生与平台无关的.class文件,然后由Java虚拟机(JVM)执行

上面的代码将会产生一个a变量,该变量编译时的类型是Animal,运行时的类型则为Dog.编译时根本无法预知该对象和类术语哪些类,只能靠运行时的信息来发现该对象和类的真是信息,这时候就要用到反射。


反射到底有什么用呢?

下篇文章,将会介绍用反射机制来解析Json.


简单来概括,就是能够分析类的能力的程序称为反射

反射机制可以用来:

1.在运行中分析类的能力

2.在运行中查看对象

3.实现通用的数组操作代码


每个类在被加载后,系统都会为之建立一个java.lang.Class对象,通过该Class对象就可以访问到JVM中的这个类。

获取Class对象有3种方式:

1.使用Class类的forName(String clazzName)静态方法,参数必须包含完整的包名。例如Class.forName(org.test.Animal);

2.调用某个类的class属性。例如Dog.class将会返回Dog类对应的Class对象。

3.调用某个对象的getClass()方法。


一下3中获取方式是一样效果:

Class classA=Class.forName("test.Animal");Class classB=Animal.class;Class classc=new Animal().getClass();

对于"java.lang.String",为了获取该字符串对应的Class对象,我们就只能使第一种方法了。


获取了Class对象后我们应该做什么?当然是对其操作获取信息了。


从Class中获取信息

1.获取Class对象包含的构造器

2.获取Class对象包含的方法

3.获取Class对象包含的Field

4.获取Class对象包含的Annotation

5.获取Class对象包含的内部类

6.获取Class对象包含的外部类

7.获取Class对象多继承的父类,实现的接口

8.获取Class对象包含的修饰符,包名等


可以看出,我们可以通过操作Class获得对应类的信息,甚至是无关权限地访问它的方法或者Field。也就是说我们能访问类的private方法

0 0
原创粉丝点击