经过前面的学习,我们发现演示的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命令行输入的。譬如以下的代码例子,准备演示如何读取命令行敲入的命令参数:

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("您没有输入任何参数");
}
// 依次取出并打印该Java程序在命令行执行的输入参数
for (int i=0; i<args.length; i++) {
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

此时程序输出界面如下图所示:

可见打印的文字为“您没有输入任何参数”,这是因为命令行的Simple后面没带任何参数,现在往Simple右边添加一个参数“hello”,则修改后的程序指令是这样的:

java com.method.function.Simple hello

再次运行Simple程序,此时界面输出信息如下图所示:

这下看到打印文字为“您输入的第1个参数是:hello”,说明程序成功读到了命令行的输入参数。趁热打铁接着往Simple右边添加第二个参数“world”,于是拥有两个参数的程序指令变成了下面模样:

java com.method.function.Simple hello world

第三次运行Simple程序,此时程序运行界面如下图所示:

该程序果然不负众望,把“hello”和“world”这两个参数全都打印出来了,从而验证了main方法的输入参数是有效的。

 

更多Java技术文章参见《Java开发笔记(序)章节目录

Java开发笔记(二十四)方法的组成形式的更多相关文章

  1. Java开发学习(二十四)----SpringMVC设置请求映射路径

    一.环境准备 创建一个Web的Maven项目 参考Java开发学习(二十三)----SpringMVC入门案例.工作流程解析及设置bean加载控制中环境准备 pom.xml添加Spring依赖 < ...

  2. Java学习笔记二十四:Java中的Object类

    Java中的Object类 一:什么是Object类: Object类是所有类的父类,相当于所有类的老祖宗,如果一个类没有使用extends关键字明确标识继承另外一个类,那么这个类默认继承Object ...

  3. Java开发笔记(十四)几种运算符的优先级顺序

    到目前为止,我们已经学习了Java语言的好几种运算符,包括算术运算符.赋值运算符.逻辑运算符.关系运算符等基础运算符,并且在书写赋值语句时都没添加圆括号,显然是默认了先完成算术.逻辑.关系等运算,最后 ...

  4. python3.4学习笔记(二十四) Python pycharm window安装redis MySQL-python相关方法

    python3.4学习笔记(二十四) Python pycharm window安装redis MySQL-python相关方法window安装redis,下载Redis的压缩包https://git ...

  5. (C/C++学习笔记) 二十四. 知识补充

    二十四. 知识补充 ● 子类调用父类构造函数 ※ 为什么子类要调用父类的构造函数? 因为子类继承父类,会继承到父类中的数据,所以子类在进行对象初始化时,先调用父类的构造函数,这就是子类的实例化过程. ...

  6. Java开发笔记(九十四)文件通道的性能优势

    前面介绍了字节缓存的一堆概念,可能有的朋友还来不及消化,虽然文件通道的用法比起传统I/O有所简化,可是平白多了个操控繁琐的字节缓存,分明比较传统I/O更加复杂了.尽管字节缓存享有缓存方面的性能优势,但 ...

  7. Java开发学习(二十五)----使用PostMan完成不同类型参数传递

    一.请求参数 请求路径设置好后,只要确保页面发送请求地址和后台Controller类中配置的路径一致,就可以接收到前端的请求,接收到请求后,如何接收页面传递的参数? 关于请求参数的传递与接收是和请求方 ...

  8. Java开发学习(二十六)----SpringMVC返回响应结果

    SpringMVC接收到请求和数据后,进行了一些处理,当然这个处理可以是转发给Service,Service层再调用Dao层完成的,不管怎样,处理完以后,都需要将结果告知给用户. 比如:根据用户ID查 ...

  9. Java开发学习(二十八)----拦截器(Interceptor)详细解析

    一.拦截器概念 讲解拦截器的概念之前,我们先看一张图: (1)浏览器发送一个请求会先到Tomcat的web服务器 (2)Tomcat服务器接收到请求以后,会去判断请求的是静态资源还是动态资源 (3)如 ...

  10. Java开发学习(二十二)----Spring事务属性、事务传播行为

    一.事务配置 上面这些属性都可以在@Transactional注解的参数上进行设置. readOnly:true只读事务,false读写事务,增删改要设为false,查询设为true. timeout ...

随机推荐

  1. 样式布局与 BFC

    一.几类视图 内联视图:inline 单行 块级视图:block 换行,有高度 行内块级视图:inline-block 单行,有高度 二.几类布局 块级布局 换行,通过设置 margin 水平居中 & ...

  2. 串口RS232和485通信的波形分析

    一.串行数据的格式 异步串行数据的一般格式是:起始位+数据位+停止位,其中起始位1 位,数据位可以是5.6.7.8位,停止位可以是1.1.5.2位. 起始位是一个值为0的位,所以对于正逻辑的TTL电平 ...

  3. JS基础整理面试题

    1.DOM和BOM的区别 DOM:document object model;文档对象模型,提供操作页面元素的方法和属性BOM:browser object model;浏览器对象模型,提供一些属性和 ...

  4. dx.jar文件问题,有没有同学知道怎么解决呀,这一步没法解决,后面就没办法跟着做了

     Java Code  123456789101112 dx.jar文件问题,有没有同学知道怎么解决呀,这一步没法解决 - test] Unknown error: Unable to build:  ...

  5. placeholde属性在IE10以下浏览器上的兼容方案

    首先,判断浏览器是否支持placeholder属性:目前经验来看placeholder属性在     IE10及以上   才能正常显示,而我们实际项目中往往要求兼容到   IE8 var input ...

  6. JavaScript中如何理解如何理解Array.apply(null, {length:5})

    先来看一个问题: 如何理解Array.apply(null, {length:5})的{length:5}? 我测试过Array.apply(null, {length:5}) //返回[undefi ...

  7. [Swift]LeetCode402. 移掉K位数字 | Remove K Digits

    Given a non-negative integer num represented as a string, remove k digits from the number so that th ...

  8. [Swift]LeetCode767. 重构字符串 | Reorganize String

    Given a string S, check if the letters can be rearranged so that two characters that are adjacent to ...

  9. Markdown语法及html内嵌

    目录 1.Markdown介绍 2.Markdown语法介绍 3.内嵌html语法   之前看到很多大佬博客写的特别漂亮,非常羡慕,他们是怎么排版的呢?作为一个小白,学习使我快乐....终于在不断摸索 ...

  10. 隔壁老主精讲web页面性能优化。

    首先说一下为什么要进行web页面性能优化,在同样的网络环境下,两个同样能满足你的需求的网站,一个“Biu”的一下就加载出来了,一个卡--卡--卡--卡--卡--才出来,你会选择哪个?研究表明:用户最满 ...