当前位置: 首页 > wzjs >正文

海南省建设工程质量安全检测协会网站最新合肥封闭小区名单

海南省建设工程质量安全检测协会网站,最新合肥封闭小区名单,华池网站建设,购物网站计划书反射能在运行时动态操作类和对象的能力,极大地增强了程序的灵活性。但是反射的使用也伴随着性能开销和安全风险。本文将由博主带你一起深入探讨 Java 反射的核心概念、关键类和方法,以及在日常开发中的应用场景。 本文目录 一、反射的核心概念1. 运行时类…

        反射能在运行时动态操作类和对象的能力,极大地增强了程序的灵活性。但是反射的使用也伴随着性能开销和安全风险。本文将由博主带你一起深入探讨 Java 反射的核心概念、关键类和方法,以及在日常开发中的应用场景。

本文目录

    • 一、反射的核心概念
      • 1. 运行时类型信息
      • 2. 核心类
    • 二、获取 Class 对象的四种方式
      • 1. 类名.class
      • 2. 对象.getClass()
      • 3. Class.forName()
      • 4. 类加载器获取
    • 三、反射操作字段
      • 1. 获取字段
      • 2. 访问私有字段
      • 3. 修改字段值
    • 四、反射调用方法
      • 1. 获取方法
      • 2. 方法调用
      • 3. 静态方法调用
    • 五、反射操作构造方法
      • 1. 创建对象实例
      • 2. 突破单例模式
    • 六、反射性能优化
      • 1. 缓存反射对象
      • 2. 避免频繁反射调用
    • 七、反射在日常工作中的实际应用场景
      • 1. 动态加载插件
      • 2. 单元测试工具
    • 总结

一、反射的核心概念

1. 运行时类型信息

反射允许在运行时获取类的完整结构,包括类名、方法、字段、注解等,并动态操作对象,突破编译时的类型限制。

2. 核心类

  • Class<T>:类的元数据入口,是所有反射操作的起点。
  • Field:代表类的字段信息,可用于获取和设置字段的值。
  • Method:代表类的方法信息,可用于调用类的方法。
  • Constructor<T>:代表类的构造方法信息,可用于创建对象实例。
  • Modifier:用于解析访问修饰符,如 publicprivate 等。


二、获取 Class 对象的四种方式

1. 类名.class

适用于编译时已知类的情况。

Class<User> clazz = User.class;

2. 对象.getClass()

通过对象实例获取其对应的 Class 对象。

User user = new User();
Class<?> clazz = user.getClass();

3. Class.forName()

通过类的全限定名动态加载类,需要处理 ClassNotFoundException

Class<?> clazz = Class.forName("com.shop.ecommerce.User");

4. 类加载器获取

在模块化环境中,可使用类加载器加载类。

ClassLoader loader = Thread.currentThread().getContextClassLoader();
Class<?> clazz = loader.loadClass("com.shop.ecommerce.User");



三、反射操作字段

1. 获取字段

  • getField(String name):仅获取公共字段(包括继承的)。
  • getDeclaredField(String name):获取本类声明的所有字段(包括 private)。

2. 访问私有字段

Field field = clazz.getDeclaredField("字段名");
field.setAccessible(true); //  设置是否可以访问 private
String value = (String) field.get(user);

3. 修改字段值

field.set(user, "newValue"); 



四、反射调用方法

1. 获取方法

  • getMethod(String name, Class<?>... paramTypes):获取公共方法(含继承)。
  • getDeclaredMethod(...):获取本类声明的所有方法。
// 获取 User 类的私有方法
Method method = clazz.getDeclaredMethod("方法名", int.class);
method.setAccessible(true);

2. 方法调用

Object result = method.invoke(user, 100);  // 参数需严格匹配

3. 静态方法调用

Method staticMethod = clazz.getMethod("getDefaultRole");
String role = (String) staticMethod.invoke(null); // 实例参数传 null



五、反射操作构造方法

1. 创建对象实例

Constructor<User> constructor = clazz.getConstructor(String.class, String.class);
User user = constructor.newInstance("user123", "VIP");

2. 突破单例模式

// 反射调用私有构造方法
Constructor<Singleton> constructor = Singleton.class.getDeclaredConstructor();
constructor.setAccessible(true);
Singleton instance = constructor.newInstance();



六、反射性能优化

1. 缓存反射对象

private static final Method calculateDiscountMethod;
static {try {calculateDiscountMethod = User.class.getDeclaredMethod("calculateDiscount", int.class);calculateDiscountMethod.setAccessible(true);} catch (NoSuchMethodException e) {throw new RuntimeException(e);}
}

2. 避免频繁反射调用

反射比直接调用慢 10 - 100 倍,应尽量减少反射调用的频率。



七、反射在日常工作中的实际应用场景

1. 动态加载插件

// 加载支付插件
Class<?> paymentClass = Class.forName("com.shop.payment.AlipayPlugin");
PaymentPlugin plugin = (PaymentPlugin) paymentClass.newInstance();
plugin.process(order);

2. 单元测试工具

// 测试私有方法
public class OrderServiceTest {@Testvoid testPrivateMethod() throws Exception {Method method = OrderService.class.getDeclaredMethod("validateStock", Long.class);method.setAccessible(true);boolean result = (boolean) method.invoke(orderService, 1001L);assertTrue(result);}
}



总结

        合理使用反射可以实现插件化架构、灵活的数据处理。



← 上一篇 Java进阶——Stream流以及常用方法详解
记得点赞、关注、收藏哦!
下一篇 Java进阶——注解一文全懂 →

文章转载自:

http://gr5OWEQr.sLfkt.cn
http://iUUjraTd.sLfkt.cn
http://nqrVgz3r.sLfkt.cn
http://nMJG5HdF.sLfkt.cn
http://oVjZezut.sLfkt.cn
http://aMkGbqig.sLfkt.cn
http://O6Ree8Ix.sLfkt.cn
http://yuJCbSF8.sLfkt.cn
http://J5z9GJOb.sLfkt.cn
http://c6QlLa15.sLfkt.cn
http://CkK7kJ4o.sLfkt.cn
http://ZZa4aw4s.sLfkt.cn
http://039ZFqMT.sLfkt.cn
http://VKBXyBUP.sLfkt.cn
http://BHyuEhct.sLfkt.cn
http://mWbRwSBz.sLfkt.cn
http://ZVbWXgsx.sLfkt.cn
http://MAEno46t.sLfkt.cn
http://x5ZW82eF.sLfkt.cn
http://LdbxbpRf.sLfkt.cn
http://Ve4NGLRT.sLfkt.cn
http://SHJVWIOH.sLfkt.cn
http://ppImYd89.sLfkt.cn
http://GdFNOnhN.sLfkt.cn
http://NtVoT9Yz.sLfkt.cn
http://rBJI9gCB.sLfkt.cn
http://Z0P76gnG.sLfkt.cn
http://WLfN1ibq.sLfkt.cn
http://Y8zAfeaK.sLfkt.cn
http://h0OsPiT1.sLfkt.cn
http://www.dtcms.com/wzjs/780052.html

相关文章:

  • 企业网站建设相关书籍专业网站建设开发
  • 建站图标素材网页设计公司有哪些在包头的
  • 网站建设优化推广教程网页设计制作模板及代码
  • dedecms wap网站模板怎么建立图片的网站吗
  • wordpress网站前端想代理个网站建设平台
  • 商务网站开发源码建设厅教育培训网站
  • 做网站用哪个服务器宣威市网站建设
  • 点开图片跳到网站怎么做杭州正规制作网站公司吗
  • 网站建设服务费如何做会计分录贵州网站推广公司
  • 时间管理系统 网站开发wordpress+制作widget
  • 资源专业网站优化排名精美网站建设
  • 网站建设管理与维护ppt可以网站可以做免费的文案广告语
  • 最新款淘宝客源码整网站程序模板+后台带自动采集商品功能带文章网站关键字太多
  • 福建建设注册中心网站店铺装修设计效果图免费
  • 网站设计就业压力微信软文范例100字
  • 东营做网站的公司古典 网站模板
  • 网站导航栏制作门户建设开源软件
  • 太原免费静态网页制作网站广西崇左市住房和城乡建设局网站
  • 网站建设 策划公司建设哪个方便
  • python策略网站怎么做电影宣传推广方案
  • 新手做网站怎么上传系统网络推广方案写作七步法
  • 一些房产网站是怎么做的动漫设计培训班收费
  • 专业做算命网站wordpress缓存无法清除缓存
  • 厦门网站制作网站建设收费软件专业
  • 如何做门户网站注册公司流程和费用2020
  • 黑龙江省城乡建设厅网站首页wordpress wp_post
  • 什么是网站主办者怎样做网站域名注册
  • 网站后台m旅游网站模板 手机
  • 网站开发搭建合同博客网站建设的流程
  • 外贸网站做纸尿裤怎么样广州网站设计流程