第3章 CHAPTER 3 第一个Java程序 本书第一个Java程序是通过控制台输出“Hello World!”,以这个示例为切入点,系统介绍Java程序的编写、Java源代码结构以及一些基础知识。 Java程序都是以类的方式组织的,Java源文件都保存在.java文件中。每个可运行的程序都是一个类文件,或者称为字节码文件,保存为.class文件。要实现在控制台中输出HelloWorld示例,则需要编写一个Java类。 3.1使用IntelliJ IDEA 实现 HelloWorld示例可通过多种工具实现,本节首先介绍如何通过IntelliJ IDEA实现。 3.1.1创建项目 在IntelliJ IDEA中通过项目(Project)管理Java类,因此需要先创建一个Java项目,然后在项目中创建一个Java类。 IntelliJ IDEA创建项目步骤如下: (1) 如果IntelliJ IDEA第一次启动,则先启动如图31所示的欢迎页面,在欢迎页面单击New Project按钮,进入如图32所示对话框。 图31欢迎页面 (2) 如果已经进入IntelliJ IDEA工具,则通过选择File→New Project命令,也可以进入如图32所示对话框。 图32New Project(新建项目)对话框 在如图32所示对话框中选择Java项目类型。如果JDK配置没有问题,则在Project SDK下拉框中会识别JDK版本。其他的选项保持默认值,然后单击Next按钮进入如图33所示新建Java项目模板对话框。注意不要选择任何选项,直接单击Next按钮进入如图34所示项目设置对话框。根据自己的情况在Project name中输入项目名称,在Project location中输入项目保存路径。设置完成后单击Finish按钮完成项目创建,然后进入如图35所示的界面。 图33新建Java项目模板对话框 图34项目设置对话框 图35项目创建完成 3.1.2创建类 项目创建完成后,右击src文件夹,选择菜单New→Java Class命令,打开如图36(a)所示New Java Class(新建Java类)对话框。然后在输入框中输入类名HelloWorld,如图36(b)所示,双击Class类型创建HelloWorld类,如图37所示。 图36新建类对话框 图37创建HelloWorld类完成 3.1.3运行程序 修改刚生成的HelloWorld.java源文件,添加main方法,并添加输出语句。修改完成后代码如下: public class HelloWorld { public static void main(String[] args) {① System.out.print("Hello World!");② } } 代码第①行中的public static void main(String[] args)方法是一个应用程序的入口,也表明了HelloWorld是一个Java应用程序(Java Application),可以独立运行。代码第②行的System.out.print("Hello World!")语句是输出Hello World!字符串到控制台。 程序编写完就可以运行了。如果是第一次运行,则需要选择运行方法,具体步骤: 右击HelloWorld文件,选择Run 'HelloWorld.main()'命令运行HelloWorld程序。如果已经运行过一次,就不需要这么麻烦了,直接单击工具栏中的“运行”按钮,或选择菜单Run→Run 'HelloWorld'命令,或使用快捷键Shift+F10,就可以运行上次的程序。运行结果如图38所示,则“Hello World!”字符串显示到下面的控制台。 图38运行结果 3.2文本编辑工具+JDK实现 如果不想使用IDE工具(建议初学者通过这种方式学习Java),那么文本编辑工具+JDK对于初学者而言是一个不错的选择,这种方式可以使初学者了解到Java程序的编译和运行过程,通过自己在编辑器中输入所有代码,可以帮助熟悉常用类和方法。 3.2.1编写源代码文件 首先使用任何文本编辑工具创建一个文件,然后将文件保存为HelloWorld.java。接着在HelloWorld.java文件中编写如下代码。 public class HelloWorld { public static void main(String[] args) { System.out.print("Hello World!"); } } 3.2.2编译程序 编译程序需要在命令行中使用JDK提供的javac指令编写,参考2.1.3节打开命令行窗口,如图39所示,通过cd命令进入源文件所在的目录,然后执行javac指令。如果没有错误提示,则说明编译成功。编译成功时会在当前目录下生成类文件,如图310所示生成了3个类文件,这是因为HelloWorld.java源文件中定义了3个类。 图39编译源文件 图310编译成功 3.2.3运行程序 编译成功之后就可以运行了。执行类文件需要在命令行中使用JDK提供的javac指令,参考2.1.3节打开命令行窗口,如图311所示,通过cd命令进入源文件所在的目录,然后执行java HelloWorld指令,执行成功后会在命令行窗口输出“Hello World!”字符串。 图311运行类文件 3.3代码解释 经过前面的介绍,读者应该可以自己写一个Java应用程序了。但可能还是对其中的一些代码不甚了解,下面来详细解释HelloWorld示例中的代码。 //定义类 public class HelloWorld { ① //定义静态main方法 public static void main(String[] args) {② System.out.print("Hello World!"); ③ } } 代码第①行是定义类,public修饰符用于声明类是公有的,class是定义类关键字,HelloWorld是自定义的类名,后面跟着的“{…}”是类体,类体中会有成员变量和方法,也会有一些静态变量和方法。 代码第②行是定义静态main方法,而作为一个Java应用程序,类中必须包含静态main方法,程序执行是从main方法开始的。main方法中除参数名args可以自定义外,其他必须严格遵守如下两种格式: public static void main(String args[]) public static void main(String[] args) 这两种格式本质上就是一种,String args[]和String[] args都是声明String数组。另外,args参数是程序运行时通过控制台向应用程序传递字符串参数。 代码第③行System.out.print("Hello World!");语句是通过Java输出流(PrintStream)对象System.out打印Hello World!字符串,System.out是标准输出流对象,它默认输出到控制台。输出流中常用打印方法如下: □print(String s): 打印字符串不换行,有多个重载方法,可以打印任何类型数据。 □println(String x): 打印字符串换行,有多个重载方法,可以打印任何类型数据。 □printf(String format, Object... args): 使用指定输出格式,打印任何长度的数据,但不换行。 修改HelloWorld.java示例代码如下: public class HelloWorld { public static void main(String[] args) { //通过print打印第一个控制台参数 System.out.print(args[0]);① //通过println打印第二个控制台参数 System.out.println(args[1]);② //通过printf打印第三个控制台参数,%s表示格式化字符串 System.out.printf("%s", args[2]);③ System.out.println(); int i = 123; //%d表示格式化整数 System.out.printf("%d\n", i);④ double d = 123.456; //%f表示格式化浮点数 System.out.printf("%f%n", d);⑤ System.out.printf("%5.2f", d);⑥ } } 编译HelloWorld.java源代码后,如图312所示,其中,java命令行后面的HelloWorld是要运行的类文件,Tony Hello World.是参数,多个参数用空格分隔。 图312在命令行中运行程序 上述代码第①行使用print方法打印第一个控制台参数args[0],注意该方法是打印完成后不换行,从输出结果中可见第一个控制台参数Tony和第二个控制台参数Hello连在一起了。代码第②行使用println方法打印第二个控制台参数args[1],从输出结果中可见第二个控制台参数Hello后面是有换行的。 代码第③行~第⑥行都是使用printf方法打印,注意printf方法后面是没有换行的,想在后面换行可以通过System.out.println()语句实现,或在打印的字符串后面添加换行符号(\n或%n),见代码第④行和第⑤行。代码第⑥行中%5.2f也表示格式化浮点数,5表示总输出的长度,2表示保留的小数位。 提示 在简体中文版本的Windows平台中默认编码集是GBK,所以javac指令编译源代码文件时默认文件的编码集是GBK。一般情况下使用记事本和EditPlus等文本编辑工具创建的源代码文件默认编码集也是GBK,因此在编译这些源代码文件不会发生错误。但是使用Sublime Text工具创建的源代码文件默认编码集是UTF8,如果源代码文件中有中文,则发生如图313所示的编译错误。为了解决这种错误,可以在编译时指定源代码文件字符集,如图314所示,使用javac encoding UTF8 HelloWorld.java指令即可。 图313采用UTF8编码的源代码文件在Windows平台中编译错误 图314编译时指定源代码文件字符集 3.4本章小结 本章通过一个HelloWorld示例,介绍使用IntelliJ IDEA和使用文本工具+JDK实现该示例的具体过程。掌握IntelliJ IDEA使用非常重要,但是使用文本工具+JDK对于初学者也很有帮助。最后详细解释了HelloWorld示例。 3.5同步练习 选择题 1. 作为一个可以运行的Java应用程序类,下列说法正确的是()。 A. 这个类必须声明为公有的 B. 类名与文件名一致 C. 类中必须包含静态main方法 D. 类中必须包含System.out.print语句 2. 作为一个可以运行的Java应用程序类中的main方法,下列写法正确的是()。 A. public static void main(String args[]) B. public static void main(String[] args) C. static void main(String args[]) D. void main(String args[]) 3. 关于打印方法下列说法正确的是()。 A. print(String s)方法打印字符串不换行 B. println(String s)方法打印字符串换行 C. printf()方法使用指定输出格式,打印任何长度的数据,但不换行 D. printfln()方法使用指定输出格式,打印任何长度的数据,但不换行 3.6上机实验: 世界,你好 1. 使用IntelliJ IDEA工具编写并运行Java应用程序,使其在控制台输出字符串“世界,你好!”。 2. 使用文本编辑工具编写Java应用程序,然后使用JDK编译并运行该程序,使其在控制台输出字符串“世界,你好!”。