程序员修炼之道:程序设计入门30讲
上QQ阅读APP看书,第一时间看更新

2.import, public static void main, String[] args分别是什么意思?我的第一个Java程序

在第1节中,我们已经认识了第一个C++程序,通过该程序我们在屏幕上打印了“Hello world!”。本节中我们将学习第一个Java程序,通过这一节的学习,读者会初步认识Java的包机制、类定义和main函数。

Hello world

在第一个Java程序中,我们要完成的工作仍然是向屏幕输出“Hello world!”。在这里我们故意把打印“Hello world!”的方法变得稍微复杂了些,目的是让读者认识一个更完整的程序。

示例代码2.1

package语句

程序的第一行是package语句,该语句的作用是规定当前类属于哪个包。

在Java中,同一个包中存放的类是功能相关的,包机制使得项目代码存放在一个合理有序的组织结构下,便于开发人员管理。

同时,包机制提供了类的多层命名空间,这一点与C++中的命名空间类似,用于解决类的命名冲突。我们也许会遇到类名完全相同的两个类,例如有两个类的类名都是A,这时候不同的包名为这两个类提供了不同的命名空间,我们就能通过包名告诉计算机我们使用的到底是哪个类了。若用电话号码做类比,包名即为区号,类名即为电话号码。包名一般全是小写字母,由一个或多个有意义的单词连缀而成,命名规则是:域名倒写.项目名.模块名.组件名。例如我们会发现有些包以org.apache打头,其对应的域名就是apache.org。

import语句

接下来的一行是import语句。我们在编写一个类时,经常会用到其他的类,要正确引用这些类,就需要用import语句进行导入声明。在示例代码2.1中,我们为了使用java.util.List类,定义了import java.util.List;语句。如果不在程序起始处定义import语句,程序中所有用到List类的地方都需要使用该类的全名,这就会使代码显得非常冗长。

进阶

一个Java编程高手通常对Java常用包非常熟悉,了解Java提供了哪些包,能够帮助自己知道利用Java可以实现哪些功能,而哪些功能实现起来是较为困难的。Java的常用包如下。

java.lang: Java语言的核心,提供了Java中的各种基础类。

java.util:实用工具包,提供了各种功能。

java.net:提供了网络编程相关的各种类。

java.io:包含了输入输出操作相关的类。

java.sql:包含了数据库编程相关的类。

java.awt:提供了用于构建图形用户界面的类。

感兴趣的读者可以通过阅读源码深入了解Java的包机制。

类定义

在定义了package语句和import语句之后,程序进入了主体部分,即对类的定义。当编写一个Java源代码文件时,此文件通常被称为编译单元,每个编译单元都必须有一个扩展名.java,而在编译单元内则至多可以有一个public类,该类的名称必须与文件的名称完全相同,包括大小写在内。

Java中,类(内部类除外)有两种访问权限:

(1)public访问权限。可以供所有类访问。

(2)默认访问权限。同一个包中的类可以访问该类,即包级访问权限。

在示例代码2.1中,我们定义的类名是Code1,其访问权限是public级别的。如果读者想要了解关于面向对象更深入的知识,可以阅读本书的第四部分。

main函数

类似C语言程序,main函数也是Java程序的执行入口。main函数与其他函数在形式上并无差异,也是由返回类型、修饰符、参数等构成的。下面以示例代码2.1为例,介绍main函数的各个组成部分。

返回类型:void。Java程序中的main函数返回值必须为空,不允许为int或其他类型。

访问修饰符:public。为了使得该main函数可以直接被系统调用,必须设置访问修饰符为public。

类修饰符:static。static修饰符表明该函数类静态函数,即函数是属于类的,而不是属于对象的。因为main函数是程序的入口函数,系统是通过类来调用该main函数,而不是通过该类的任何对象来调用该main函数,所以必须设置类修饰符为static。关于静态方法更深入的知识,感兴趣的读者可以阅读本书的第20节。

图2.1 main函数参数设置

参数:Java中,main函数的参数是一个String数组。该数组内容是用户在运行程序时设置的。用户可以通过Eclipse的run configuration设置Arguments为Hello world!,如图2.1所示。这一方法类似于第1节中Visual Studio为main函数设置参数的过程。

函数主体:示例代码2.1在main函数中首先生成一个List对象,然后循环遍历main函数参数args,将数组中的每个元素添加到List对象中,最后将List对象直接打印到控制台。如图2.1所示,我们向示例代码2.1的main函数传入的参数是“Hello”和“world!”,所以控制台成功打印出了“Hello world!”,如图2.2所示。由于我们是直接将List对象打印到控制台的,所以输出的字符串包含了中括号,并且在元素之间通过逗号进行了连接。

图2.2 示例代码2.1的运行结果