#Java-JDK7、8的时间相关类,包装类
1. JDK7-Date类
我们先来看时间的相关知识点
-
世界标准时间:
格林尼治时间/格林威治时间(Greenwich Mean Time)简称GMT。目前世界标准时间(UTC)已经替换为:原子钟 -
中国标准时间: 世界标准时间+8小时
时间单位换算:
-
1秒=1000毫秒
-
1毫秒=1000微秒
-
1微秒=1000纳秒
Date类
Date类是一个JDK写好的Javabean类,用来描述时间,精确到毫秒。
- 利用空参构造创建的对象,默认表示系统当前时间。
- 利用有参构造创建的对象,表示指定的时间。
我们给出一些常用的方法和构造方法:
- 构造方法
| 方法 | 说明 |
|---|---|
| public Date() | 创建Date对象,表示当前时间 |
| public Date(long date) | 创建Date对象,表示指定时间 |
- 成员方法
| 方法 | 说明 |
|---|---|
| public void setTime(long time) | 设置/修改毫秒值 |
| public long getTime() | 获取时间对象的毫秒值 |
代码示例:
Date d1 = new Date();
System.out.println(d1);
//表示一个指定的时间
Date d2 = new Date(1000L);
System.out.println(d2);
//设置一个时间
d2.setTime(1000L);//从时间原点开始设置
System.out.println(d2);
//获取当前时间的毫秒值
long time = d2.getTime();//返回值为long类型
System.out.println(time);
输出结果为:

这里给上其他例子:
- 获取时间原点一年以后的时间
- 随机创建两个时间对象并比较
代码示例:
System.out.println("--------------------");
//时间原点一年以后的时间
long time1 = 1000L * 60 * 60 * 24 * 365;
Date d3 = new Date(time1);
System.out.println(d3);
System.out.println("--------------------");
//获取两个随机时间
Random r = new Random();
Date d4 = new Date(Math.abs(r.nextInt()));
Date d5 = new Date(Math.abs(r.nextInt()));
System.out.println(d4);
System.out.println(d5);
//时间的比较使用gettime方法即可
2. JDK7-SimpleDateFormat类
这个类主要有两个作用:
- 把时间变成我们想要的格式
- 把字符串表示的时间变成Date对象
下面我们介绍构造方法和常用的成员方法:
#构造方法
public SimpleDateFormat() : 默认格式
public SimpleDateFormat(String pattern) : 指定格式
#成员方法
public final String format(Date date) : 格式化(日期对象->字符串)
public Date parse(String source) : 解析(字符串->日期对象)
public SimpleDateFormat(String pattern)中的pattern是这个类的一个成员变量,表述时间的格式。
- 如果使用空参构造那么格式化的时候就会是:年/月/日/ 上午/下午 时:分:秒
- 使用带参数构造方法:传入格式
传入的格式:(常用格式-来自黑马程序员)

代码示例:
//1.利用空参构造创建SimpleDateFormat对象,默认格式
SimpleDateFormat sdf1 = new SimpleDateFormat();
Date d1 = new Date(OL);
String str1 = sdf1.format(d1);|
System.out.println(str1);//1970/1/1 1:48:00
//2.利用带参构造创建SimpleDateFormat对象,指定格式
SimpleDateFormat sdf2 = new SimpleDateFormat(pattern:"yyyy|MM]ddHH:mm:ssEE");
String str2 = sdf2.format(d1);
System.out.println(str2);//1970年01月01日 08:00:00
parse(String source) : 字符串->时间对象
//1.定义一个字符串表示时间
String str = "2023-11-11 11:11:11";
//2.利用空参构造创建SimpleDateFormat对象
//细节:
//创建对象的格式要跟字符串的格式完全一致
SimpleDateFormat sdf = new SimpleDateFormat( pattern: "yyyy-MM-dd HH:mm:ss");
Date date = sdf.parse(str);
//3.打印结果
System.out.println(date.getTime());//1699672271000
3.JDK7-Calendar类
Calendar代表了系统当前时间的日历对象,可以单独修改、获取时间中的年,月,日
细节:Calendar是一个抽象类,不能直接创建对象。
获取Calendar日历类对象的方法
public static Calendar getInstance() 获取当前时间的日历对象的子类对象
常用方法:
| 方法名 | 说明 |
|---|---|
| public final Date getTime() | 获取日期对象 |
| public final setTime(Date date) | 给日历设置日期对象 |
| public long getTimeInMillis() | 拿到时间毫秒值 |
| public void setTimeInMillis(long millis) | 给日历设置时间毫秒值 |
| public int get(int field) | 取日历中的某个字段信息 |
| public void set(int field, int value) | 修改日历的某个字段信息 |
| public void add(int field, int amount) | 为某个字段增加/减少指定的值 |
- 获取日历对象
- 细节: Calendar是一个抽象类,不能直接new,而是通过一个静态方法获取到子类对象
- 会根据系统的不同时区来获取不同的日历对象,默认表示当前时间。
- 把会把时间中的纪元,年,月,日,时,分,秒,星期,等等的都放到一个数组当中
Calendar c = Calendar.getInstance();
- 修改一下日历代表的时间
Date d = new Date(OL);
c.setTime(d);
System.out.println(c);
3.get(int field)
首先我们要知道在日历对象数组中数字的意义:
- 月份:范围0~11 如果获取出来的是0.那么实际上是1月。
- 星期: 数字表示略有不同
- 1(星期日)
- 2(星期一)
- 3(星期二)
- 4(星期三)
- 5(星期四)
- 6(星期五)
- 7(星期六)
方法的参数field值为:0,1,2,3,4,5,6,,,16
其中:
- 0 - 纪元
- 1 - 年
- 2 - 月
- 3 - 一年中的第几周
- 4 - 一个月中的第几周
- 5 - 一个月中的第几天
- …
代码示例:
Calendar c = Calendar.getInstance();
System.out.println(c);
System.out.println(c.get(1) + "年" + (c.get(2) + 1) + "月" + c.get(5) + "日");
输出结果为:2024年11月29日
注意:这里月份加一:
(c.get(2) + 1)
set(int field, int value)和add(int field, int amount)
使用获取的日历对象调用
在set方法中,field 表示的和上面get方法中的 field一样
后面value表示要修改的值
在add方法中field表示和上述相同,amount表示要增加或者删去的数。
- 要注意的时月份在编译器中的范围是:0-11
- amount为正数表示增加,为负数表示减少
3.JDK8相关时间类
a.为什么要学习JDK8的时间类
- JDK8 的时间类相比于JDK7 在代码上更为简洁和方便
- 更为的安全,JDK8的时间日期对象都是不可变的,解决了多线程环境下导致的环境安全问题
b.JDK8时间相关类的分类
我们按照对比JDK7时间类的方法进行分类:
- 和JDK7中的
Date类相照应:ZoneId:时区Instant:时间戳ZoneDateTime:带时区的时间
- 和
SimpleDateFormat相对应DateTimeFormatter:用于时间格式化和解析
- 和
Calendar类相对应LocalDate:年、月、日LocalTime:时、分、秒LocalDateTime:年、月、日、时、分、秒
- 工具类
Duration: 用于计算两个“时间”间隔(秒,纳秒)Period: 用于计算两个“日期”间隔(年、月、日)ChronoUnit: 用于计算两个“日期”间隔(使用范围更广,要熟练掌握)
c.类的成员方法
-
ZoneIdstatic Set<String> getAvailableZoneIds()———获取Java中支持的所有时区static ZoneId systemDefault()———获取系统默认时区static ZoneId of(String zoneId)——获取一个指定时区
代码示例:
//获取所有时区
Set<String> zoneIds = ZoneId.getAvailableZoneIds();
System.out.println(zoneIds);
//获取当前系统默认时区
ZoneId systemDefault = ZoneId.systemDefault();
System.out.println(systemDefault);
//获取一个指定时区
ZoneId of = ZoneId.of("US/Indiana-Starke");
System.out.println(of);
值得注意的是getAvailableZoneIds()的返回类型是一个集合,这个集合的泛型式String
当然对于第二个默认时区我们可以在电脑的设置上进行修改
- 时间戳
Instant
时间戳获取的式标准时间不带时区
| 方法 | 说明 |
|---|---|
| static Instant now( ) | 获取当前时间的Instant对象(标准时间) |
| static Instant ofXxxx(long epochMilli) | 根据(秒/毫秒/纳秒)获取Instant对象 |
| ZonedDateTime atZone(ZoneId zone) | 指定时区 |
| boolean isXxx(Instant otherInstant) | 判断系列的方法 |
| Instant minusXxx(long millisToSubtract) | 减少时间系列的方法 |
| Instant plusXxx(long millisToSubtract) | 增加时间系列的方法 |
上面的
Xxxx表示这个方法有很多的不同的类型
我们给出代码示例:
Instant now = Instant.now();
System.out.println(now);
//根据传入的时间获取对象(相对于时间原点)
Instant instant = Instant.ofEpochMilli(1000L);
Instant instant1 = Instant.ofEpochSecond(1L);
Instant instant2 = Instant.ofEpochSecond(1L, 1000000000L);
System.out.println(instant);
System.out.println(instant1);
System.out.println(instant2);
//获取指定时区的时间戳
ZonedDateTime zonedDateTime = Instant.now().atZone(ZoneId.of("Asia/Shanghai"));
//1.返回类型式zonedDateTime
//2.需要Instant对象调用
//3.传入的参数式zoneId类型的时区
System.out.println(zonedDateTime);
//判断时间前后
boolean after = instant.isAfter(instant1);
boolean before = instant.isBefore(instant2);
System.out.println(after);
System.out.println(before);
//减少时间
Instant instant3 = instant.minusSeconds(1L);
System.out.println(instant);
System.out.println(instant3);
ZoneDateTime:带时区的时间
方法:
| 方法 | 说明 |
|---|---|
| static ZonedDateTime now() | 获取当前时间的ZonedDateTime对象(带时区) |
| static ZonedDateTime ofXxxx( ) | 获取指定时间的ZonedDateTime对象(带时区) |
| ZonedDateTime withXxx(时间) | 修改时间系列的方法 |
| ZonedDateTime minusXxx(时间) | 减少时间系列的方法 |
| ZonedDateTime plusXxx(时间) | 增加时间系列的方法 |
需要我么注意的是有一个和Instant搭配的用法,我们前面也讲过:
//获取指定时区的时间戳
ZonedDateTime zonedDateTime = Instant.now().atZone(ZoneId.of("Asia/Shanghai"));
//1.返回类型式zonedDateTime
//2.需要Instant对象调用
//3.传入的参数式zoneId类型的时区
System.out.println(zonedDateTime);
同时修改时间的方法可以针对性的修改年份、月份、时、秒等
Instant和ZoneDateTime都是时间对象,主要区别在于前者时获取标准时间对象,后者表示带时区的时间对象
DateTimeFormatter:用于时间格式化和解析
| 方法 | 说明 |
|---|---|
| static DateTimeFormatter ofPattern(格式) | 获取格式对象 |
| String format(时间对象) | 按照指定方式格式化 |
代码示例:
//获取时间对象
ZonedDateTime time = Instant.now().atZone(ZoneId.of("Asia/Shanghai"));
// 解析/格式化器
DateTimeFormatter dtf1 = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm: ss EE a");
// 格式化
System.out.println(dtf1.format(time));
LocalDateTime及相关
| 方法名 | 说明 |
|---|---|
| static XXX now() | 获取当前时间的对象 |
| static XXX of(. . . ) | 获取指定时间的对象 |
| get开头的方法 | 获取日历中的年、月、日、时、分、秒等信息 |
| isBefore, isAfter | 比较两个 LocalDate |
| with开头的 | 修改时间系列的方法 |
| minus开头的 | 减少时间系列的方法 |
| plus开头的 | 增加时间系列的方法 |
同时LocalDateTime可以转换成LocalDate和LocalTime

方法:
| 方法名 | 说明 |
|---|---|
| public LocalDate toLocalDate() | LocalDateTime转换成一个LocalDate对象 |
| public LocalTime toLocalTime() | LocalDateTime转换成一个LocalTime对象 |
4.包装类
a.什么是包装类
包装类是基本数据类型对应的引用数据类型(对象)
使用包装类是为了数据的统一,因为只有引用数据类型才能使用集合,也只有类才可以使用Object来接收数据
public void show(Object obj){//代码
}
实际上内存原理是:
- 使用一个类的成员变量来记录数值
- 操作数据的方法
内存图:

b. 包装类的分类
| 基本数据类型 | 包装类 |
|---|---|
| byte | Byte |
| short | Short |
| char | Character |
| int | Integer |
| long | Long |
| float | Float |
| double | Double |
| boolean | Boolean |
只有int和char的包装类命名比较特殊,其他都是首字母大写
c.创建一个包装类对象
1.JDK5之前的创建方法
| 方法 | 说明 |
|---|---|
| public Integer(int value) | 根据传递的整数创建一个Integer对象 |
| public Integer(String s) | 根据传递的字符串创建一个Integer对象 |
| public static Integer valueOf(int i) | 根据传递的整数创建一个Integer对象 |
| public static Integer valueOf(String s) | 根据传递的字符串创建一个Integer对象 |
| public static Integer valueOf(String s, int radix) | 根据传递的字符串和进制创建一个Integer对象 |
上面的方法中两个构造方法和三个静态方法,我们介绍它们的区别
Integer i1 = new Integer(1);
Integer i2 = new Integer("2");
//
Integer i3 = Integer.valueOf(1);
Integer i4 = Integer.valueOf("3");
Integer i5 = Integer.valueOf("123", 8);
System.out.println(i1);
System.out.println(i2);
System.out.println("---------------");
System.out.println(i3);
System.out.println(i4);
System.out.println(i5);
- 在Java内部对
valueof进行了优化,传入的数值在-128 ~ 127之间时会返回一个固定的对象,对象的地址值是固定的 - 而使用构造方法
new是一定会创建一个新的对象
当然这都是过时的方法,现在不常用了
2. 当前创建包装类对象
我们使用上述的方法创建的包装类在进行运算的时候比较麻烦需要经历以下步骤:
- 把包装类转换为基本数据类型
- 使用基本数据类型进行运算
- 把运算的结果转换为包装类型
在JDK5之后,Java做了优化,把上述的过程直接在底层实现了。我们可以直接使用包装类进行赋值
Integer i = 10;
Integer j = 11;
Integer sum = i + j;
d.Integer类成员方法详解
| 方法 | 说明 |
|---|---|
| public static String toBinaryString(int i) | 得到二进制 |
| public static String toOctalString(int i) | 得到八进制 |
| public static String toHexString(int i) | 得到十六进制 |
| public static int parseInt(String s) | 将字符串类型的整数转成int类型的整数 |
前面三种方法的返回值都是String类型,原因:
- 用基本数据类型长度可能不够
- 返回二进制时候返回的值可能是负数。例如:01101,但是基本数据类型0不可以作为开头
这里详细讲一下字符串转换:
int i = Integer.parseInt( s: "123");
System.out.println(i);
System.out.println(i + 1);//124
String str = "true";
boolean b = Boolean.parseBoolean(str);
System.out.println(b);
java是一种强类型语言(每种数据在java中都有各自的数据类型)在计算的时候,如果不是同一种数据类型,是无法直接计算的。
值得注意的是parseInt(String s)的两点:
- 在类型转换的时候,括号中的参数只能是数字不能是其他,否则代码会报错
- 8种包装类当中,除了Character都有对应的parseXxx的方法,进行类型转换
e.键盘录入nextLine
我们之前使用Scanner对象进行键盘录入的时候会有一点的弊端:
- 比如:nextInt, nextDouble, next等
- 在进行录入的时候如果遇到空格, 回车,制表符时候就停止了
所以在以后我们建议使用nextLine:可以录入一整行的数据,遇到回车停止
- 返回值是
String类型 - 可以使用类型转换的方法,把录入的
String类型的数据转换为我们需要的数据
代码示例:
Scanner scanner = new Scanner(System.in);
System.out.println("请输入一个字符串");
String s = scanner.nextLine();
int i = Integer.parseInt(s);
System.out.println(i);
相关文章:
#Java-JDK7、8的时间相关类,包装类
1. JDK7-Date类 我们先来看时间的相关知识点 世界标准时间: 格林尼治时间/格林威治时间(Greenwich Mean Time)简称GMT。目前世界标准时间(UTC)已经替换为:原子钟中国标准时间: 世界标准时间8小时 时间单位换算: 1秒1000毫秒 1毫秒1000微秒 1微秒1000纳秒 Date类 Date类…...
tc 命令
Windows Network Shaper目前只能在win10及以下版本使用,在github上有源码。 iperf 是一个网络性能测试工具,可以测试网络带宽和延迟。 webrtc M96版本的GCC sudo tc qdisc del dev eth1 root //关闭限速 sudo tc qdisc add dev eth1 root handle 1: ht…...
基于Java Springboot 协同过滤算法音乐推荐系统
一、作品包含 源码数据库设计文档万字全套环境和工具资源部署教程 二、项目技术 前端技术:Html、Css、Js、Vue2、Element-ui 数据库:MySQL 后端技术:Java、Spring Boot、MyBatis 三、运行环境 开发工具:IDEA 数据库&#x…...
MyBatis框架-关联映射
MyBatis关联映射-一对一 1.1 实体关系 实体–数据实体,实体关系指的就是数据与数据之间的关系 例如:订单和商品,用户和角色 实体关系分为以下四种: **一对一关联:**用户表和用户详情表 数据表关系: 主键关…...
Web开发技术栈选择指南
互联网时代的蓬勃发展,让越来越多人投身软件开发领域。面对前端和后端的选择,很多初学者往往陷入迷茫。让我们一起深入了解这两个领域的特点,帮助你做出最适合自己的选择。 在互联网发展的早期,前端开发主要负责页面布局和简单的…...
工具类的魔力:深入理解 Java 的 String、Math 和 Arrays
Java 提供了许多实用的工具类,帮助开发者简化代码,提升效率。这些工具类包含了各种常见的操作,比如字符串处理、数学计算、数组操作等。掌握这些工具类的高效使用方法,不仅能让你写出更简洁、优雅的代码,还能在性能上有…...
Linux下一次性关闭多个同名进程
要一次性关闭多个同名的 Python 进程,例如: 你可以使用以下几种方法。在执行这些操作之前,请务必确认这些进程确实是你希望终止的,以避免意外关闭其他重要的进程。 方法一:使用 pkill 命令 pkill 是一个用于根据名称…...
记录一些虚拟机桥接网络,windows网络遇到的小问题
1 virtual box 桥接的虚拟系统无 ipv4 地址 https://blog.csdn.net/qq_44847649/article/details/122582954 原因是 wlan 无线网卡没开共享给 virtual box host only (之前用过 vmware 也类似) 2 无法两台 windows10 物理机无法相互 ping 通 https://blog.csdn.net/qq_35…...
MATLAB —— 机械臂工作空间,可达性分析
系列文章目录 前言 本示例展示了如何使用可操作性指数对不同类型的机械手进行工作空间分析。工作空间分析是一种有用的工具,可用于确定机器人工作空间中最容易改变末端效应器位置和方向的区域。本示例的重点是利用不同的可操控性指数类型来分析各种机械手的工作空间。了解工作…...
18:(标准库)DMA二:DMA+串口收发数据
DMA串口收发数据 1、DMA串口发送数据2、DMA中断串口接收定长数据包3、串口空闲中断DMA接收不定长数据包4、串口空闲中断DMA接收不定长数据包DMA发送数据包 1、DMA串口发送数据 当串口的波特率大于115200时,可以通过DMA1进行数据搬运,以防止数据的丢失。如…...
【C++】 算术操作符与数据类型溢出详解
博客主页: [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C 文章目录 💯前言💯C 算术操作符详解基本算术操作符整数除法与取模行为类型转换在算术运算中的作用自增与自减操作符 💯数值溢出:当值超出类型范围时数据类型的取值范围…...
柔性芯片:实现万物互联的催化剂
物联网 (IoT) 市场已经非常成熟,麦肯锡预测,物联网将再创高峰,到 2030 年将达到 12.5 万亿美元的估值。然而,万物互联 (IoE) 的愿景尚未实现,即由数十亿台智能互联设备组成,提供大规模洞察和效率。 究竟是…...
FFmpeg 简介与编译
1. ffmpeg 简介: FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。采用LGPL或GPL许可证。它提供了录制、转换以及流化音视频的完整解决方案。它包含了非常先进的音频/视频编解码库libavcodec,为了保证高可移…...
低代码与微服务融合在医疗集团中的补充应用探究
摘要 本论文深入探讨了低代码与微服务融合在医疗系统集群中的应用。分析了其优势,包括提高开发效率、降低技术门槛、灵活适应需求变化和易于维护扩展等;阐述了面临的挑战,如数据安全与隐私保护、技术应用复杂性等;并展望了其在医…...
速盾:高防cdn的搜索引擎回源是什么?
高防CDN(Content Delivery Network)是一种用于加速网站访问速度和增加安全性的服务,它通过将静态和动态内容缓存在全球分布的服务器上,从而将用户请求的响应时间降至最低,并提供有效的防御攻击的能力。在实际使用过程中…...
减少电路和配电系统谐波的五种方法
K 级变压器 ANSI 标准 C57.110-1986 定义了 K 系数来评估电路消耗多少谐波电流并确定该谐波电流的热效应。根据电路 K 系数,变压器按 K 等级制造。值得注意的是,K 级变压器不会减少谐波。K 等级表示变压器承受谐波有害影响的相对能力。K级变压器增加了铁…...
基于Java Springboot Vue3图书管理系统
一、作品包含 源码数据库设计文档万字全套环境和工具资源部署教程 二、项目技术 前端技术:Html、Css、Js、Vue3、Element-ui 数据库:MySQL 后端技术:Java、Spring Boot、MyBatis 三、运行环境 开发工具:IDEA 数据库&#x…...
vue-cli项目质量约束配置
同步发布于我的网站 🚀 package.json scriptslint-stageddevDependencies git-hooksno-eslintdevDependencies - scssdevDependencies - lessengines pre-commit.eslintrc.js.stylelintrc scssless vue.config.jsREADME.md package.json scripts "scripts&…...
第七课 Unity编辑器创建的资源优化_UI篇(UGUI)
上期我们学习了简单的Scene优化,接下来我们继续编辑器创建资源的UGUI优化 UI篇(UGUI) 优化UGUI应从哪些方面入手? 可以从CPU和GPU两方面考虑,CPU方面,避免触发或减少Canvas的Rebuild和Rebatch,…...
【docker】docker build上下文
什么是 Docker Build 上下文? 在 Docker 中,构建上下文(Build Context) 是指在执行 docker build 命令时,Docker 会发送给 Docker 引擎的所有文件和目录的集合。构建上下文包含了 Dockerfile 和用于构建镜像的所有文件…...
测试微信模版消息推送
进入“开发接口管理”--“公众平台测试账号”,无需申请公众账号、可在测试账号中体验并测试微信公众平台所有高级接口。 获取access_token: 自定义模版消息: 关注测试号:扫二维码关注测试号。 发送模版消息: import requests da…...
Docker 离线安装指南
参考文章 1、确认操作系统类型及内核版本 Docker依赖于Linux内核的一些特性,不同版本的Docker对内核版本有不同要求。例如,Docker 17.06及之后的版本通常需要Linux内核3.10及以上版本,Docker17.09及更高版本对应Linux内核4.9.x及更高版本。…...
NLP学习路线图(二十三):长短期记忆网络(LSTM)
在自然语言处理(NLP)领域,我们时刻面临着处理序列数据的核心挑战。无论是理解句子的结构、分析文本的情感,还是实现语言的翻译,都需要模型能够捕捉词语之间依时序产生的复杂依赖关系。传统的神经网络结构在处理这种序列依赖时显得力不从心,而循环神经网络(RNN) 曾被视为…...
Java多线程实现之Thread类深度解析
Java多线程实现之Thread类深度解析 一、多线程基础概念1.1 什么是线程1.2 多线程的优势1.3 Java多线程模型 二、Thread类的基本结构与构造函数2.1 Thread类的继承关系2.2 构造函数 三、创建和启动线程3.1 继承Thread类创建线程3.2 实现Runnable接口创建线程 四、Thread类的核心…...
dify打造数据可视化图表
一、概述 在日常工作和学习中,我们经常需要和数据打交道。无论是分析报告、项目展示,还是简单的数据洞察,一个清晰直观的图表,往往能胜过千言万语。 一款能让数据可视化变得超级简单的 MCP Server,由蚂蚁集团 AntV 团队…...
云原生安全实战:API网关Kong的鉴权与限流详解
🔥「炎码工坊」技术弹药已装填! 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 一、基础概念 1. API网关(API Gateway) API网关是微服务架构中的核心组件,负责统一管理所有API的流量入口。它像一座…...
【JVM面试篇】高频八股汇总——类加载和类加载器
目录 1. 讲一下类加载过程? 2. Java创建对象的过程? 3. 对象的生命周期? 4. 类加载器有哪些? 5. 双亲委派模型的作用(好处)? 6. 讲一下类的加载和双亲委派原则? 7. 双亲委派模…...
push [特殊字符] present
push 🆚 present 前言present和dismiss特点代码演示 push和pop特点代码演示 前言 在 iOS 开发中,push 和 present 是两种不同的视图控制器切换方式,它们有着显著的区别。 present和dismiss 特点 在当前控制器上方新建视图层级需要手动调用…...
Redis:现代应用开发的高效内存数据存储利器
一、Redis的起源与发展 Redis最初由意大利程序员Salvatore Sanfilippo在2009年开发,其初衷是为了满足他自己的一个项目需求,即需要一个高性能的键值存储系统来解决传统数据库在高并发场景下的性能瓶颈。随着项目的开源,Redis凭借其简单易用、…...
关于uniapp展示PDF的解决方案
在 UniApp 的 H5 环境中使用 pdf-vue3 组件可以实现完整的 PDF 预览功能。以下是详细实现步骤和注意事项: 一、安装依赖 安装 pdf-vue3 和 PDF.js 核心库: npm install pdf-vue3 pdfjs-dist二、基本使用示例 <template><view class"con…...
