Java架构师图谱之基础组件认知2——构建稳固基石,引领技术未来

本文介绍了Java中的反射机制,包括其定义、作用、优缺点;探讨了调度技术,如Timer、ScheduledExecutorService和Quartz框架;并详细解读了Java的封装、继承、多态等特性,以及扩展方法在简化代码中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

继续接着上一篇认知1,我们接着往下看

一、反射

1.1、什么是反射

反射的定义如下:java程序在运行状态中,对于任意一个类,都能够在运行时知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;这种动态获取信息以及动态调用对象方法的功能称为java语言的反射机制。

1.2、反射的作用

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

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

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

4.在运行时调用任意一个对象的成员变量和方法

5.生成动态代理

1.3、优缺点

优点: 可以动态的创建和使用对象(也是框架底层核心),使用灵活,没有反射机制,框架技术就失去底层支撑。

缺点: 使用反射基本是解释执行,对执行速度有影响

二、调度

2.1、Timer类

Timer类的主要作用是设置计划任务,即在指定时间开始执行某一个任务。

2.2、ScheduledExecutorService接口

Java 中的 ScheduledExecutorService 接口用来实现延迟执行或者定时执行的任务

2.3、Quartz框架

Quartz 是开源且具有丰富特性的“任务调度库”,能够集成与任何的 java 应用,小到独立的应用,大至电子商业系统。Quartz 能够创建亦简单亦复杂的调度,以执行上十、上百,甚至上万的任务。任务 job 被定义为标准的 java 组件,能够执行任何你想要实现的功能。Quartz 调度框架包含许多企业级的特性,如 JTA 事务、集群的支持。

三、特性

java特性一般是根据发布的版本来解析,每个版本都有特有的特性,其主要特性有如下:

3.1、封装

封装(Encapsulation)是指将数据和方法封装在类中,使得类内部的数据和方法对外部不可见,只能通过类提供的接口进行访问和操作。封装可以提高代码的安全性和可维护性,同时也能隐藏内部的实现细节,使得类的使用者只需要关注类提供的接口,而不需要了解其具体实现。

封装的特点:

【1】数据隐藏:类的数据只能通过类提供的接口进行访问,对外部不可见。

【2】接口访问:类的接口是公开的,可以被其他类访问和调用。

【3】安全性:封装可以提高代码的安全性,防止外部的错误操作对类的数据产生影响。

【4】可维护性:封装可以隐藏内部的实现细节,使得类的实现可以更加灵活和易于维护。

3.2、继承

继承(Inheritance)是指子类可以继承父类的属性和方法,同时也可以扩展父类的功能。继承可以提高代码的重用性和可扩展性,同时也可以使代码更加简洁和易于理解。

继承的特点:

【1】代码重用:子类可以继承父类的属性和方法,避免了代码的重复编写。

【2】功能扩展:子类可以扩展父类的功能,使得代码更加灵活和可扩展。

【3】继承层次:多层继承可以形成继承层次结构,使得代码的组织和管理更加清晰。

3.3、多态

多态(Polymorphism)是指同一个方法可以被不同的对象调用,产生不同的结果。多态可以提高代码的灵活性和可扩展性,同时也可以使代码更加简洁和易于理解。

多态的特点:

【1】方法重载:同一个方法名可以定义多个不同的参数列表,产生方法重载。

【2】方法重写:子类可以重写父类的方法,产生方法重写。

【3】向上转型:子类对象可以向上转型为父类对象,使得同一个方法可以被不同的对象调用。

【4】运行时绑定:方法调用的具体实现是在运行时动态绑定的,而不是在编译时静态绑定的。

3.4、其他

1、简单易学;2、面向对象,使得代码更加可重用和可维护;3、平台无关性,能在不同的操作系统上运行;4、内存管理,通过自动垃圾回收机制来管理内存;5、强类型检查,变量在使用之前必须先声明类型;6、安全性,可以防止未经授权的访问和恶意代码的执行;7、多线程支持,能提高程序的性能和响应能力;8、异常处理,可以避免程序崩溃;9、大量的开发库和框架;10、开源生态系统。

四、扩展方法

什么是扩展方法

扩展方法,就是能够向现有类型直接“添加”方法,而无需创建新的派生类型、重新编译或以其他方式修改现有类型。调用扩展方法的时候,与调用在类型中实际定义的方法相比没有明显的差异。

为什么需要扩展方法

考虑要实现这样的功能:从 Redis 取出包含多个商品ID的字符串后(每个商品ID使用英文逗号分隔),先对商品ID进行去重(并能够维持元素的顺序),最后再使用英文逗号将各个商品ID进行连接。

传统写法: 

String itemIdStrs = String.join(",", new LinkedHashSet<>(Arrays.asList(str.split(","))));

使用 Stream 写法:

String itemIdStrs = Arrays.stream(str.split(",")).distinct().collect(Collectors.joining(","));

假设在 Java 中能实现扩展方法,并且我们为数组添加了扩展方法 toList(将数组变为 List),为 List 添加了扩展方法 toSet(将 List 变为 LinkedHashSet),为 Collection 添加了扩展方法 join(将集合中元素的字符串形式使用给定的连接符进行连接),那我们将可以这样写代码:

String itemIdStrs = str.split(",").toList().toSet().join(",");

相信此刻你已经有了为什么需要扩展方法的答案:

  • 可以对现有的类库,进行直接增强,而不是使用工具类
  • 相比使用工具类,使用类型本身的方法写代码更流畅更舒适
  • 代码更容易阅读,因为是链式调用,而不是用静态方法套娃
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

京比特科技工作室

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值