Java程序的入门案例
本任务讲解Java程序的基本输入/输出的处理方式,主要包括Java程序的基本结构、控制台程序的输入/输出处理、图形化程序的输入/输出处理、为今后实现Java程序与用户的交互打下坚实的基础。
Java程序,根据运行界面是以图形化要素为主,还是以文本字符为主,可分为两种类型。
●GUI应用程序(GUI Application)。
●控制台程序(Console Application)。
认识事物的正确方法应该是从简单到复杂。因此,我们先从一个简单的实例入手,来逐步认识这两种Java程序的基本结构,为后面的程序开发建立良好的基础。
计算机语言和其他语言一样,都是为了描述事物而产生的,都有自身特定的语义、语法和语言结构。在本任务中,为了能够使大家更快进入Java语言的程序世界,我们先不做过多语法方面的叙述,只简单介绍任务案例中所用到的基本语法知识。更多细节性内容,将在本书后续相关位置中进一步地讲解。
1.Java程序的基本结构概述
作为面向对象的编程语言,Java程序的核心要素是类。类是组成Java程序的最小结构单位。一个Java源程序文件中可以包括一个或多个类的定义。定义类时,必须使用关键字class。类名称可以自己命名,但需符合基本的标识符定义规则。标识符定义规则是以字母、下画线(_)、美元符号($)开头,其后面是任意字母、数字(0~9)、下画线和美元符号的字符序列。Java标识符区分大小写,对长度没有限制。同时,用户定义的标识符不可以是Java的关键字。习惯上,类名称每个单词的首字母大写。
例如,定义一个名称为HelloWorld的类,其基本结构如下。
Java程序的入口方法是main()方法。所谓入口方法是指在运行Java程序时最先执行的方法。一个Java程序必须有且只有一个main()方法。包含main()方法的类被称为Java程序的主类,主类必须被定义为公共类。
在类关键字前面,可以附加一个类的访问修饰符,表明该类的访问控制级别。public修饰符使一个类成为公共类。
作为程序执行的起点,main()方法定义的基本格式必须遵循以下形式。
main()方法的定义分为方法声明和方法体两部分。方法声明说明了方法的属性、返回值类型、名称及参数;方法体定义了main()方法的行为,功能语句必须放置在块语句界定符之内。以下是main()方法定义格式中关键字及参数的说明。
●public关键字,表明main()方法为公共方法。由于应用程序一旦执行,系统进程就要调用入口方法。因此,main()方法必须设置为公共的访问属性,以便让外界对象都能够访问它。
●static关键字,表明main()方法为静态方法。由于main()方法的调用先于主类对象的创建,因此static关键字对main()方法是必不可少的。
●void关键字,表明main()方法没有返回值。main()方法属于功能型方法,没有返回值。
●String[]args是main()方法的参数定义,用来向入口方法传递命令行参数。其中,String是Java语言提供的字符串类的名称,不能出现拼写错误,其中第一个字母必须大写;args为数组名,可以被其他合法的标识符名称所代替。
2.基于JDK环境的Java程序开发
在JDK环境下,进行一个简单的Java程序的开发可归结为如下步骤。
①用任意文本编辑器创建Java源程序,以扩展名为.java的文件进行保存。
②使用JDK中的编译命令将源程序文件编译成扩展名为.class的类(字节码)文件。
③使用JDK中的运行命令运行Java程序。
下面编写一个Java程序,本着由简入繁的原则,这个程序只实现控制台程序中的输出功能。程序的编写、编译和运行,将利用记事本工具和JDK环境完成。
控制台程序的主要特征如下。
●程序界面为非图形化的文本字符风格界面。
●程序运行的逻辑由预定的流程来控制。
●人机交互以文本字符为主。
●输入设备以键盘为主,输出设备以显示器为主。
【例1-1】 编写Java程序,在计算机显示器上输出一行文本信息:“欢迎访问Java世界”。
①创建Java程序。选择Windows系统的“开始”→“所有程序”→“附件”→“记事本”命令,打开记事本程序,在新建的文本文件中输入如下程序代码。
下面结合程序代码进行说明。语句“//这是名称为“HelloWorld.java”的简单输出程序”为注释行。在程序中插入注释,有利于提高程序的可读性,便于他人理解程序。在程序运行时,注释行不起任何作用,Java程序编译环境将忽略所有注释内容。以“//”开始的注释,称为单行注释;以“/*……*/”开始和结束的注释,称为多行注释,这种注释能够连续跨越多行文本,中间的所有行都为注释内容。语句“System.out.println("欢迎访问Java世界");”为控制台的输出语句,用来实现信息字符串的输出。控制台程序引入了java.lang包中的System类。java.lang包是Java程序开发必不可少的一个基础包,Java开发环境会自动引入该包中所有的类。out为System类中的一个标准输出流对象,默认为显示器。println()为out对象的一个方法,其功能是向输出设备输出该方法参数所包含的信息并自动换行。println()方法如果没有参数,则只起到换行的作用。与之对应,System.out也提供了不换行的输出方法print(),其功能是输出参数的内容后不自动换行,而是将光标定位在输出内容最后一个字符的后面。
②保存Java程序。在记事本程序中,选择“文件”→“保存”命令保存程序文件。在弹出的“另存为”对话框中选择文件保存的路径,如图1-26所示。
在“另存为”对话框的“保存类型”下拉列表中默认选择“文本文档(*.txt)”选项,需将其更换为“所有文件”选项,如图1-27所示。
图1-26 “另存为”对话框
图1-27 选择文件类型
Java程序要求文件名必须与公共类名完全相同,包括字母的大小写形式,其扩展名为.java。在“另存为”对话框的“文件名”下拉列表框中输入文件名HelloWorld.java,如图1-28所示。保存后的源文件如图1-29所示。
图1-28 输入文件名
图1-29 保存后的源文件
③编译Java程序。选择Windows系统的“开始”→“运行”命令,在打开的“运行”对话框中输入“cmd”命令(见图1-30),进入命令提示符窗口。在命令提示符窗口中,使用cd命令进入源文件所在目录,如图1-31所示。编译源程序的命令是javac,如图1-32所示。注意,调用JDK中的javac命令,需要配置好JDK的环境变量。如果编译成功,会产生一个和源程序同名的.class文件,如图1-33所示。
图1-30 “运行”对话框
图1-31 进入源文件所在目录
图1-32 编译源程序
图1-33 编译成功
如果程序没有语法错误,系统将自动返回命令提示符状态。如果程序有语法错误,系统将显示错误信息。此时需检查源码,修正错误并保存文件,再次执行编译命令,直至编译通过。
④运行Java程序。运行编译好的程序的命令是java,如图1-34所示。注意,调用JDK中的java命令也需要配置好JDK的环境变量。例1-1程序运行结果如图1-35所示。
编写和运行Java程序看似很简单,但初学者在实际操作过程中会遇到很多意想不到的问题,如字母大小写形式输入不正确、单词拼写错误等。因此,程序的编写和调试需要开发人员有足够的细心和耐心,这也是成为一名优秀的程序员所需具备的良好素质。
图1-34 运行程序
图1-35 例1-1程序运行结果
前文简单介绍了Java控制台程序的基本输出方法。在实际的程序编写过程中,除了输出环节之外,还包括输入和处理环节。下面给出了一个Java程序处理任务的通用结构:输入数据、处理数据和输出数据。
计算机系统通常都有默认的标准输入设备和标准输出设备。对于一般的系统,标准输入设备通常是指键盘,标准输出设备通常是指显示器。Java控制台程序从键盘输入数据,向显示器输出数据,是十分常见的数据通信操作。为了方便程序员的开发工作,Java语言预先定义了两个流对象,分别与系统的标准输入设备和标准输出设备相联系,它们就是System.in和System.out,位于Java的语言类库包java.lang中。Java语言提供了大量预先定义好的类和接口供程序员使用。Java语言把预先定义的类和接口按包的形式进行组织管理。一个包就是一系列Java类和接口的集合。所有包组成了Java的类库,即Java API。Java API包分为核心包和扩展包,分别为java和javax。
【例1-2】 编写Java程序,完成从键盘输入两个运算数据,计算两数之和并输出计算结果的功能。
在例1-1中利用了“记事本+JDK”的开发模式。对Java开发人员来说,这个开发模式中的过程过于烦琐,也不便于程序的编写和调试。在本书后续的内容中,将统一使用集成开发环境Eclipse来完成Java程序的开发工作。
参照前文介绍的方法,在Eclipse中建立Java程序项目,输入如下程序代码。
结合程序代码进行分析,如下。
①输入数据部分,对程序而言,最简单的输入方式就是赋值语句。例如,参与运算的数据为整数5和3,可利用赋值语句,将数据赋值给定义好的对应程序变量。
②处理数据部分,利用加法运算符和表达式完成计算求和的任务,并将计算结果赋值给对应程序变量。
③输出结果部分,利用字符串连接运算符,将字符串常量“计算的结果为:”和计算的结果值输出至显示器屏幕。
参照前文介绍的方法,运行Java程序,结果如图1-36所示。
图1-36 例1-2程序运行结果
从上面的程序中可以看出,如果参与运算的数据发生变化,如变为8和12,则必须修改源程序代码,并重新编译。显然,利用赋值语句提供运算数据是很不灵活的方式。更为常见的输入方式是在程序执行后,由用户从键盘输入程序运行所需的数据,进而实现更加灵活的用户与程序之间的交互过程。
将MyTest.java源程序中的程序代码进行修改,以实现用户从键盘输入参与运算的两个数据,程序完成计算两数之和并显示结果的功能,修改后的程序代码如下。
结合程序代码进行分析,如下。
①以import关键字引导的语句称为导入语句,作用是将java.io包中所有的类导入当前程序,以便在程序中调用相关的类和方法。
②Java语言要求在控制台进行标准输入时,必须有异常处理。这里采用了异常抛出的throws语法格式,当发生输入异常时,程序自动抛出异常IOException,异常将由JVM自行处理。Java中的异常处理机制分为两种:一种是捕获异常,另一种是抛出异常。更详细的内容将在本书后续的异常处理部分进行进一步的说明。
③System.in.read(t)方法用于获得用户从键盘输入的数据,存入字节数组t中。Java是强类型语言,要求先定义后使用。因此,之前已定义了字节数组byte t[]。数组在Java中是引用类型,需要通过new关键字完成内存空间的分配。
④键盘输入的数据保存在字节数组中,但最后的加法运算需要数值类型的数据来参与完成。Java系统为整数(int)和实型小数(double)都提供了对应的转换方法来实现数据转换。Integer.parseInt(String)的作用是将参数由数字组成的字符串转换为对应的整数型数据。Double.parseDouble(String)的作用是将参数由数字和小数点组成的字符串转换为对应的实型数据。在存储键盘输入数据时,如果字节数组中的存储空间未全部使用,在将字节数组转换为字符串时,将用空格进行填充。字符串中的空格是无法转换为数值的,因此需要利用trim()方法去除掉多余的空格。Integer类和Double类都定义在java.lang包中,因此可以直接使用。
参照前文介绍的方法,运行Java程序,结果如图1-37所示。
图1-37 改进后程序的运行结果
Java语言的系统类库中对控制台程序处理用户键盘输入还提供了其他的处理方案,比如可以使用封装程度更高的java.util.Scanner类来完成获得用户键盘输入数据这个任务。下面这段程序代码是使用Scanner类来完成用户从键盘输入两个数据(即一个整数和一个小数),然后计算两数之和并显示结果这个任务的,程序的运行结果同图1-37所示。
我们在处理控制台程序键盘输入任务时,可以根据需求选择上述两个程序代码段中的任意一个解决方案进行使用,获得的结果是相同的。
上面的程序是使用控制台方式来完成Java程序的输入/输出处理过程的。除此之外,在Java程序中还可以使用图形化方式来完成与用户的交互过程。
图形化交互方式是当今程序开发的主流方式,其主要特征如下。
●程序界面主要由图形化的要素(如窗体、菜单、按钮等)构成。
●程序没有预定好的运行流程,而是由随机事件来驱动。
●人机交互由消息机制来支持。
●输入设备以鼠标、键盘为主,输出设备以显示器为主。
在下面的例子中,将使用Java语言中提供的对话框类JOptionPane来完成图形化的输入和输出过程。更复杂的Java图形化程序的开发实现,将在本书后续相关部分进行讲解。
【例1-3】 编写Java程序,利用图形用户界面,完成从键盘输入两个运算数据,计算两数之和并输出结果的功能。
参照前文介绍的方法,在Eclipse中建立Java程序项目,输入如下程序代码:
结合程序代码进行分析,如下。
①javax.swing包中包含很多创建Java图形用户界面应用程序所必需的类。第1行将JOptionPane类引入当前程序,以便在程序中调用相关的方法,实现相关输入/输出功能。
②调用类JOptionPane的showInputDialog()方法显示“输入”对话框,如图1-38和图1-39所示。showInputDialog()方法的参数为提示信息,用以提示用户输入相关内容。用户在文本框中输入相关字符信息后,单击“确定”按钮或按Enter键可以把文本框中的字符信息返回给Java程序。
③调用类JOptionPane的showMessageDialog()方法,打开“消息”对话框显示结果信息,如图1-40所示。这个方法包含两个参数,参数之间用逗号分隔。第一个参数表示对话框的父窗口对象,当使用关键字null时,表示对话框的父窗口不存在,对话框将直接显示在计算机的显示器屏幕上;第二个参数为对话框中要显示的信息,类型为字符串。
参照前文介绍的方法,运行Java程序。按照提示输入第一个计算数据5,如图1-38所示。按照提示输入第二个计算数据3.5,如图1-39所示。显示计算结果,如图1-40所示。
图1-38 输入第一个计算数据
图1-39 输入第二个计算数据
图1-40 例1-3的计算结果