java反射机制(1)

java反射概述

Java反射( Reflection )是Java非常重要的动态特性,通过使用反射我们不仅可以获取到任何类的
成员方法( Methods)、成员变量( Fields )、构造方法( Constructors )等信息,还可以动态
创建Java类实例、调用任意的类方法、修改任意的类成员变量值等。Java反射机制是Java语言的动态性的重要体现,也是Java的各种框架底层实现的灵魂。

1.什么是类对象

• 类的对象:基于某个类 new 出来的对象,也称为实例对象。
• 类对象:类加载的产物,封装了一个类的所有信息(类名、父类、接口、
属性、方法、构造方法)

2.获取类对象的三种方法

• 通过类的对象,获取类对象
• Student s = new Student();
• Class c = s.getClass();
• 通过类名获取类对象
• Class c = 类名.class;(不算反射)
• 通过静态方法获取类对象
• Class c=Class.forName(“包名.类名”);

3.反射java.lang.Runtime

依靠java.lang.Runtime中的exec方法命令执行。

代码展示:

package com.rayxxx; import java.lang.reflect.Method; public class ceshi { public static void main(String[] args) throws Exception{ Class clazz = Class.forName("java.lang.Runtime"); Method execMethod = clazz.getMethod("exec", String.class); Method getRuntimeMethod = clazz.getMethod("getRuntime"); Object runtime = getRuntimeMethod.invoke(clazz); execMethod.invoke(runtime, "calc.exe"); } }

代码分析:

1.Class clazz = Class.forName("java.lang.Runtime");// 获取Runtime类对象

2.Method execMethod = clazz.getMethod("exec", String.class);//获取 Runtime.exec方法

3.Method getRuntimeMethod = clazz.getMethod("getRuntime");//获取 Runtime.getRuntime方法

4.Object runtime = getRuntimeMethod.invoke(clazz);//invoke执行getRuntime方法

4.反射调用类方法

获取当前类所有的成员方法:

Method[] methods = clazz.getDeclaredMethods()

获取当前类指定的成员方法:

Method method = clazz.getDeclaredMethod("方法名"); Method method = clazz.getDeclaredMethod("方法名", 参数类型如String.class,多个参数用","号隔开);

反射调用方法

获取到java.lang.reflect.Method对象以后我们可以通过Methodinvoke方法来调用类方法。

调用类方法代码片段:

method.invoke(方法实例对象, 方法参数值,多个参数值用","隔开);

5.反射调用成员变量

获取当前类的所有成员变量:

Field fields = clazz.getDeclaredFields();

获取当前类指定的成员变量:

Field field = clazz.getDeclaredField("变量名");

getFieldgetDeclaredField的区别同getMethodgetDeclaredMethod

获取成员变量值:

Object obj = field.get(类实例对象);

修改成员变量值:

field.set(类实例对象, 修改后的值);

6.总结常用方法

• public String getName()
• public Package getPackage()
• public Class getSuperclass()** **• public Class[] getInterfaces()
• public Field[] getFields()
• public Method[] getMethods()
• public Constructor<?>[] getConstructors()
• public T newInstance()


__EOF__

本文作者许公子Ray
本文链接https://www.cnblogs.com/rayob1/p/16468448.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   Ray言午  阅读(142)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决
· 提示词工程——AI应用必不可少的技术
点击右上角即可分享
微信分享提示