java反射

您所在的位置:网站首页 java反射有什么缺点 java反射

java反射

2022-06-10 03:06| 来源: 网络整理| 查看: 265

一、什么是反射:

 

 

      

反射的概念是由

Smith

1982

年首次提出的,主要是指程序可以访问、检测和修

改它本身状态或行为的一种能力。

这一概念的提出很快引发了计算机科学领域关于应用

反射性的研究。它首先被程序语言的设计领域所采用

,

并在

Lisp

和面向对象方面取得了

成绩。其中

LEAD/LEAD++ 

OpenC++ 

MetaXa

OpenJava

等就是基于反射机制的

语言。最近,反射机制也被应用到了视窗系统、操作系统和文件系统中。

 

 

 

      

反射本身并不是一个新概念,尽管计算机科学赋予了反射概念新的含义。在计算机

科学领域,

反射是指一类应用,

它们能够自描述和自控制。也就是说,

这类应用通过采

用某种机制来实现对自己行为的描述(

self-representation

)和监测(

examination

,并能

根据自身行为的状态和结果,调整或修改应用所描述行为的状态和相关的语义。

 

 

 

二、什么是

Java

中的类反射:

 

 

       

Reflection 

 

Java 

程序开发语言的特征之一,它允许运行中的

 

Java 

程序对自身

进行检查,或者说

自审

,并能直接操作程序的内部属性和方法。

Java 

的这一能力在

实际应用中用得不是很多,

但是在其它的程序设计语言中根本就不存在这一特性。

例如,

Pascal

或者

 

C++ 

中就没有办法在程序中获得函数定义相关的信息。

 

 

Reflection 

 

Java 

被视为动态

(或准动态)

语言的关键,

允许程序于执行期

 

Reflection 

APIs 

取得任何已知名称之

 

class 

的內部信息,包括

 

package

type 

parameters

superclass

implemented interfaces

inner classes, outer class, fields

constructors

methods

modifiers

,並可于执行期生成

instances

、变更

 

fields 

內容或唤起

 

methods

 

 

 

三、

Java

类反射中所必须的类:

 

 

      

Java

的类反射所需要的类并不多,

它们分别是:

Field

Constructor

Method

Class

Object

,下面我将对这些类做一个简单的说明。

 

 

Field

类:提供有关类或接口的属性的信息,以及对它的动态访问权限。反射的字段可

能是一个类

(静态)

属性或实例属性,

简单的理解可以把它看成一个封装反射类的属性

的类。

 

 

Constructor

类:

提供关于类的单个构造方法的信息以及对它的访问权限。

这个类和

Field

类不同,

Field

类封装了反射类的属性,而

Constructor

类则封装了反射类的构造方法。

 

 

Method

类:提供关于类或接口上单独某个方法的信息。所反映的方法可能是类方法或

实例方法(包括抽象方法)

 

这个类不难理解,它是用来封装反射类方法的一个类。

 

 

Class

类:类的实例表示正在运行的

 

Java 

应用程序中的类和接口。枚举是一种类,注

释是一种接口。每个数组属于被映射为

 

Class 

对象的一个类,所有具有相同元素类型

和维数的数组都共享该

 

Class 

对象。

 

 

Object

类:每个类都使用

 

Object 

作为超类。所有对象(包括数组)都实现这个类的方

法。

 

 

 

四、

Java

的反射类能做什么:

 

 

       

看完上面的这么多我想你已经不耐烦了,

你以为我在浪费你的时间,

那么好吧!

面我们就用一些简单的小例子来说明它。

 

 

       

首先我们来看一下通过

Java

的反射机制我们能得到些什么。

 

 

       

首先我们来写一个类:

 

 

import java.awt.event.ActionListener; 

 



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3