如何用Java有效地编写方法

177 阅读6分钟

在编写真正清晰易懂的代码时,必须遵循一些准则。一种简单的技术就是单一责任原则。本文概述了用Java编写高效方法的六个关键概念。

在某种程度上,方法是Java中的动作要点。一个方法通常由一组定义明确的程序语句组成。它有一个名称和一组不同类型的参数(0或更多)。通常,它所执行的处理类型是通过其所引用的名称来传达的。只能在程序的任何位置通过使用其名称和参数来调用它。它实际上是主程序中的一个子程序。程序中可以有很多方法。每种方法因其名称,数量和所采用的参数类型而不同。在诸如Java的面向对象的语言中,可以通过称为方法重载或多态的技术来扩展方法。方法可能会也可能不会返回值作为最终语句。方法和自变量的名称分别称为其签名。它是方法声明的一部分。

1.方法签名

尽管一种方法可能具有不同的返回类型,但不会增加其独特性。因此,它不包含在“方法签名”中。

清单1:具有不同返回类型的方法不会增加该方法的独特需求

注意,上面声明的方法仅在返回类型上有所区别,而编译器无法识别这些返回类型。因此,它标志着重复声明的错误。相反,如果我们更改方法中的参数,则它们全部变为有效。这种具有相同名称但参数列表不同的方法称为方法重载。请注意,Java编译器通过其签名来区分它们。

清单2:有效的重载方法

如清单1所示,在方法签名中不包括返回类型的原因是,无法从以下两个有效的方法调用中区分调用哪个方法。

可以调用方法并忽略结果。因此,为了避免歧义,Java编译器不允许基于返回类型的方法重载。方法签名是其独特性的标志,因此不会将返回类型视为其签名。

2.方法主体

存在方法作为动作的定义。通过一组逻辑程序语句来说明此操作。表达逻辑的最简单准则是,它必须以最佳方式执行单个明确定义的任务。该定义应足够简单,以能够识别给定的方法名称。这就是单一责任原则。该方法应合理,简短,易读。根据需要应用适当的注释以增强可读性。最好以只有一个return语句的方式放置出口逻辑。例如,一条代码语句,例如

可以很容易地转换如下:
较短的版本可以编写如下,但是它限制了可读性。因此,应避免使用。
这样好一点了。
3.方法重载

方法重载是当我们使用多个具有相同名称但参数类型,参数数目和组合不同的方法时。Java编译器根据签名选择适当的调用方法。例如,我们可以在Java API 的String类中找到许多重载的方法,例如:

返回指定字符首次出现在此字符串中的索引。(Java API文档)
返回指定字符首次出现在该字符串中的索引,从指定索引开始搜索。(Java API文档)
返回指定子字符串首次出现在该字符串中的索引。(Java API文档)

方法重载可能使你想起Java中的泛型,但请注意它们并不相同。它们有不同的用途。我们将在单独的文章中介绍它们,因为它们需要更多说明。但是,它们可以并排并且是非常强大的组合。

4.方法覆盖

方法重写是子类从父类继承方法来扩展其实现以传达新含义的方法。在这里,方法名称,类型和参数数量在整个继承过程中必须保持相同,这与方法重载有很大不同。我们通常使用@Override注释来强调我们打算覆盖父方法而不是对其进行重载。

如果我们有机会在方法签名中犯任何错误,则Java编译器会标记一个错误。这就是@Override批注非常重要的原因。

5.递归

自行执行计算的方法称为递归方法。递归逻辑通常使实现逻辑简洁明了。没有没有无法通过简单循环实现的递归逻辑。但是,递归实现的主要用途是使程序逻辑简短。有一些特定的计算可以通过递归逻辑更好地定义,例如实现河内之塔,GCD,阶乘等等。最好避免不必要的递归,因为它可能会使代码变得难以处理,从而使代码难以调试和读取。递归大量使用系统堆栈,并且基于堆栈大小,JVM可能会引发StackOverflowError运行时异常。根据呼叫链的深度,这种情况不太可能出现,但也可能是一种情况。

6.方法文件

尽管Java从不强制执行一种方法,但应使用Javadoc工具记录方法。如果我们正在开发某种库或框架,这将特别有用。记录良好的代码可帮助其他程序员理解方法的目的,方法的数量和参数类型以及与实现相关的约束。它还给出了关于它可能引发的异常以及它返回的值(如果有)的想法。

前面的代码是Java API源代码的摘录,用于说明详细程度。流行的Java IDE(例如Eclipse和IntelliJ Idea)会获取文档,以在编码时提供有用的信息。这极大地帮助了各个级别的程序员快速了解该方法的目的和语法。

结论

在用Java编写有效的方法时,应遵循这六个关键但不全面的要点。没有增强可读性的代码不是一个好的代码,但是可以巧妙地实现它。请记住,效率不在于采用棘手的代码,而在于简化。最好将复杂的逻辑分为多个方法。尝试调试此类代码,你将了解所需的代码。关键思想是尽可能地应用KISS原则。