一篇讲透Java重构之道

IntelliJ IDEA在Java领域的代码重构实践案例 本文旨在为Java开发者提供IntelliJ IDEA中代码重构的全面指南,从基础到高级技巧,帮助开发者理解并应用这些功能来改善代码质量。介绍代码重构的基本概念详解IntelliJ IDEA的重构功能通过实际案例展示重构过程讨论高级重构技巧和最佳实践重构(Refactoring):在不改变代码外部行为的前提下,改善代码内部结构的过程:集成开发环境,提供编码、调试、测试等功能的软件代码重构就像整理你的房间。 阅读详情
前言

“重构” 这个词对于大部分工程师来说都不陌生。实际上大部分人都只是 “听得多做得少”,真正进行过代码重构的人不多,而把持续重构作为开发的一部分的人,就更是少之又少了。

一方面,重构代码对一个工程师能力的要求,要比单纯写代码高得多。重构需要你能洞察出代码存在的坏味道或者设计上的不足,并且能合理、熟练地利用设计思想、原则、模式、编程规范等理论知识解决这些问题。

另一方面,很多工程师对为什么要重构、到底重构什么、什么时候重构、又该如何重构等相关问题理解不深,对重构没有系统性、全局性的认识,面对一堆烂代码,没有重构技巧的指导,只能想到哪改到哪,并不能全面地改善代码质量。

重构主要包含以下几个方面:

对重构概括性的介绍,包括重构的目的(why)、对象(what)、时机(when)、方法(how);
保证重构不出错的手段,重点讲解单元测试和代码的可测试性;
不同规模的重构,重点讲解大规模高层次重构(比如系统、模块、代码结构、类与类之间的交互等的重构)和小规模低层次重构(类、函数、变量等的重构)。
重构的目的:为什么要重构(why)?
大师是怎么描述重构的。软件设计大师 Martin Fowler 是这样定义重构的:“重构是一种对软件内部结构的改善,目的是在不改变软件的可见行为的情况下,使其更易理解,修改成本更低。”

实际上,当讲到重构的时候,很多书籍都会引用这个定义。这个定义中有一个值得强调的点:“重构不改变外部的可见行为”。我们可以把重构理解为,在保持功能不变的前提下,利用设计思想、原则、模式、编程规范等理论来优化代码,修改设计上的不足,提高代码质量。

简单了解重构的定义之后,我们重点来看一下,为什么要进行代码重构?

首先,重构是时刻保证代码质量的一个极其有效的手段,不至于让代码腐化到无可救药的地步。项目在演进,代码不停地在堆砌。如果没有人为代码的质量负责任,代码总是会往越来越混乱的方向演进。当混乱到一定程度之后,量变引起质变,项目的维护成本已经高过重新开发一套新代码的成本,想要再去重构,已经没有人能做到了。

其次,优秀的代码或架构不是一开始就能完全设计好的,就像优秀的公司和产品也都是迭代出来的。我们无法 100% 遇见未来的需求,也没有足够的精力、时间、资源为遥远的未来买单,所以,随着系统的演进,重构代码也是不可避免的。

最后,重构是避免过度设计的有效手段。在我们维护代码的过程中,真正遇到问题的时候,再对代码进行重构,能有效避免前期投入太多时间做过度的设计,做到有的放矢。

除此之外,重构对一个工程师本身技术的成长也有重要的意义。

从重构的定义来看,重构实际上是对我们学习的经典设计思想、设计原则、设计模式、编程规范的一种应用。重构实际上就是将这些理论知识,应用到实践的一个很好的场景,能够锻炼我们熟练使用这些理论知识的能力。除此之外,平时堆砌业务逻辑,你可能总觉得没啥成长,而将一个比较烂的代码重构成一个比较好的代码,会让你很有成就感。

除此之外,重构能力也是衡量一个工程师代码能力的有效手段。所谓 “初级工程师在维护代码,高级工程师在设计代码,资深工程师在重构代码”,这句话的意思是说,初级工程师在已有代码框架下修改 bug、修改添加功能代码;高级工程师从零开始设计代码结构、搭建代码框架;而资深工程师为代码质量负责,需要发觉代码存在的问题,重构代码,时刻保证代码质量处于一个可控的状态。

重构的对象:到底重构什么(what)?

根据重构的规模,我们可以笼统地分为大规模高层次重构(以下简称为 “大型重构”)和小规模低层次的重构(以下简称为 “小型重构”)。

大型重构指的是对顶层代码设计的重构,包括:系统、模块、代码结构、类与类之间的关系等的重构,重构的手段有:分层、模块化、解耦、抽象可复用组件等等。这类重构的工具就是我们学习过的那些设计思想、原则和模式。这类重构涉及的代码改动会比较多,影响面会比较大,所以难度也较大,耗时会比较长,引入 bug 的风险也会相对比较大。

小型重构指的是对代码细节的重构,主要是针对类、函数、变量等代码级别的重构,比如规范命名、规范注释、消除超大类或函数、提取重复代码等等。小型重构更多的是利用我们能后面要讲到的编码规范。这类重构要修改的地方比较集中,比较简单,可操作性较强,耗时会比较短,引入 bug 的风险相对来说也会比较小。你只需要熟练掌握各种编码规范,就可以做到得心应手。

重构的时机:什么时候重构(when)?

搞清楚了为什么重构,到底重构什么,我们再来看一下,什么时候重构?是代码烂到一定程度之后才去重构吗?当然不是。因为当代码真的烂到出现 “开发效率低,招了很多人,天天加班,出活却不多,线上 bug 频发,领导发飙,中层束手无策,工程师抱怨不断,查找 bug 困难” 的时候,基本上重构也无法解决问题了。

我个人比较反对,平时不注重代码质量,堆砌烂代码,实在维护不了了就大刀阔斧地重构、甚至重写的行为。有时候项目代码太多了,重构很难做得彻底,最后又搞出来一个 “四不像的怪物”,这就更麻烦了!所以,寄希望于在代码烂到一定程度之后,集中重构解决所有问题是不现实的,我们必须探索一条可持续、可演进的方式。

所以,我特别提倡的重构策略是持续重构。平时没有事情的时候,你可以看看项目中有哪些写得不够好的、可以优化的代码,主动去重构一下。或者,在修改、添加某个功能代码的时候,你也可以顺手把不符合编码规范、不好的设计重构一下。总之,就像把单元测试、Code Review 作为开发的一部分,我们如果能把持续重构也作为开发的一部分,成为一种开发习惯,对项目、对自己都会很有好处。

尽管我们说重构能力很重要,但持续重构意识更重要。我们要正确地看待代码质量和重构这件事情。技术在更新、需求在变化、人员在流动,代码质量总会在下降,代码总会存在不完美,重构就会持续在进行。时刻具有持续重构意识,才能避免开发初期就过度设计,避免代码维护的过程中质量的下降。而那些看到别人代码有点瑕疵就一顿乱骂,或者花尽心思去构思一个完美设计的人,往往都是因为没有树立正确的代码质量观,没有持续重构意识。

重构的方法:又该如何重构(how)?

前面我们讲到,按照重构的规模,重构可以笼统地分为大型重构和小型重构。对于这两种不同规模的重构,我们要区别对待。

对于大型重构来说,因为涉及的模块、代码会比较多,如果项目代码质量又比较差,耦合比较严重,往往会牵一发而动全身,本来觉得一天就能完成的重构,你会发现越改越多、越改越乱,没一两个礼拜都搞不定。而新的业务开发又与重构相冲突,最后只能半途而废,revert 掉所有的改动,很失落地又去堆砌烂代码了。

在进行大型重构的时候,我们要提前做好完善的重构计划,有条不紊地分阶段来进行。每个阶段完成一小部分代码的重构,然后提交、测试、运行,发现没有问题之后,再继续进行下一阶段的重构,保证代码仓库中的代码一直处于可运行、逻辑正确的状态。每个阶段,我们都要控制好重构影响到的代码范围,考虑好如何兼容老的代码逻辑,必要的时候还需要写一些兼容过渡代码。只有这样,我们才能让每一阶段的重构都不至于耗时太长(最好一天就能完成),不至于与新的功能开发相冲突。

大规模高层次的重构一定是有组织、有计划,并且非常谨慎的,需要有经验、熟悉业务的资深同事来主导。而小规模低层次的重构,因为影响范围小,改动耗时短,所以,只要你愿意并且有时间,随时都可以去做。实际上,除了人工去发现低层次的质量问题,我们还可以借助很多成熟的静态代码分析工具(比如 CheckStyle、FindBugs、PMD),来自动发现代码中的问题,然后针对性地进行重构优化。

对于重构这件事情,资深的工程师、项目 leader 要负起责任来,没事就重构一下代码,时刻保证代码质量处在一个良好的状态。否则,一旦出现 “破窗效应”,一个人往里堆了一些烂代码,之后就会有更多的人往里堆更烂的代码。毕竟往项目里堆砌烂代码的成本太低了。不过,保持代码质量最好的方法还是打造一种好的技术氛围,以此来驱动大家主动去关注代码质量,持续重构代码。

重点回顾

今天的讲解让你对重构有个正确的、全局性的认知,建立持续重构意识。这可能比教会你一些重构技巧更重要,因为很多技术问题本身就不是单纯靠技术来解决的,更重要的是要有这种认知和意识。

1. 重构的目的:为什么重构(why)?

对于项目来言,重构可以保持代码质量持续处于一个可控状态,不至于腐化到无可救药的地步。对于个人而言,重构非常锻炼一个人的代码能力,并且是一件非常有成就感的事情。它是我们学习的经典设计思想、原则、模式、编程规范等理论知识的练兵场。

2. 重构的对象:重构什么(what)?

按照重构的规模,我们可以将重构大致分为大规模高层次的重构和小规模低层次的重构。大规模高层次重构包括对代码分层、模块化、解耦、梳理类之间的交互关系、抽象复用组件等等。这部分工作利用的更多的是比较抽象、比较顶层的设计思想、原则、模式。小规模低层次的重构包括规范命名、注释、修正函数参数过多、消除超大类、提取重复代码等等编程细节问题,主要是针对类、函数级别的重构。小规模低层次的重构更多的是利用编码规范这一理论知识。

3. 重构的时机:什么时候重构(when)?

我反复强调,我们一定要建立持续重构意识,把重构作为开发必不可少的部分,融入到日常开发中,而不是等到代码出现很大问题的时候,再大刀阔斧地重构。

4. 重构的方法:如何重构(how)?

大规模高层次的重构难度比较大,需要组织、有计划地进行,分阶段地小步快跑,时刻让代码处于一个可运行的状态。而小规模低层次的重构,因为影响范围小,改动耗时短,所以,只要你愿意并且有时间,随时随地都可以去做。

一篇讲透Java重构之道

Java 领域使用 Maven 进行代码重构 代码重构是软件开发过程中不可或缺的环节,它涉及在不改变外部行为的前提下改进代码的内部结构。在 Java 生态系统中,Maven 作为最流行的构建工具之一,为代码重构提供了强大的支持。阐明 Maven 如何简化代码重构过程提供使用 Maven 进行代码重构的系统性方法分享在实际项目中应用 Maven 进行重构的最佳实践解决重构过程中常见的挑战和陷阱本文适用于中小型到大型 Java 项目的重构工作,特别是那些已经使用或计划使用 Maven 作为构建工具的项目。 阅读详情

相关推荐

Java 领域 Eclipse 的代码重构策略

代码重构是软件开发过程中至关重要的环节,它能够改善代码的内部结构,而不改变其外部行为。在 Java 开发中,使用 Eclipse 作为集成开发环境(IDE)进行代码重构具有诸多优势。本文的目的在于全面介绍在 Eclipse 中对 Java 代码进行重构的各种策略,涵盖从基本的重构操作到复杂的重构场景。范围包括但不限于重命名变量、提取方法、移动类、封装字段等常见的重构任务,以及如何利用 Eclipse 的自动化工具和特性来高效完成这些任务。

Java大师兄的博客 1178

阿里面试官:你在工作中是如何做代码重构的?

我是猿人,一个热爱技术、热爱编程的IT猿。技术是开源的,知识是共享的!写作是对自己学习的总结和记录,如果您对 Java、分布式、微服务、中间件、Spring Boot、Spring Clo...

猿码天地 1560

Java 领域中 Eclipse 的代码重构方法

本文旨在为Java开发者提供全面的Eclipse代码重构指南,涵盖从基础到高级的各种重构技术。范围包括Eclipse IDE中内置的重构功能、第三方插件支持的重构方法,以及如何将这些技术应用于实际项目开发中。文章首先介绍重构的基本概念和Eclipse的重构功能,然后详细讲解各种重构方法,包括实际操作步骤和代码示例。接着讨论重构的最佳实践和常见问题,最后展望重构技术的未来发展趋势。重构(Refactoring):在不改变代码外部行为的前提下,对代码内部结构进行修改,以提高代码的可读性、可维护性和可扩展性。

AI开发架构师 1110

java代码重构的思路Java代码重构的几种模式

Java代码重构的几种模式 Java代码的重构模式主要有三种:重命名方法重构模式、引入解释性变量重构模式、以查询取代临时变量重构模式重命名方法重构模式建议执行如下的步骤来完成:1.建立一个具有新名称的方法2.将旧方法的方法体复制进新方法3.讲旧方法的方法体修改为调用新方法4.将所有引用旧方法的地方修改为引用新方法5.删除...

计算机毕业论文源码,学生个人网页制作html源码。贴近用户做网络推广和互联网优化。 1483

如何在 IntelliJ IDEA 中进行 Java 代码的重构优化

本文旨在为 Java 开发者提供一份全面的 IntelliJ IDEA 重构优化指南,涵盖从基础到高级的各种重构技术。我们将重点介绍 IntelliJ IDEA 特有的重构功能和技巧,帮助开发者提升代码质量和开发效率。本文首先介绍重构的基本概念和 IntelliJ IDEA 的重构功能概览,然后详细讲解各种重构技术的具体应用,接着通过实际案例演示重构过程,最后讨论重构的最佳实践和未来发展趋势。重构(Refactoring):在不改变代码外部行为的前提下,对代码内部结构进行修改以改善其设计的过程。

AI开发架构师 1195

重构Java代码:掌握简洁之道

在软件开发中,代码是沟通开发者意图的媒介。清晰和简洁的代码能够使其他开发者(或未来的你)更容易理解和维护代码。清晰意味着代码的逻辑应该是显而易见的,不需要过多的解释就能理解其意图。简洁则要求代码以尽可能少的代码行数表达相同的功能,避免冗长和不必要的复杂性。在定义清晰与简洁的代码标准时,需要遵循一些基本原则,例如:单一职责原则:每个类和方法应该只有一个职责,即只做一件事情。DRY 原则(Don't Repeat Yourself):避免在代码中重复同样的逻辑。最少知识原则。

weixin_42502089的博客 863

Java常见代码的重构技巧(非常实用)

作者:VectorJin juejin.cn/post/6954378167947624484关于重构为什么要重构1_代码重构漫画.jpeg项目在不断演进过程中,代码不停地在堆砌。如果...

1332

国内网络环境下Calico v3.26.4安装避坑指南(附华为云镜像加速脚本)

本文为国内开发者提供Calico v3.26.4的高效部署指南,重点介绍如何通过华为云镜像加速服务解决Kubernetes集群网络插件镜像拉取问题。文章包含详细的镜像加速脚本、部署清单修改方法及深度排错技巧,帮助开发者快速完成Calico网络插件的安装与配置。

brown的博客 289

Java中的代码重构:技巧、优秀实践与方法

Java 代码重构是一种在不影响代码外部行为的前提下进行的代码优化,它通过渐进和小规模的优化来改善现有代码的结构和质量。重构的目标是提高代码的可读性、性能、可维护性和效率等。

pantouyuchiyu的博客 2389

红外避障模块介绍

该传感器模块对环境光线适应能力强,其具有一对红外线发射与接收管,发射管发射出一定频率的红外线,当检测方向遇到障碍物(反射面)时,红外线反射回来被接收管接收,经过比较器电路处理之后,绿色指示灯会亮起,同时信号输出接回输出数字信号(一个低电平信号),可通过电位器旋钮调节检测距离,有效距离范围2~30cm,工作电压为3.3v-5v。该模块测距离2~~30cm,检测角度35°,检测距离可以通过电位器进行调节,顺时针调电位器,检测距离增加;1.VCC外接3.3v-5v电压(可以直接与5v单片机和3.3v单片机相连).

weixin_46251230的博客 2万+

重构-改善既有代码的设计 读后总结

重构-改善既有代码的设计,这本书是很多公司要求JAVA程序员必读的三本书之一(另外两本书是《Java编程思想》和《Effective Java》) 前言 看到别人的代码时感觉就像屎一样,有一种强烈的想重写的冲动,但一定要压制住这种冲动,你完全重写,可能比原来的好一点,但浪费时间不说,还有可能引入原来不存在的Bug,而且,你不一定比原来设计得好,也许原来的设计考虑到了一些你没考虑到的

name_javahadoop的博客 3230

MuJoCo 入门教程(二)

本章介绍 MuJoCo 的数学和算法基础。对于熟悉广义或关节坐标建模和仿真的读者来说,整体框架是相当标准的。因此,我们将对这些材料进行简要总结。本章的大部分篇幅用于介绍我们如何处理接触和其他约束条件。这种方法是基于我们最近的研究,也是 MuJoCo 所独有的,因此我们花时间对其进行了详细的激励和解释。更多信息可参见下面的论文,尽管本章中的一些技术思想是新的,在其他地方还没有描述过。

机器人控制与仿真应用 3713

重构是什么,为什么要重构,怎么重构

        前言: 我们做程序员这一行的哈,说白了就是用机器能识别的语言跟机器打交道,但是经常会出现的一种情况是,我们所写的代码只有自己和机器能看得懂,其他人看懂有一定的困难性,甚至有时候过了一段时间连自己都看不懂了。。。那么此时你应该感叹自己当时的水平高超,还是该好好的反思一下了? 一,重构是什么         OK,闲言碎语不多讲,啥叫重构呢?随手打开百度,输入“重构”,点开百度百科...

qq_36282233的博客 1万+

【即插即用模块】注意力篇 | TGRS 2025 | ASD:自适应频域解耦,动态拆分高低频+空间注意力,频域空间特征双增强!

摘要: FDMF-Net提出了一种频域解耦多模态融合网络,核心组件为振幅谱解耦模块(ASD)。ASD通过自适应频域拆分和频域-空域协同增强,有效分离模态不变与模态特定特征。该模块利用MLP学习动态阈值调整高低频比例,并通过空间注意力分别强化频域特征,在遥感语义分割任务中实现了细节与结构的协同增强。实验表明,ASD模块能减少模态内冗余,提升特征判别性,为多模态数据融合提供了新思路。代码已开源,适用于需要强化细节与结构的视觉任务。

主要更新底层视觉(去噪、超分等)相关的科研内容,形式为【论文精读】+【论文复现】 312

UNet改进(24):注意力机制-从基础原理到高级融合策略

本文系统探讨了如何通过引入各类注意力机制增强UNet在医学图像分割中的性能。文章分为基础篇、进阶篇和高级篇三个层级:基础篇介绍了时序注意力、可变形注意力、分层注意力等8种基础机制;进阶篇提出了5种混合注意力设计;高级篇则探讨了全局+局部+多尺度等复杂组合机制。实验表明,这些注意力模块在心脏MRI、肺部感染等任务中能提升2-15%的分割精度。文章还提供了硬件适配建议和完整实现代码,为研究者提供了全面的技术参考。未来方向包括NAS优化、量子注意力等前沿探索,为UNet在医疗影像等领域的应用革新提供了理论指导。

2501_91516851的博客 765

JAVA代码走查重构常用prompt

此外,所有可能的错误都被正确处理。你是一个20年工作经验的资深java语言编码专家,擅长TDD、Java核心语法、面向对象编程、Java集合框架、多线程编程、网络编程、数据库连接、代码重构、设计模式、架构模式、分层架构、微服务架构等技能。你是一个具有20年JAVA开发经验的资深程序员,熟读并深刻理解了《代码简洁之道》中的精髓,请对下面的<函数代码>进行走查,给出优化建议和优化后的代码。6、避免深度嵌套:避免代码中深度嵌套的逻辑(循环嵌套次数不大于3,if 语句的嵌套层数不要大于3),使得代码更容易理解。

小秋蜀黍的博客 1247

SAP_MM&FI模块-质保金标准解决方案详解

主要讲述了SAP系统质保金的标准实现方案,包含业务背景、后台配置、前台业务操作记录,以及关键点的AI解释;

风沙的博客 687

一段代码讲透Java所有编程规范(精华版)

本文参考了《代码整洁之道》,《阿里巴巴编程规范》,《华为编程规范》以及大量优秀的源码总结而来。简洁,优雅的代码根本不需要一行注释。 先看一下重构之前和之后的代码对比: 这是一段根据条件查询订单列表的代码,咋一看好像没有什么问题。但是,一个个来讲其中的问题。 /** * @Author: guandezhi * @Date: 2019/3/11 22:30 */ @Service pu...

无与伦比的博客 1263

Xilinx平台SRIO介绍(五)示例工程Example Design介绍

理解IP的使用,少不了Example Design的学习。

数字IC/FPGA杂货铺,找一找,或许有你想要的~ 1万+

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

【Java重构系列】重构31式之封装集合

2009年,Sean Chambers在其博客中发表了31 Days of Refactoring: Useful refactoring techniques you have to know系列文章,每天发布一篇,介绍一种重构手段,连续发文31篇,故得名“重构三十一天:你应该掌握的重构手段”。在英文原文中提供了C#版的重构实例,对重构手段的描述较为精简,Sunny将这些实例都改为了Java版本,并结合个人理解对代码实例和重构描述进行了适当的补充和完善。

刘伟技术博客 2万+

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

3用ts重构了_《重构-代码整洁之道TypeScript版》第一天

看到这个标题你的脑海中一定会浮现出两本书,一本就是,《重构--改善既有代码设计》和 《代码整洁之道》 。这确实两本非常伟大的图书,但是很遗憾里面提供的code都是Java的版本。《重构--改善既有代码设计》的第2版提供了JavaScript的版本,已经非常方便我们前端同学阅读了,但是在TypeScrip如此火热的今天,缺了TS的版本,始终觉得是些遗憾,所以老袁打算每天拿出一些时间将一些非常经典的案...

weixin_39532699的博客 403

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

java的重构

我整理的一些关于【Java】的项目学习资料(附讲解~~)和大家一起分享、学习一下:https://d.51cto.com/bLN8S1Java重构指南 重构是指在不改变软件外部行为的前提下,对其内部结构进行改进,以提高软件的可维护性和可读性。对于刚入行的小白,理解并实施重构是一项重要的技能。 重构的流程 步骤 描述...

weixin_28987465的博客 176

基于JAVA语言重构的艺术

摘要:本文探讨了Java代码重构的核心原则与实践技巧。重构是在不改变外部行为的前提下改善代码内部结构的过程,Java的强类型和丰富工具生态为重构提供了理想环境。文章分析了重构的必要性,介绍了IDE工具、测试体系、版本控制和静态分析四大重构基石,并通过提炼函数、多态替代条件表达式等典型案例展示重构手法。同时指出大型重构策略和常见陷阱,强调重构应成为日常开发习惯而非一次性活动。掌握重构艺术能显著提升代码质量,使开发者从"能工作"进阶为"写出优雅代码"的程序员。

分享AI、区块链技术及应用,未来已来 560

【Code】《代码整洁之道》笔记-Chapter16-重构SerialDate

如果你找到JCommon类库,深入该类库,其中有个名为的程序包。在该程序包中,有个名为SerialDate的类,我们即将剖析这个类。SerialDate的作者是David Gilbert。David显然是一位经验丰富、能力很强的程序员。如我们将看到的,他在代码中展示了极高的专业性和原则性。无论怎么说,SerialDate都是“好代码”,而我将把它撕成碎片。这并非恶意的行为,我也不认为自己比David强许多,有权对他的代码说三道四。其实,如果你看过我的代码,我敢说你也会发现好些该埋怨的东西。

江湖人称菠萝包 1517

代码重构之道

英文原文:Refactoring -- Not on the backlog!   对于如何进行代码重构,一直有着很多种说法。很多人都认为应该将重构代码放在backlog里。但是其实,这并不是一个理想的方法。   在项目刚刚开始的时候,你的代码很干净。   即使有的时候需要小小的绕一下路,但是这个时候我们可以轻松、平稳的添加功能。这个阶段一般都不会出现问题,而且由于我们比较着

Blank的程序员之路 1823
下一篇: SpringBoot实战:10分钟快速搞定环境
大盛玩java
博客等级 码龄5年 0粉丝 22原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值