关于java反射机制(基础篇)

时间:2023-02-24 19:08:16

关于java的反射机制,有一些初步的理解,但是依然存在几点困惑。先将自己理解的部分分享其下,并提出困惑,之后完善。

1、 java反射机制是什么?

 

从两个概念切入:反射机制和java反射机制

①反射机制:主要是指程序可以访问、检测和修改它本身状态或行为的一种能力。

②JAVA反射机制:是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。

(概念摘自百度词条。对于程序小白来说是不是觉得一头雾水,似懂非懂?)

#对反射的理解:万事万物都有其外在的具体表现,而外在的表现源于内在的特性和能进行的活动。反射就类似于透过外在看本质的过程,通过外在的表现折射(反射机制)出其内在的特性等。

#对反射机制的理解:对于面向对象的编程语言来说,万事万物都是对象,每个对象都会有不同的职能(外在表现),而能具有不同的职能是由对象本身具有的特性(属性)和行为(方法)决定的;而对这些属性和方法进行探知(访问、检测、修改)的能力就是反射机制。

#对java反射机制的理解:java程序语言具有对对象进行反射的能力,我们将这种能力称为反射机制,而其具体表现为:在程序运行状态中(动态),对任意的类(对象),都能够知道这个类(对象)所有的属性和方法,也同时能调用其任意的属性和方法,java语音所提供的这个功能我们称之为java语言的反射机制。

 

2java反射机制有什么具体的使用?

 

#动态加载:动态加载是与静态加载相对的概念;“静态加载”的类在程序编译的时候就要提供,而动态加载的类在源程序编译时可以缺席(程序运行时才进行加载)。也就是说编译时刻加载的类是静态加载类、运行时刻加载的类是动态加载。使用动态加载,实现了功能模块的无限扩展和程序的*度。通常程序在运行之前需要编译程序所包含的所有类,而设置为动态加载的类则跳过了程序的编译阶段,在真正使用到它的时候才进行加载。

这样做的好处是:假如我们有两个程序员,一个程序员在写程序的时候,需要使用第二个程序员所写的类,但第二个程序员并没完成他所写的类。那么第一个程序员的代码能否通过编译呢?这是不能通过编译的。利用Java反射的机制,就可以让第一个程序员在没有得到第二个程序员所写的类的时候,来完成自身代码的编译。其次在一些软件的自动升级,等功能上都会使用动态加载类的方法。

#获得类的信息:它允许运行中的 Java 程序对自身进行检查,或者说“自审”,并能直接操作程序的内部属性和方法。

 

3、如何使用java反射机制

 

在了解java反射机制的使用方法之前,我们先需要知道几个概念:

#Class类的使用:

在java中除了静态成员和普通数据类型不是对象以外,其余部分都可以看做对象,那类是谁的对象呢?类是java.lang.Class类的对象。即就是说任何一个类都是Class的实例对象,那如何表示?

 关于java反射机制(基础篇)

其中c1、c2、c3都代表了A类的类类型(class type),同时我们完全可以通过类的类类型创建该类的对象实例,即可以通过c1 或 c2 或 c3创建A的对象实例:

 关于java反射机制(基础篇)

此时如果A类中存在方法,就可以通过a1.方法,进行调用。但前提要求是需要有无参数的构造方法。

#动态加载类的使用:

对于Class.forName(“类的全称”),不仅表示了类的类类型,还代表了动态加载类。使用示例代码如下:

 关于java反射机制(基础篇)

关于java反射机制(基础篇)

关于java反射机制(基础篇)

关于java反射机制(基础篇)

代码解释:通过一个OfficeAble接口的方式,实现不同类的加载。通过这样的方式,我们可以动态加载不同的类,只需要修改类名即可,而原来的代码不需要重新编译,只需要写新的类即可。

 

#基本数据类型/引用数据类型对应的类类型:

关于java反射机制(基础篇)

关于java反射机制(基础篇)

 

#通过类类型获得类的信息:

关于java反射机制(基础篇)

 

关于java反射机制(基础篇)

关于java反射机制(基础篇)

关于java反射机制(基础篇)

关于java反射机制(基础篇)

 

#方法反射的基本操作: 

关于java反射机制(基础篇)

关于java反射机制(基础篇)

关于java反射机制(基础篇)

 

 

#通过反射了解集合泛型的本质:

关于java反射机制(基础篇)

关于java反射机制(基础篇)

 

本文关于反射机制使用方法来源:www.imooc.com/learn/199 (慕课网)

 申明:

 本文作者:逍破孩  

 未经许可,不得转载。转载请注明出处。

 注:新晋菜鸟欢迎大家纠错,讨论。