Java4747 第1章java语言基础本章内容(一般掌握3%~5%)本章重点:应用程序和小应用程序的基础知识,程序的开发过程,基本数据类型。本章难点:程序的开发过程,了解一种Java程序的开发环境。1.1Java语言特点Java语言昀初的应用对象是消费性电子产品(即PDA、电子游戏机、电视机顶盒之类的产品)。为了进入消费性电子产品市场,SUN公司专门成立了一个项目开发小组,目标是设计嵌在消费性电子产品的小型分布式系统软件,能够适用于异构网络、多主机体系结构,能实现信息安全传递。项目小组的昀初设想是用C++语言完成这个目标。由于C++语言的复杂性和不安全性,不能胜任这项工作。为此,项目小组开发一个取名为Oak的语言。Oak语言在消费性电子产品市场上没有获得青睐。但在当时,Internet开始流行,人们发明了一种网络传输协议,这种协议可以在文本中插入图片和声音,能使单调的Internet世界变得图文并茂。虽然Web页面拥用图文和声音,但仍然是静态的,不具备交互性。要让页面拥有动态画面,并能交互,需要在Web页面中嵌入一会段程序。由于在Internet上运行的数以千计不同类的计算机,这就要求编写这种程序的语言必须具有平台无关性,并要求语言必须简练,支撑环境要小,而安全性却很高。Oak语言恰好能够满足这些要求。将Oak语言正式应用于Internet还需要进一步完善,还要求有一个支持它的Web浏览器。能用于编写浏览器,并获得浏览器扶持的新版本Oak语言取名Java。Internet得到Java语言的支持,可以实现真正的交互,人们使用浏览器能“漫游”丰富多彩的Internet世界。Java语言是适用于分布式计算环境的面向对象编程语言,它虽类似C和C++,但比C++简单,忽略了许多为提高计算效率,初学者较难掌握的程序语言特性。Java语言主要有以下特点:1.强类型Java语言是一种强类型语言,强类型能约束程序员必须遵守更多的编程规定,也能让编译器检测出程序中尽可能多的错误。2.编译和解释Java语言是一种高级编程语言,用Java语言编写的源程序在计算机上运行需经过编译和解释执行两个严格区分的阶段。Java语言的编译程序先将Java源程序翻译成机器无关的字节码(bytecode),不是通常的编译程序将源程序翻译成计算机的机器代码。运行时,Java的运行系统和链接需要执行的类,并作必要的优化后,解释执行字节码程序。3.自动无用内存回收功能Java语言具有自动无用内存回收功能,程序可以按需使用内存,但不需要对无用内存显式地撤销分配。系统有一个垃圾收集器(garbagecollector),自动收集程序不再使用的内存。这样,能避免显式的撤销分配所引起的安全问题。Java语言不再含有任何不安全的语言成分。例如,没有指针,数组元素都要检查下标是否越界。4.面向对象面向对象是程序员编写大型程序、有效控制程序复杂性的重要手段。Java语言在面向对象方面,比C++更“纯”,它的所有数据类型,包括布尔类型、整形、字符型等,都有相应的类,程序可完全基于对象编写。面向对象语言主要有封装性、继承性和多态性三个特点。封装就是将实现细节隐藏起来,只给出如何使用的信息。数据及数据上的操作用类封装,对象是类的实例,外界使用对象中的数据及可用的操作受到一定的限制。继承体现众多的一种层次对象的特性,下一层的类可从上一层的类继承定义,从上一层类派生的类的对象能继承上一层对象的特性,同时可以改变和扩充一些特性,以适应其自身的特点。多态性的意义主要体现在逻辑上相同的不同层次上的操作,使用相同的操作名,根据具体对象,能自动选择对应的操作。Java语言很实用地实现了这三种特性。5.与平台无关与平台无关是对程序可移植性昀直接昀有效的支持。Java语言的设计者在设计时重点考虑了Java程序的可移植性,采用多种机制来保证可移植性,其中昀主要的是定义了一种虚拟机(virtualmachine),以及虚拟机使用的java字节码。在任何平台上,Java源程序被Java编译器编译成虚拟机能够识别的字节码。这样,只要有Java虚拟机的平台,就能解释执行java字节码程序,从而实现Java与平台无关。另外,Java语言还采用基于国际标准的数据类 1 / 177 Java4747 型,在任何平台上,同上种数据类型是一致的。例如,用int标识32位二进制位(bit)整型数据,那么无论在哪一台计算机上,Java的int数据都是32位整数。相反,C语言会随着硬软件平台的改变,用int标识的整数位数也可能不全相同。Java语言提高可移植性的代价是降低程序的执行效率。出于java语言也是一种解释执行的语言,Java程序的执行速度与C程序的执行速度有较大的差别。不过,为了尽量弥补执行效率低的缺陷,java的字节码在设计上非常接近现代计算机的机器码,这有助于提高解释执行的速度。6.安全性Java是在网络环境中使用的编程语言,必须考虑安全性问题,主要有以下两个方面:设计的安全防范:Java语言没有指针,避免程序因为指针使用不当,访问不应该访问的内存空间;提供数组元素上标检测机制,禁止程序越界访问内存;提供内存自动回收机制,避免程序遗漏或重复释放内存。运行安全检查:为了防止字节码程序可能被非法改动,解释执行前,先对字节码程序作检查,防止网络“黑客”对字节码程序已作了恶意改动,达到破坏系统的目的。昀后,浏览器限制下载的小应用程序不允许访问本地文件,避免小应用程序破坏本地文件。7.分布式计算Java语言支持客户机/服务器计算模式。Java程序能利用URL对象,能访问网络上的对象,如同访问本地的文件一样,实现数据分布。另外,Java的客户机/服务器模式也可以把计算从服务器分散到客户机端,实现操作分布。8.多线程线程是比进程更小的一种可并发执行的单位,每个进程都有自己独立的内存空间和其他资源,当进程切换时需要进行数据和资源的保护与恢复。若干协同工作的线程可以共享内存空间和资源,线程切换不需要数据的保护与恢复。Java的运行环境采用多线程实现,可以利用系统的空闲时间执行诸如内存回收等操作;Java语言提供语言级多线程支持,用Java语言能直接编写多线程程序。1.2Java应用程序和小应用程序Java程序可以是独立的应用程序和能在浏览器上执行的小应用程序(Applet)。两种Java程序都由一个或多个扩展名为“.class”的文件组成。都需要java虚拟机(JVM)载入并翻译。这两种程序的主要区别是:小应用程序只能在与Java兼容的容器中运行,可以嵌入在HTML网页内,在网络上发布,当网页被浏览时,在浏览器中运行。小应程序的运行还要受到严格的安全限制,例如,它不能访问用计算机上的文件。Java应用程序没有这些限制,也不支持网页嵌入和下载运行。小应用程序和应用程序在代码编写上也有很大差异。一个小应用程序必须定义成一个Applet类的子类,应用程序可以是Applet类的子类,也可以不是。应用程序必须在一个类中定义一个main()方法,该方法代表应用程序的入口。而小应用程序不必定义main()方法,它的执行由Applet类中定义的多个方法控制。[例1.1]一个非常简单的应用程序。publicclassExample1_1{//这是我的第一个应用程序publicstaticvoidmain(String[]args){System.Out.println(“你好!欢迎你学习Java语言。”);}}上述java程序的执行将输出以下字样:你好!欢迎你学习Java语言。一个应用程序由若干个类组成,上面这个应用程序只有一个类,类的名字是Example1_1。public是java语言的关键字,表示声明的类Example1_1是公用的。class也是关键字,用来声明类。昀外层的一对花括号以及括号内的内容叫做类体。publicstaticvoidmain(String[]args)是类Example1_1的一个方法。一个应用程序必须只有一个类含有main()方法,这个类是应用程序的主类。publicstaticvoid是对main()方法的说明。应用程序的main()方法必须被说明成publicstaticvoid。表示main()方法的访问权限是公有的,它是一个类方法,没有结果返回,参见第3章。String[]args或Stringargs[],声明main()方法的参数是一个字符串数组,参见第4章。Java源程序命名受严格的限制。Java源文件的扩展名必须是“.java”如果源文件中有多个类,那么只能有一个public类;如果源文件中有public类,那么源文件的名字必须与这个类的名字完全相同。例如,例1.1应用程序的源文件名必须是Example1_1.java。如果源文件没有public类,那么源文件的名字只要和某个类的名字相同即可。 2 / 177 Java4747 [例1.2]一个简单的小应用程序,用一同颜色显示两行文字:欢迎你学习Java语言。只要认真学习,多上机实习,一定能学好Java语言。importjava.applet.*;importjava.awt.*;publicclassExample1_2extendsApplet{publicvoidpaint(Graphicsg){g.setColor(Color.blue);//设置显示的颜色为blueg.drawString(“欢迎你学Java语言”,30,20);g.setColor(Color.red);//设置显示的颜色为redg.drawString(“只要认真学习,多上机实习,一定能学好Java语言。”,30,50);}}一个小应用程序也出若干个类组成,其中必须有一个类,它继承系统提供的Applet类,这个类是小应用程序的主类。主类必须是public的,源文件名必须与小应用程序的主类名相同。上述程序的源文件名必须是Example1_2.java。小应用程序的结构参见3.5节。在结束这一节之前,先讨论一下程序中经常出现的注释。注释是程序中的说明文字,用于帮助阅读程序,它不是语句,不会影响程序的执行效率。Java语言的注释有三种形式:行注释//变量r是贺的半径块注释/*以下程序段是采用冒泡排序对数组元素实现从小到大排序*/文档注释/**类Student是学生类*/行注释用于简短地说明前面代码的意义或功能。注释内容至行末结束,不能跨行。例如:intfontsize=30;//标题字体大小块注释是多行注释,用于说明下面程序段的算法、功能等,块注释不可嵌套使用。文档注释能被实用程序javadoc接受,它能自动生成程序的HTML文档。1.3Java程序的开发过程Java程序的开发过程如图1.1所示。对于Java应用程序,先编写Java源程序,源程序经Java编译器编译后产生码文件,昀后由Java解释器解释执行字节码文件。对于小应用程序,先编写源程序,然后经Java编译器编译后,产生字节码文件,昀后由Web浏览器解释执行字节码文件。以下以使用SUN公司提供的JavaJDK(javaDeveloper’sKit)为例,并假设JavaJDK安装在d:\java目录下,则在该目录下还应包含以下几个文件和子目录:(1)子目录d:\java\bin,这个子目录是JavaJDK的核心,其中昀主要的可执行文件有:1)javac---编译器2)java---解释器3)jdb---调试器4)appletviewer---javaApplet解释器(2)子目录d:\java\lib,这个子目录存储的是函数库。编写源程序时,使用一个文字编辑器,输入源程序文件,并保存。键入编译命令,使用Java编译器编译Java源程序。键入解释命令,通过解释器解释执行Java应用程序的字节码文件。对于小应用程序需通过支持Java的浏览器解释执行字节码文件。设输入前面所述Java程序,源文件名为Example1_1.java,保存在D:\java目录下。Java编译器的使用格式是:javac[选项]源文件例如,