4.1.1 方法的组成形式
经过前面的学习,我们发现演示的Java代码越来越复杂,而且每个例子的代码都堆在入口方法main内部,这会导致如下问题:
(1)一个方法内部堆砌了太多的代码行,看着费神,维护起来也吃力。
(2)部分代码描述的是通用算法,比如牛顿迭代法、二分查找法等,这些通用的算法代码结构固定,很多地方都会用到,倘若每次都要复制粘贴,无疑太过烦琐。
基于此,亟需对纷繁复杂的代码段加以梳理:一方面把若干代码依据功能划分,这样剥离出来的各段代码不会相互影响;另一方面封装通用的算法代码,做到只定义一次,就能被多次调用。这样既可以提高代码的可读性,又使得代码易于维护,还能减少无谓的重复劳动。
就代码的封装途径而言,每种编程语言都采取了方法包装的形式,通过定义形态完整、兼具输入和输出功能的新方法,即可将一大段逻辑复杂的代码分解成各个功能单一的代码块,然后在原位置依次调用这些代码块对应的方法名称便省事了。
可是费了许多口舌,这个方法定义到底是怎样的呢?前面的大部分演示代码基本上都装载在对应代码文件的main方法中,这个main方法不但是该代码文件的入口,也是程序员最开始接触到的常用方法。接下来通过main方法来研究一下究竟如何定义一个方法。下面来看一段简单的main方法代码:
public static void main(String[] args) { // String[]表示字符串数组 }
上面的main方法除了名称与包括内部代码的花括号之外,方法名称左右两边还有几个关键词,从而构成了完整的方法定义形式“访问权限类型可选的static返回值的数据类型方法名称(参数类型参数名称)”。这几个关键词分别介绍如下:
(1)最前面的public的意思是公开的,表示该方法可被其他代码文件访问;反过来,倘若此处写的是private,则表示该方法不可被其他文件访问。
(2)public后面的static的意思是静态的,表示该方法类似于通用函数,可被外部直接访问,比如Math工具类的round、sqrt、abs、sin等方法都属于静态方法。
(3)main名称前面的void表示该方法不返回任何数据,即不存在输出参数。若该方法需要返回整型数,则此处应填int;若该方法需要返回双精度数,则此处应填double。
(4)main名称后面紧跟着带参数的圆括号,表示该方法需要填写指定的输入参数。若不存在输入参数,则圆括号内部留空;若存在好几个输入参数,则以逗号分隔多个参数,形如“参数1类型参数1名称,参数2类型参数2名称”。
关于方法的输入参数,既可以在方法调用处填写,也可能是Java命令行输入的。譬如以下的代码例子将演示如何读取命令行输入的命令参数(完整代码见本章源码的src\com\method\function\ Simple.java):
package com.method.function; //说明main方法的格式定义 public class Simple { // 方法的定义格式为:“访问权限 可选的static 返回值的数据类型 方法名称(参数类型 参数名称)” // 其中多个参数之间以逗号分隔,如“参数1类型 参数1名称, 参数2类型 参数2名称” // 若该方法无须返回任何数值,则返回值的数据类型填void public static void main(String[] args) { // String[]表示字符串数组 if (args.length == 0) { System.out.println("您没有输入任何参数"); } for (int i=0; i<args.length; i++) { // 依次取出并打印该Java程序在命令行执行的输入参数 int seq=i+1; System.out.println("您输入的第"+seq+"个参数是:"+args[i]); } } }
先打开DOS窗口,进入Simple.java所在的目录,运行以下命令编译程序:
javac -encoding UTF-8 Simple.java
再回到src目录下,输入以下指令:
java com.method.function.Simple
此时程序输出界面如图4-1所示。
图4-1 命令行未输入参数
可见打印的文字为“您没有输入任何参数”,这是因为命令行的Simple后面没带任何参数。现在往Simple右边添加一个参数“hello”,则修改后的程序指令是这样的:
java com.method.function.Simple hello
再次运行Simple程序,此时界面输出信息如图4-2所示。
图4-2 命令行输入了一个参数
可以看到打印文字为“您输入的第1个参数是:hello”,说明程序成功读取到了命令行的输入参数。趁热打铁,接着往Simple右边添加第二个参数“world”,于是拥有两个参数的程序指令变成下面这样:
java com.method.function.Simple hello world
第三次运行Simple程序,此时程序运行界面如图4-3所示。
图4-3 命令行输入了两个参数
该程序果然不负众望,把“hello”和“world”这两个参数全都打印出来了,从而验证了main方法的输入参数是有效的。