博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
简单理解Java反射机制
阅读量:5162 次
发布时间:2019-06-13

本文共 2493 字,大约阅读时间需要 8 分钟。

JAVA反射机制:在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能给调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为JAVA语言的反射机制。这个机制允许程序在运行时透过Reflection APIs取得任何一个已知名称的class的内部信息,包括其modifiers(诸如public, static 等)、superclass(例如Object)、实现之interfaces(例如Cloneable),也包括fields和methods的所有信息,并可于运行时改变fields内容或唤起methods。

 

JAVA反射机制提供的功能:

    1.在运行时判断任意一个对象所属的类

    2.在运行时构造任意一个类的对象

    3.在运行时判段任意一个类所具有的成员变量和方法

    4.在运行时调用任一个对象的方法

    5.在运行时创建新类对象

    6.在使用Java的反射功能时,基本首先都要获取类的Class对象,再通过Class对象获取其他的对象。

 

JAVA获取类Class对象的方式(Reflects为自定义的一个类):

//通过Class.forName的方式。好像JDBC常用到这个的!Class reflects_1 = Class.forName("Reflects");            //java中每个类都有自己的class属性 Class reflects_2 = Reflects.class;            //java语言中任何一个java对象都有getClass 方法 Reflects reflects = new Reflects();Class reflects_3 = reflects.getClass();

获取类的Fields:

可以通过反射机制得到某个类的某个属性,然后改变对应于这个类的某个实例的该属性值。JAVA 的Class<T>类提供了几个方法获取类的属性。

public  getField( name) 返回一个 Field 对象,它反映此 Class 对象所表示的类或接口的指定公共成员字段
public [] getFields() 返回一个包含某些 Field 对象的数组,这些对象反映此 Class 对象所表示的类或接口的所有可访问公共字段
public  getDeclaredField( name) 返回一个 Field 对象,该对象反映此 Class 对象所表示的类或接口的指定已声明字段
public [] getDeclaredFields()

返回 Field 对象的一个数组,这些对象反映此 Class 对象所表示的类或接口所声明的所有字段

Class
c = Class.forName("java.lang.Integer");//获取所有的属性? Field[] fs = c.getDeclaredFields(); //定义可变长的字符串,用来存储属性 StringBuffer sb = new StringBuffer(); //里边的每一个属性 for(Field field:fs){ sb.append("\t");//空格 sb.append(Modifier.toString(field.getModifiers())+" ");//获得属性的修饰符,例如public,static等等 sb.append(field.getType().getSimpleName() + " ");//属性的类型的名字 sb.append(field.getName()+";\n");//属性的名字 } System.out.println(sb);

获取类的Methon:

通过反射机制得到某个类的某个方法,然后调用对应于这个类的某个实例的该方法,Class<T>类提供了几个方法获取类的方法。

public Method ( name, <?>... parameterTypes)

返回一个 Method 对象,它反映此 Class 对象所表示的类或接口的指定公共成员方法

public Method[] ()

返回一个包含某些 Method 对象的数组,这些对象反映此 Class 对象所表示的类或接口(包括那些由该类或接口声明的以及从超类和超接口继承的那些的类或接口)的公共 member 方法

public Method ( name, <?>... parameterTypes)

返回一个 Method 对象,该对象反映此 Class 对象所表示的类或接口的指定已声明方法

public Method [] ()

返回 Method 对象的一个数组,这些对象反映此 Class 对象表示的类或接口声明的所有方法,包括公共、保护、默认(包)访问和私有方法,但不包括继承的方法

Class
c = Class.forName("java.lang.Integer"); Method[] mts = c.getDeclaredMethods(); StringBuffer sb = new StringBuffer(); for(Method m : mts){ sb.append("\t"); sb.append(Modifier.toString(m.getModifiers())+ " " ); sb.append(m.getReturnType().getSimpleName()+" "); sb.append(m.getName()+"\n"); }
System.out.println(sb);

 

转载于:https://www.cnblogs.com/hl-m-lemontree/p/5868742.html

你可能感兴趣的文章
如何在键盘出现时滚动表格,以适应输入框的显示
查看>>
超级强大的鼠标手势工具
查看>>
常用Dockerfile举例
查看>>
jquery的ajax用法
查看>>
设计模式-策略模式(Strategy)
查看>>
django orm 数据查询详解
查看>>
JarvisOJ Basic 熟悉的声音
查看>>
C# list导出Excel(二)
查看>>
CAS 单点登录模块学习
查看>>
跟着辛星用PHP的反射机制来实现插件
查看>>
Android应用开发-网络编程①
查看>>
input中的name,value以及label中的for
查看>>
静态库制作-混编(工程是oc为基础)
查看>>
jQuery 显示加载更多
查看>>
代理模式
查看>>
Confluence 6 系统运行信息中的 JVM 内存使用情况
查看>>
Confluence 6 升级以后
查看>>
用JS实现版面拖拽效果
查看>>
二丶CSS
查看>>
《avascript 高级程序设计(第三版)》 ---第二章 在HTML中使用Javascript
查看>>