李锋镝的博客

  • 首页
  • 时间轴
  • 说说
  • 左邻右舍
  • 博友圈
  • 关于我
    • 关于我
    • 另一个网站
    • 我的导航站
    • 网站地图
    • 赞助
  • 留言
  • 走心评论
  • 系列文章
  • 🚇开往
Destiny
自是人生长恨水长东
  1. 首页
  2. 转载
  3. 技术
  4. 正文

如何让代码看起来更优雅?

2019年8月21日 约 2,187 字8 分钟 271点热度 0人点赞 0条评论
本文最后更新于 2019年8月21日,距今已 2521 天,其中的信息可能已经发生变化,请注意甄别。

相信很多人都会有这样的疑问吧,看各种框架的代码看着感(根)觉(本)特(看)别(不)溜(懂),而自己写出来的代码怎么看怎么不顺眼,为什么呢?

规范!!!规范!!!规范!!!

是的,一切都是规范问题,如果你看各种框架代码看得多了你会发现,他们好像大都是一个套路,一个说不上来的套路,看起来就很舒服,就是因为他们都有自己的一套规范,而且很多规范其实都是JCP制定或者JCP认可的规范,那么如何规范的写代码呢?下面介绍几个入门级的技巧。

一、善用@Override注解。@Override应该是java代码里最常见的一个注解了,对于所有继承父类的方法,都应该使用该注解标识,以便于与类自己的方法区分,同时也利于出错时的排查,将问题暴露到编译时而不是运行时,同样使用该注解的方法一般不需要写方法注释,因为是从父类继承过来的,所以需要和父类的方法功能保持一致,自然方法说明也就一致了,不需要再重新写一份了,如果你发现你的很多标记@Override的方法都必须要单独写一份注释来说明的时候就要考虑是不是代码有问题了。

二、善用@Deprecated注解,这个注解可能许多人接触的不多,该注解表示被注解的方法被弃用,标记该注解的方法在使用的使用在大多数IDE中会在方法调用上显示一个横线划掉方法,表示弃用,在许多框架中会看到该注解。这是由于框架升级过程中需要考虑到大多数框架使用者,保持向下兼容性,所以当API有变动时不仅要保证新API正常的使用,同样也要保证旧API正常工作,但是如果这时框架使用者仍然使用旧API怎么办?这时就可以在旧的API方法上增加该注解,告诉框架使用者这个API是一个过期即将被弃用的API,不推荐使用,如果需要使用请使用替代的新API,这时大多数框架使用者就会选择使用新的替代API了。

三、接上一个注解,如果使用了@Deprecated注解,那么如何告诉别人替代API呢?可能用的人会在方法说明中直接写上替代方法的名字,但是如果你有仔细看各种框架的做法时你会发现他们的好像跟你不一样,他们的方法好像是一个链接可以点击直接跳转到另一个API方法上的,而你直接写方法名则只能根据方法名一个一个的找了,效率低不说,如果方法改名字了,那么这个地方很可能会被遗漏,那么也就是说这个遗漏的地方其实已经过期了,那么那些框架是如何做到在方法说明上直接点击就可以跳到另一个方法的呢?其实很简单,只需要在写方法说明的时候使用一下写法:

{@link #hashcode()}

以上代码写到方法文档中会在文档相同的位置生成一个可以点击的链接,该链接指向的方法就是同类的hashcode方法(本类中必须有该方法),那么如果想要指向其他类的方法怎么办呢?可以按照下面的方法写:

{@link com.joe.util.StringUtils#isEmpty(String)}

这样这串代码就会在文档相同的位置替换成一个指向com.joe.util包中StringUtils类的isEmpty()方法的链接,如果是同包下的类的话包名还可以省略不写(括号中没有东西的时候表示该方法是无参方法,例如第一个hashcode,而当里边有东西时则表示该方法的参数类型,例如第二个方法isEmpty,括号里边的String表示该方法接受一个String类型的参数)。

那么这种写法有什么好处呢?首先是文档更易读,其他人查看文档时可以直接点击链接就可以跳转到新API上了,而不用用户自己一个一个的查找方法,同时在一个正常IDE中,方法改名可以通过快捷键更改,这样所有引用该方法的地方也会跟着更改而不用手动一个一个更改了,使用这种方法写的注释也会也会自动跟着更改方法名,也就是你不用手动去更改注释了,也不会出现自己直接写方法名,实际的方法名更改而忘记修改注释中的方法名这种情况了。

四:不要试图区分空值和null值,例如区分空字符串和null,这样相当于给自己埋了一颗定时炸弹,指不定什么时候就会爆炸。

五、代码一定要有注释。不要相信所谓的好的代码带可以自解释,首先那是针对大神的,不要高估自己的水平,其次,除非你的代码不准备给其他人看,否则最好写上注释,否则即使那些大神可以看懂,但是那些小白呢?哪个团队没几个混日子的→_→(开个玩笑),团队总有厉害的有一般的,相信很少有人是独立开发的吧,既然这样你就得保证你的代码所有人都能看得懂,保证随便来一个人都可以维护,这不仅是对公司负责,更是对自己负责,对自己的作品负责。同样的,对于代码中的所有预定一定要写清楚,不然如果以后别人维护你的代码甚至你自己维护自己的代码都很有可能会踩坑。

六、起名要规范。虽然代码有注释了,但是起名仍然要规范,毕竟起名如果足够规范,虽然对于一些新手仍然需要看你的注释,但是和你水平相当的或者高于你的人可能只需要扫几眼代码就知道你想写什么了,所以代码的自解释性还是很有必要的,而这就依赖于起名的规范了,而起名规范也是相对的,只能慢慢积累了。

七、所有返回集合类型的方法绝对不能返回null,抛异常都不能返回null。一般对于一个返回集合类型的调用判断调用是否有返回时大多会使用isEmpty()方法判断集合是否为空,而此时如果你返回一个null的话别人的代码就会抛出NullPointException了,而如果调用方先判断是否等于null再判断是否为空那么代码就会很难看了,所以对于集合类型返回值的方法绝对不能返回null,如果必须要返回空的话可以用空集合代替,对此java.util.Collections类给出了相当多的方法可用,例如Collections.emptyList()方法可以返回一个emptyList,而Collections.emptySet()方法则可以返回一个emptySet,这些都可以帮助你快速构建一个空集合,而且会让你的代码看上去瞬间提升一个档次,需要注意的是该方法构建出的空集合不能往里边添加值,否则会抛出异常。

代码的规范有很多,能提升代码逼格的也有很多,此处就先只讲这么多了,如果还想学习其他的可以按照以下联系方式联系,同时多看各个框架的代码也会潜移默化的改变你的代码风格,只要持续学习,总有一天你也能写出高逼格的代码。

除非注明,否则均为李锋镝的博客原创文章,转载必须以链接形式标明本文链接

本文链接:https://www.lifengdi.com/transport/818

推荐阅读

  • ThreadLocal如何解决内存泄漏问题
  • SpringBoot定时任务 - 经典定时任务设计:时间轮(Timing Wheel)案例和原理
  • @Resource 和 @Autowired 的区别
  • Spring Boot 2.x使用PostgreSQL数据库
  • 带颜色的JVM:三色标记详解
本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可
标签: JAVA 代码 规范 风格
最后更新:2019年8月21日
相关文章
  • JVM详细参数说明2020年7月27日
  • IDEA下载源码报:Cannot connect to the Maven process. Try again later.2022年4月11日
  • maven依赖本地jar包2025年3月28日
  • Eclipse反编译插件Jad安装2019年9月27日
  • Java中的变量和数据类型2022年7月15日

李锋镝

既然选择了远方,便只顾风雨兼程。

打赏 点赞
< 上一篇
下一篇 >
1234567891112131415161718192021222324252627282930313233343536373839404142434446474849505152535455575859606162636465666769727476777879808182858687909293949596979899
取消回复
…

文章评论

还没有评论,快来抢沙发吧~

秋天是倒放的春天,晚安是爱你的序篇。

听点儿音乐吧 朋友~
文章目录

那年今日(07月16日)

  • 1945年:美国成功试爆世界上第一颗原子弹
  • 1936年:日本首相福田康夫出生
  • 1919年:中国科学院院士杨嘉墀出生
  • 1916年:乳酸菌之父梅契尼科夫逝世
  • 1216年:罗马教皇英诺森三世逝世
  • 更多历史事件
最新 热点 随机
最新 热点 随机
增加了两套复古皮肤-牛皮纸、千禧网页 Claude Design介绍与使用 Kratos+主题新功能介绍 Taste Skill 说明与使用 jasypt-spring-boot 使用说明 Kratos+主题新功能预览及功能演示
AI时代,个人技术博客的出路在哪里?这个域名注册整整十年了,十年时间,真快啊WordPress实现用户评论等级排行榜插件WordPress网站换了个字体,差点儿把样式换崩了做了一个WordPress文章热力图插件千万级大表新增字段实战指南:告别锁表与业务中断
AI 协作新范式:以文档为中心的开发实践指南 Consul开启transparent-proxy访问外部资源的时候,请求偶发Connection reset问题分析 提示词工程进阶指南:8大核心技巧,让AI精准读懂你的需求(2025实战版) Java并发编程之如何保证线程顺序执行 从零开发 MCP 协议工具:从原理到实战的完整指南(Python 版) Elasticsearch:cat API 介绍及其使用
最近评论
李锋镝 发布于 2 天前(07月14日) 外面的主题功能差异化比较大,部分功能没有还得通过插件来实现,这样样式也不统一,而且经常有爆出风险、漏...
瓦匠 发布于 2 天前(07月14日) 很奈斯啊,都在设计属于自己的主题了,羡慕了
rxshc 发布于 3 天前(07月13日) 工具看着挺实用的。
李锋镝 发布于 7 天前(07月09日) https://github.com/Leonxlnx/taste-skill
李锋镝 发布于 1 周前(07月06日) 哈哈哈,你那个主题做的也很棒
标签聚合
多线程 K8s MySQL JVM Spring 分布式 IDEA AI Redis JAVA MCP ElasticSearch 架构 AI编程 SpringBoot 设计模式 日常 数据库 SQL WordPress
友情链接
  • Blogs·CN
  • Honesty
  • Mr.Sun的博客
  • 临窗旋墨
  • 哥斯拉
  • 彬红茶日记
  • 志文工作室
  • 懋和道人
  • 拾趣博客导航
  • 搬砖日记
  • 旧时繁华
  • 林羽凡
  • 瓦匠个人小站
  • 皮皮社
  • 知向前端
  • 韩小韩博客
  • 风渡言

COPYRIGHT © 2026 lifengdi.com. ALL RIGHTS RESERVED.

域名年龄

Theme Kratos+ By Dylan Li

津ICP备2024022503号-3

京公网安备11011502039375号