java中反射(Reflection)的4个作用
创始人
2025-01-10 04:34:08

java中反射(Reflection)的4个作用

  • 作用1、在运行时判断任意一个对象所属的类
  • 作用2、在运行时构造任意一个类的对象
  • 作用3、在运行时判断任意一个类所具有的成员变量和方法
  • 作用4、在运行时调用任意一个对象的方法
  • 总结


💖The Begin💖点点关注,收藏不迷路💖

反射(Reflection)是Java等编程语言中的一个重要特性,它允许程序在运行时进行自我检查和对内部成员(如字段、方法、类等)的操作。本文将详细介绍反射的主要作用,并通过Java示例来说明。

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

反射提供了getClass()方法,使得我们可以获取对象的运行时类信息。通过这个方法,我们可以判断一个对象属于哪个类。

Object obj = "Hello, Reflection!";   Class objClass = obj.getClass();   System.out.println("对象所属类: " + objClass.getName()); // 输出: 对象所属类: java.lang.String 

作用2、在运行时构造任意一个类的对象

通过反射,我们可以使用Class对象的newInstance()方法(或其替代方法如getDeclaredConstructor().newInstance())来动态地创建类的实例。

try {       Class stringClass = String.class;       Object strInstance = stringClass.getDeclaredConstructor().newInstance();       // 注意:String类有一个无参构造器,否则上述代码会抛出异常       System.out.println("通过反射创建的String实例: " + strInstance); // 输出: 通过反射创建的String实例:    } catch (Exception e) {       e.printStackTrace();   } 

作用3、在运行时判断任意一个类所具有的成员变量和方法

通过反射,我们可以获取类的所有成员变量(字段)和方法,并可以检查它们的修饰符、参数等信息。

Class stringClass = String.class;      // 获取所有公共字段   Field[] fields = stringClass.getFields();   for (Field field : fields) {       System.out.println("公共字段: " + field.getName());   }      // 获取所有方法(包括公共、保护、默认和私有)   Method[] methods = stringClass.getDeclaredMethods();   for (Method method : methods) {       System.out.println("方法: " + method.getName());   } 

作用4、在运行时调用任意一个对象的方法

通过反射,我们可以调用对象的任何可见(public)或私有(private,通过setAccessible(true)方法)方法。

try {       String str = "Hello";       Class stringClass = str.getClass();       Method lengthMethod = stringClass.getMethod("length");       int length = (int) lengthMethod.invoke(str);       System.out.println("字符串长度: " + length); // 输出: 字符串长度: 5   } catch (Exception e) {       e.printStackTrace();   } 

总结

反射提供了强大的运行时操作类、对象、字段和方法的能力,这使得Java等语言更加灵活和动态。

然而,反射也有一些缺点,比如性能开销较大,并且可能会破坏封装性。

在这里插入图片描述


💖The End💖点点关注,收藏不迷路💖

相关内容

热门资讯

玩家必看!炸金花的房卡找谁买/... 微信游戏中心:拼三张房卡,添加微信【33903369】,进入游戏中心或相关小程序,搜索“微信拼三张房...
IA解析/牛牛房卡哪里有卖的海... IA解析/牛牛房卡哪里有卖的海草众厅/微信链接房卡从哪里获取海草众厅是一款非常受欢迎的游戏,咨询房/...
玩家必备!炸金花房卡专卖店联系... 炸金花是一款非常受欢迎的棋牌游戏,咨询房/卡添加微信:82606316许多玩家在游戏中会购买房卡来享...
ia攻略/牛牛房卡批发平台牛至... 微信游戏中心:牛至尊房卡在哪里买打开微信,添加客服微信【88355042】,进入游戏中心或相关小程序...
玩家必看!微信上玩炸金花房卡购... 微信游戏中心:炸金花房卡,添加微信【55051770】,进入游戏中心或相关小程序,搜索“微信炸金花房...