《Java工程师必读手册》——Java极客主义系列——Java代码高效之道(3)

简介: 《Java工程师必读手册》——Java极客主义系列——Java代码高效之道(3)

接上篇:https://developer.aliyun.com/article/1227044?spm=a2c6h.13148508.setting.15.18334f0eu8bmt9


三、 方法

 

1. 把跟类成员变量无关的方法声明成静态方法

 

静态方法的好处就是不用生成类的实例就可以直接调用。静态方法不再属于某个对象,而是属于它所在的类。只需要通过其类名就可以访问,不需要再消耗资源去反复创建对象。即便在类内部的私有方法,如果没有使用到类成员变量,也应该声明为静态方法。

 

反例

 

image.png

 

正例

 

image.png

 

2. 尽量使用基本数据类型作为方法参数类型,避免不必要的装箱、拆箱和空指针判断

 

反例

 

image.png

 

正例

 

image.png

 

3. 尽量使用基本数据类型作为方法返回值类型,避免不必要的装箱、拆箱和空指针判断

 

在JDK类库的方法中,很多方法返回值都采用了基本数据类型,首先是为了避免不必要的装箱和拆箱,其次是为了避免返回值的空指针判断。比如:Collection.isEmpty()和Map.size()。

 

反例

 

image.png

 

正例

 

image.png

 

4. 协议方法参数值非空,避免不必要的空指针判断

 

协议编程,可以@NonNull和@Nullable标注参数,是否遵循全凭调用者自觉。

 

反例

 

image.png

 

正例

 

image.png

 

5. 协议方法返回值非空,避免不必要的空指针判断

 

协议编程,可以@NonNull和@Nullable标注参数,是否遵循全凭实现者自觉。

 

 

反例

 

image.png

 

正例

 

image.png

 

6. 被调用方法已支持判空处理,调用方法无需再进行判空处理

 

反例

 

image.png

 

正例

 

image.png

 

 

 

7. 尽量避免不必要的函数封装

 

方法调用会引起入栈和出栈,导致消耗更多的CPU和内存,应当尽量避免不必要的函数封装。当然,为了使代码更简洁、更清晰、更易维护,增加一定的方法调用所带来的性能损耗是值得的。

 

反例

 

image.png 

 

正例

 

image.png 

 

8. 尽量指定方法的final修饰符

 

方法指定final修饰符,可以让方法不可以被重写,Java编译器会寻找机会内联所有的final方法。内联对于提升Java运行效率作用重大,具体可参见Java运行期优化,能够使性能平均提高50%。

 

注意

所有的private方法会隐式地被指定final修饰符,所以无须再为其指定final修饰符。

 

反例

 

image.png 

 

正例

 

image.png 

 

注意

使用Spring的AOP特性时,需要对Bean进行动态代理,如果方法添加了final修饰,将不会被代理。

 

9. 尽量使用方法传递代替值传递

 

尽量使用方法传递代替值传递,可以避免不必要的方法计算。比如Optional的orElseT value方法和orElseGetSupplier supplier方法:其中orElseT value方法无论前面Optional容器值是null还是nonNull,都会提前执行orElse里的方法;然而orElseGetSupplier supplier方法并不会,只会在Optional容器值为null时才调用orElseGet里的方法。

 

反例

 

image.png

 

正例

 

image.png


接下篇:https://developer.aliyun.com/article/1227041?groupCode=java 

相关文章
|
6天前
|
Java API 开发者
代码小妙招:用Java轻松获取List交集数据
在Java中获取两个 `List`的交集可以通过 `retainAll`方法和Java 8引入的流操作来实现。使用 `retainAll`方法更为直接,但会修改原始 `List`的内容。而使用流则提供了不修改原始 `List`、更为灵活的处理方式。开发者可以根据具体的需求和场景,选择最适合的方法来实现。了解和掌握这些方法,能够帮助开发者在实际开发中更高效地处理集合相关的问题。
8 1
|
7天前
|
Java
Java中的Lambda表达式:简化代码,提升效率
【8月更文挑战第31天】Lambda表达式在Java 8中引入,旨在使代码更加简洁和易读。本文将探讨Lambda表达式的基本概念、使用场景及如何通过Lambda表达式优化Java代码。我们将通过实际示例来展示Lambda表达式的用法和优势,帮助读者更好地理解和应用这一特性。
|
7天前
|
开发者 C# 存储
WPF开发者必读:资源字典应用秘籍,轻松实现样式与模板共享,让你的WPF应用更上一层楼!
【8月更文挑战第31天】在WPF开发中,资源字典是一种强大的工具,用于共享样式、模板、图像等资源,提高了应用的可维护性和可扩展性。本文介绍了资源字典的基础知识、创建方法及最佳实践,并通过示例展示了如何在项目中有效利用资源字典,实现资源的重用和动态绑定。
22 0
|
7天前
|
Java 开发者
探索Java中的Lambda表达式:简化你的代码
【8月更文挑战第31天】 在Java 8的发布中,Lambda表达式无疑是最令人兴奋的新特性之一。它不仅为Java开发者提供了一种更加简洁、灵活的编程方式,而且还极大地提高了代码的可读性和开发效率。本文将通过实际代码示例,展示如何利用Lambda表达式优化和重构Java代码,让你的编程之旅更加轻松愉快。
|
7天前
|
Java 开发者
探索Java中的Lambda表达式:简化代码的现代方法
【8月更文挑战第31天】Lambda表达式在Java 8中首次亮相,为Java开发者提供了一种更简洁、灵活的编程方式。它不仅减少了代码量,还提升了代码的可读性和可维护性。本文将通过实际示例,展示Lambda表达式如何简化集合操作和事件处理,同时探讨其对函数式编程范式的支持。
|
7天前
|
Java 程序员 API
从代码中寻找平衡:’java代码块和具体的代码应用
Java 8 引入的 Lambda 表达式是一项革命性特性,使编写简洁、灵活且易维护的代码成为可能。Lambda 表达式作为一种匿名函数,支持任意数量参数和返回值,其基本语法为 `(parameters) -> expression` 或 `(parameters) -> { statements; }`。
19 0
|
7天前
|
搜索推荐 JavaScript 前端开发
简单实用,Python代码调试利器/java代码的设计和解读
尽管有许多高级调试工具,但在多数情况下,`print()`仍是便捷之选。`icecream`库则将`print()`调试法发挥到极致,简化变量检查与信息输出,提升调试效率。无论是基本变量还是复杂数据结构,`icecream`都能轻松应对,并支持自定义输出格式,让你的调试工作更高效。下面,让我们一起探索`icecream`的更多实用功能吧!
11 0
|
设计模式 搜索推荐 Java
Java 极客技术 2019 年高考语文卷
Java 极客技术 2019 年高考语文卷
|
4天前
|
监控 Java 调度
【Java学习】多线程&JUC万字超详解
本文详细介绍了多线程的概念和三种实现方式,还有一些常见的成员方法,CPU的调动方式,多线程的生命周期,还有线程安全问题,锁和死锁的概念,以及等待唤醒机制,阻塞队列,多线程的六种状态,线程池等
26 6
【Java学习】多线程&JUC万字超详解
|
3天前
|
存储 Java 程序员
优化Java多线程应用:是创建Thread对象直接调用start()方法?还是用个变量调用?
这篇文章探讨了Java中两种创建和启动线程的方法,并分析了它们的区别。作者建议直接调用 `Thread` 对象的 `start()` 方法,而非保持强引用,以避免内存泄漏、简化线程生命周期管理,并减少不必要的线程控制。文章详细解释了这种方法在使用 `ThreadLocal` 时的优势,并提供了代码示例。作者洛小豆,文章来源于稀土掘金。
下一篇
DDNS