1.1 “初识Java—Hello World”实例
【实例目的】
(1)掌握Java语言的分类。
(2)掌握Java程序的分类。
(3)掌握Java程序的开发过程。
【实例内容】
通过Java语言编写一个控制台程序,通过Java编译器进行编译,在控制台输出“Hello World”。
【技术要点】
创建一个名为“HelloWorld.java”的应用程序,需要使用JDK中的Java编译器对其进行编译。为了使读者更清楚地了解程序的执行过程,在控制台界面下进行编译和运行。具体步骤如下:
1)在文本文件中编辑完成Java源程序
(1)在C盘新建java目录,在该目录下新建文件名为HelloWorld的文本文件。
(2)在文本文件中输入程序代码,如图1.1所示。
图1.1 在文本文件中输入代码
(3)代码输入完成后,先进行保存,然后将文本文件的扩展名由.txt改为.java。
2)编译Java程序
(1)单击“开始”按钮,在搜索框中输入cmd命令,按【Enter】键打开控制台(见图1.2);
(2)用cd命令进入到Java源代码所在的目录;
(3)输入javac HelloWorld.java,然后按【Enter】键,如果程序编译成功,则在文件夹下生成一个HelloWorld.class的字节码文件(见图1.3)。
(4)在控制台下接着输入javac HelloWorld,按【Enter】键运行,控制台上输出程序的结果,显示Hello World字符串。
图1.2 编译Java程序
图1.3 Java编译的字节码文件
【相关知识及注意事项】
1.1.1 Java语言的发展历程
Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由Sun Microsystems公司于1995年5月推出的Java程序设计语言和Java平台(即Java SE、Java EE、Java ME)的总称。
Java语言的前身是Oak语言,是Sun公司在1991年由一个叫Green的项目组专门为家用消费电子产品开发的一个分布式代码系统,主要用来与家电产品如电视机、冰箱、空调等进行信息交互和控制。由于商业原因,Oak语言一直没有被推广出去。
1994年,随着互联网的快速发展,Sun公司的Bill Joe参加Green小组,决定将Oak语言应用于互联网的万维网的开发中,并编制了HotJava浏览器。通过HotJava浏览器在互联网上的应用,充分展现了Oak语言的网络方向的特点。同时Bill Joe决定通过互联网让世界上无数的软件开发人员免费使用Oak语言,更加推动了Oak语言的发展。
1995年,Sun公司将Oak语言正式命名为Java,同时召开了Java语言的发布会,推出Java和HotJava的最初版本。
1998年,Sun公司发布Java2企业平台J2EE。
1999年,Sun公司发布了Java的三个版本:标准版(J2SE)、企业版(J2EE)和微型版(J2ME)。
2000年,Sun公司发布了JDK1.4。
2005年,在JavaOne大会,Sun公司发布了Java SE6。此时,Java的各种版本已经更名,以取消其中的数字“2”:J2EE更名为Java EE,J2SE更名为Java SE,J2ME更名为Java ME。
2009年,Oracle公司以74亿美元收购Sun公司,取得Java的版权。
2011年,Oracle公司发布了Java7的正式版。
2014年,Oracle公司发布了Java8正式版。
Java平台由Java虚拟机和Java应用编程接口构成。Java应用编程接口为Java应用提供了一个独立于操作系统的标准接口,可分为基本部分和扩展部分。在硬件或操作系统平台上安装一个Java平台之后,Java应用程序就可运行。现在Java平台几乎已经嵌入了所有的操作系统。这样Java程序可以只编译一次,就可以在各种系统中运行。
Java技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于PC、数据中心、游戏控制台、超级计算机、移动电话和互联网,同时拥有全球最大的开发者专业社群。在全球云计算和移动互联网的产业环境下,Java更具备了显著优势和广阔前景。
1.1.2 Java语言的特点
Java语言是当前最流行的网络编程语言,和C++语言相比,有着特殊的优点,如简单性、平台无关性、面向对象、分布式、安全性、支持多线程、健壮性、动态性等。
1.简单性
与C++相比,Java不再支持运算符重载、多级继承及广泛的自动强制等易混淆和极少使用的特性,而增加了内存空间自动垃圾收集的功能,复杂性的省略和实用功能的增加使得程序开发变得既简单又可靠。
2.平台无关性
平台无关性是Java最吸引人的地方。Java是一种网络语言,而网络上充满了各种不同类型的机器和操作系统。Java采用了解释执行而不是编译执行的运行环境,首先编译成字节码,然后装载与校验,再解释成不同的机器码来执行,即“Java虚拟机”的思想,屏蔽了具体的平台环境的要求。
3.面向对象
面向对象的技术具有继承性、封装性和多态性等多种优点,Java在保留这些优点的基础上,又具有动态编程的特性,更能发挥出面向对象的优势。
4.分布式
Java建立在扩展TCP/IP网络平台上。库函数提供了用HTTP和FTP协议传送和接收信息的方法。Java应用程序使用URL对象访问网络资源,这使得程序员使用网络上的文件就像使用本地文件一样容易。
5.安全性
作为网络语言,Java有建立在公共密钥技术基础上的确认技术,提供了足够的安全保障。Java在运行应用程序时严格检查其访问数据的权限,如不允许网络上的应用程序修改本地的数据。同时,Java程序运行稳定,轻易不会出现死机现象。
6.支持多线程
多线程机制使应用程序能同时进行不同的操作,处理不同的事件。Java有一套成熟的同步语言,保证了对共享数据的正确操作。通过使用多线程,程序设计者可以分别用不同的线程来完成特定的行为。
7.健壮性
健壮性反映程序的可靠性。Java的几个内置的特性使程序的可靠性得到改进:
(1)Java是强类型语言。编译器和类载入器保证所有方法调用的正确性,防止隐式类版本不兼容性。
(2)Java没有指针,不能引用内存指针,避免了内存或数组越界访问。
(3)Java进行自动内存回收,编程人员无法意外释放内存,不需要判断应该在何处释放内存。
(4)Java在编译和运行时,都要对可能出现的问题进行检查,以消除错误的产生。另外,在编译的时候还可揭示出可能出现但尚未被处理的异常,以防止系统的崩溃。
8.动态性
Java在类库中可以自由地加入新方法和实例变量,而不影响用户程序的执行;同时,Java通过接口来支持多重继承,使其具有更灵活的方式和扩展性。
Java语言除了具有上述主要特点外,还具有高性能、解释性和可移植性等特点。
1.1.3 Java程序的分类
根据程序结构和运行环境的不同,Java程序可以分为两类:Java应用程序(Java Application)和Java小应用程序(Java Applet)。Java应用程序以main()方法作为程序入口,由Java解释器加载执行。Java应用程序是完整的程序,能够独立运行,而Java Applet小应用程序不使用main()方法作为程序入口,需要嵌入到HTML网页中运行,由appletviewer或其他支持Java的浏览器加载执行,不能独立运行。无论哪种Java源程序,都用扩展名为“.java”的文件保存。
1.Java Application程序
Java Application程序是可独立运行的JVM程序,它由一个或多个类组成,其中必须有一个类中定义了main()方法,main()方法就像C语言的main()方法一样,是Java Application程序运行的入口。
编写和运行Java Application程序,则需要按下列步骤进行:
(1)首先创建一个Java Application源程序(.java文件)
创建一个名为HelloWorldApp.java的文件,可在任何字符编辑器上输入并保存下列Java源程序代码:
其实质是创建一个名为HelloWorldApp的类,并把它保存为与它相同名字的文件HelloWorldApp.java。
一个Java源程序是由若干个类组成的,本程序中的Java应用程序只有一个类。class是Java的关键字,用来定义类。public也是关键字,用来声明一个类是公共类。
源文件的命名规则如下:如果一个Java源程序中有多个类,那么只能有一个类是public类;如果有一个类是public类,那么Java源程序的名字必须与这个类的名字完全相同,扩展名是“.java”;如果源文件中没有public类,那么源文件的名字只要和某个类的名字相同,而且扩展名是“.java”就可以了。
应用程序的入口是main()方法,它有固定的书写方式为:
main()方法之后的两个花括号及花括号内的内容叫作方法体。一个Java应用程序必须有且仅有一个类含有main()方法,这个类称为应用程序的主类。public、static和void用于对main()方法进行声明。在一个Java应用程序中,main()方法必须被声明为public、static和void,public声明main()是公有的方法,static声明main()是一个类方法,可以通过类名直接调用,而void则表示main()方法没有返回值。
在定义main()方法时,String args[]用来声明一个字符串类型的数组args,它是main()方法的参数,用来接收程序运行时所需要的参数。
上例中的main()方法中只有一条语句:
System.out.println("Hello Java!"); //在控制台上输出字符串"Hello Java!"
这条语句是把字符串"Hello Java!"输出到系统的标准输出上,例如系统屏幕。其中,System是系统类,out是java.io.PrintStream类的对象,是System类中的一个静态属性,表示“标准输出”,println是out对象的一个方法,其作用是在系统标准输出上显示形参里指定格式的字符串,并回车换行。“//”代表注释,用来说明这一条语句的功能,注释主要用来提高程序的可读性,不会参与程序的编译。
(2)第二步是对己创建好的Java源程序进行编译
该步骤是用Java编译器对Java源程序(.java)进行编译,生成对应的字节码文件(.class)。如果编译成功,会产生一个有相同文件名的带.class扩展名的字节码文件。
其命令格式如下:
javac HelloWorldApp.java
如果编译中不出现错误,将会得到一个名为HelloWorldApp.class文件。编译选项使用默认方式。
(3)最后解释执行已编译成功的字节码文件(.class文件)
用Java解释器对Java字节码文件(.class文件)解释执行。
在上例得到的HelloWorldApp.class文件,现在可以用Java解释器执行。
java HelloWorldApp
运行的结果,将会在标准输出设备上输出:
Hello Java!
Java解释器在解释执行时,解释处理的是类名,而不是文件名,所以在解释器Java后面跟随的是类名,而不能写成文件名的形式(HelloWorldApp.class)。其选项也使用默认方式。
2.Java Applet程序
一个Java Applet也是由若干个类组成的,一个Java Applet不再需要main()方法,但必须有且仅有一个类扩展了Applet类,即它是Applet类的子类,这个类称为Java Applet的主类,Java Applet的主类必须是public的,Applet类是系统提供的类。
Applet与Application的区别在于其执行方式不同。Application是从main()方法开始运行的,而Applet是在浏览器中运行的,必须创建一个HTML文件,通过编写HTML代码告诉浏览器载入何种Applet以及如何运行。
开发Java Applet程序的步骤如下:
(1)编写Applet源程序,将其保存为“.java”文件。
(2)编译源程序,生成字节码文件“.class”。如果源文件包含了多个类,则会生成多个扩展名为“.class”的文件,都和源文件存放在相同的目录下。如果对源文件进行了修改,那么必须重新进行编译,再生成新的字节码文件。
(3)编写一个HTML文件,即含有Applet标记的Web页,嵌入Applet字节码文件“*.class”。
(4)运行Java小应用程序。
例如:
①以文件名“HelloWorldApplet.java”保存Java Applet源程序。
②嵌入字节码文件的HTML文件“HelloWorldApplet.html”。
③使用JDK编译Java小应用程序。
javac HelloWorldApplet.java
④使用JDK提供的appletviewer运行。
appletviewer HelloWorldApplet.html
Java Applet程序必须创建一个Applet或JApplet的子类。Applet程序中不需要有main()方法。
1.1.4 Java程序的开发过程
Java语言包括3种核心机制:Java虚拟机、垃圾收集机制和代码安全检测。Java程序的开发过程大致分为3个阶段:
(1)编写Java源文件。将编辑好的源程序以扩展名“.java”保存起来,即保存成“*.java”文件。
(2)编译Java源程序。使用Java编译器编译“*.java”源程序,从而得到字节码文件“*.class”。
(3)运行Java程序。
Java程序的开发流程简单示意图如图1.4所示。
从图1.4中可以看出,一个源文件首先应保存为扩展名为“.java”的文件,通过编译器产生字节码文件。
图1.4 Java程序的开发流程
如果编写的是小应用程序(Java Applet),可以直接由浏览器解释运行,对于Java、应用程序就会由Java解释器来执行。在本书中,只有在后面才会接触到小应用程序,前半部分还是以Java应用程序为主,也就是说我们使用的是Java解释器。