博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
反射基本使用
阅读量:6272 次
发布时间:2019-06-22

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

1、简介

  • 定义:
    JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法;这种动态获取的以及动态调用对象的方法的功能称为Java的反射机制。
  • 反射机制类:
//类 java.lang.Class;  //构造方法 java.lang.reflect.Constructor;//类的成员变量    java.lang.reflect.Field; //类的方法java.lang.reflect.Method;//访问权限java.lang.reflect.Modifier;复制代码

2、反射类

//通过Class类的静态方法——forName()来实现Class
clazz = Class.forName("com.liujian.reflectdemo.Person");复制代码

3、反射创建对象

3.1 不带带参数构造

//Class对象调用newInstance()方法生成Object obj = clazz.newInstance();复制代码

3.2 带参数构造

//对象获得对应的Constructor对象,再通过该Constructor对象的newInstance()方法生成//获取指定声明构造函数Constructor
constructor = clazz.getDeclaredConstructor(new Class[]{String.class});Object obj = constructor.newInstance(new Object[]{
"liujian"});复制代码

4、反射方法

4.1获取所有方法

getMethods(): 获取包括自身和继承过来的所有的public方法   Method[] methods = clazz.getMethods();getDeclaredMethods():获取自身类中所有的方法(不包括继承的,和访问权限无关)     Method[] methods = clazz.getDeclaredMethods();复制代码

4.2获取指定方法

  • 方法范围
getMethod():表示调用指定的一个公共的方法(包括继承的)     getDeclaredMethod:表示调用指定的一个本类中的方法(不包括继承的)复制代码
  • 有无参数
//无参getMethod(String methodName)getDeclaredMethod(String name)//有参getMethod(String methodName,Class<>… parameterTypes)getDeclaredMethod(String name,Class<>… parameterTypes)参数:    methodName: 表示被调用方法的名字    parameterTypes:表示被调用方法的参数的Class类型如String.class复制代码
  • 传参形式
//直接写参数形式Method method = clazz.getMethod("run",String.class);//数组参数形式Method method = clazz.getMethod("run",new class[]{String.class});复制代码

5、反射属性

//获取class对象的所有属性Field[] allFields = clazz.getDeclaredFields();//获取class对象的public属性Field[] publicFields = clazz.getFields();//获取class指定属性Field ageField = clazz.getDeclaredField("age");//获取class指定的public属性Field desField = clazz.getField("des");复制代码

6、调用反射方法

public Object invoke(Object obj,Object… args):表示调用当前Method所表示的方法  参数:        obj: 表示被调用方法底层所属对象(调用静态方法的时可以为nul)             Method m = clz.getMethod("liujun",String.class);        args:表示调用方法是传递的实际参数  返回:        底层方法的返回结果        //如果调用私有方法,应该设置该方法为可访问的method.setAccessible(true);method.invoke(clazz,"liujian");复制代码

转载地址:http://xmlpa.baihongyu.com/

你可能感兴趣的文章
poj-3094-quicksum
查看>>
手写 reactor( netty reactor 模型)
查看>>
【Android 进阶】仿抖音系列之翻页上下滑切换视频(一)
查看>>
ERC230 VS ERC223
查看>>
机器学习实战篇——用卷积神经网络算法在Kaggle上跑个分
查看>>
编译Android内核
查看>>
再谈GC2:Java垃圾收集器与GC日志分析实践
查看>>
IDEA环境下SSM整合------环境配置
查看>>
构建自适应的手机页面
查看>>
YARN的AsyncDispatcher原理
查看>>
[Coursera][From Nand to Tetris / Part I] 第六周 汇编器项目 python 实现
查看>>
阻止了 WannaCry 扩散的研究员承认开发恶意软件
查看>>
云栖大会首设“科技脱贫”专场 ,20张会场门票等你来拿!
查看>>
ZLG 发布开源 GUI 引擎 AWTK
查看>>
一个不可思议的MySQL慢查分析与解决
查看>>
[Cake] 0.C#Make自动化构建-简介
查看>>
《TCP/IP协议》- TCP协议知识目录
查看>>
详尽! Win10安装Java8+Tomcat9!
查看>>
1127
查看>>
一次痛的经历
查看>>