收藏 分享(赏)

JAVA教程 第一讲 Java语言概述31959.doc

上传人:dreamzhangning 文档编号:2309207 上传时间:2018-09-10 格式:DOC 页数:15 大小:203KB
下载 相关 举报
JAVA教程 第一讲 Java语言概述31959.doc_第1页
第1页 / 共15页
JAVA教程 第一讲 Java语言概述31959.doc_第2页
第2页 / 共15页
JAVA教程 第一讲 Java语言概述31959.doc_第3页
第3页 / 共15页
JAVA教程 第一讲 Java语言概述31959.doc_第4页
第4页 / 共15页
JAVA教程 第一讲 Java语言概述31959.doc_第5页
第5页 / 共15页
点击查看更多>>
资源描述

1、JAVA 教程 第一讲 Java 语言概述1.1 Java 语言的发展史1.1.1Java 语言在互联网时代获得巨大成功大家想一想,在 PC 下用 windows 编写的程序能够不做修改就直接拿到 UNIX 系统上运行吗?显然是不可以的,因为程序的执行最终必须转换成为计算机硬件的机器指令来执行,专门为某种计算机硬件和操作系统编写的程序是不能够直接放到另外的计算机硬件上执行的,至少要做移植工作。要想让程序能够在不同的计算机上能够运行,就要求程序设计语言是能够跨越各种软件和硬件平台的,而 Java 满足了这一需求。1995 年,美国 Sun Microsystems 公司正式向 IT 业界推出了

2、java 语言,该语言具有安全、跨平台、面向对象、简单、适用于网络等显著特点,当时以 web 为主要形式的互联网正在迅猛发展, java 语言的出现迅速引起所有程序员和软件公司的极大关注,程序员们纷纷尝试用 java 语言编写网络应用程序,并利用网络把程序发布到世界各地进行运行。包括 IBM、Oracle、微软、Netscape、Apple 、SGI 等大公司纷纷与Sun Microsystems 公司签订合同,授权使用 java 平台技术。微软公司总裁比尔盖茨先生在经过研究后认为“java 语言是长时间以来最卓越的程序设计语言“。目前,java 语言已经成为最流行的网络编程语言,截止到 20

3、01 年中,全世界大约有 310 万 java 程序员,许多大学纷纷开设 java 课程,Java 正逐步成为世界上程序员最多的编程语言。在经历了以大型机为代表的集中计算模式和以 PC 机为代表的分散计算模式之后,互联网的出现使得计算模式进入了网络计算时代。网络计算模式的一个特点是计算机是异构的,即计算机的类型和操作系统是不一样的,例如 SUN 工作站的硬件是 SPARC 体系,软件是 UNIX 中的 Solaris 操作系统,而 PC 机的硬件是 INTEL 体系,操作系统是 windows 或者是 Linux,因此相应的编程语言基本上只是适用于单机系统,例如 COBOL、FORTRAN、C

4、、C等等;网络计算模式的另一个特点是代码可以通过网络在各种计算机上进行迁移,这就迫切需要一种跨平台的编程语言,使得用它编写的程序能够在网络中的各种计算机上能够正常运行,java 就是在这种需求下应运而生的。正是因为 Java 语言符合了互联网时代的发展要求,才使它获得了巨大的成功。1.1.2 Java 语言的产生任何事物的产生既有必然的原因也有偶然的因素,Java 语言的出现也验证了这一点。1991 年,美国 Sun Microsystems 公司的某个研究小组为了能够在消费电子产品上开发应用程序,积极寻找合适的编程语言。消费电子产品种类繁多,包括 PDA、机顶盒、手机等等,即使是同一类消费电

5、子产品所采用的处理芯片和操作系统也不相同,也存在着跨平台的问题。当时最流行的编程语言是 C 和 C语言,Sun 公司的研究人员就考虑是否可以采用 C语言来编写消费电子产品的应用程序,但是研究表明,对于消费电子产品而言 C语言过于复杂和庞大,并不适用,安全性也并不令人满意。于是,Bill Joy 先生领导的研究小组就着手设计和开发出一种语言,称之为 Oak。该语言采用了许多 C 语言的语法,提高了安全性,并且是面向对象的语言,但是 Oak 语言在商业上并未获得成功。时间转到了 1995 年,互联网在世界上蓬勃发展,Sun 公司发现 Oak 语言所具有的跨平台、面向对象、安全性高等特点非常符合互联

6、网的需要,于是改进了该语言的设计,要达到如下几个目标: 创建一种面向对象的程序设计语言,而不是面向过程的语言; 提供一个解释执行的程序运行环境,是程序代码独立于平台; 吸收 C 和 C的优点,使程序员容易掌握; 去掉 C 和 C中影响程序健壮性的部分,使程序更安全,例如指针、内存申请和释放; 实现多线程,使得程序能够同时执行多个任务; 提供动态下载程序代码的机制; 提供代码校验机制以保证安全性;最终,Sun 公司给该语言取名为 Java 语言,造就了一代成功的编程语。1.2 Java 的工作原理1.2.1 Java 虚拟机(1)java 虚拟机是软件模拟的计算机,可以在任何处理器上(无论是在计

7、算机中还是在其它电子设备中)安全并且兼容的执行保存在.class 文件中的字节码。java 虚拟机的“机器码“保存在.class 文件中,有时也可以称之为字节码文件。java 程序的跨平台主要是指字节码文件可以在任何具有 java 虚拟机的计算机或者电子设备上运行,java 虚拟机中的 java 解释器负责将字节码文件解释成为特定的机器码进行运行。 java 源程序需要通过编译器编译成为.class 文件(字节码文件),Java 程序的编译和执行过程 如图所示1.2.1 Java 虚拟机(2)但是,java 虚拟机的建立需要针对不同的软硬件平台做专门的实现,既要考虑处理器的型号,也要考虑操作系

8、统的种类。如下图所示,目前在 SPARC 结构、X86 结构、MIPS 和 PPC 等嵌入式处理芯片上、在 UNIX、Linux 、windows 和部分实时操作系统上都有 Java 虚拟机的实现。 如图所示1.2.2 无用内存自动回收机制在程序的执行过程中,部分内存在使用过后就处于废弃状态,如果不及时进行无用内存的回收,就会导致内存泄漏,进而导致系统崩溃。在 C语言中是由程序员进行内存回收的,程序员需要在编写程序的时候把不再使用的对象内存释放掉;但是这种人为的管理内存释放的方法却往往由于程序员的疏忽而致使内存无法回收,同时也增加了程序员的工作量。而在 Java 运行环境中,始终存在着一个系统

9、级的线程,专门跟踪内存的使用情况,定期检测出不再使用的内存,并进行自动回收,避免了内存的泄露,也减轻了程序员的工作量。1.2.3 代码安全性检查机制 安全和方便总是相对矛盾的。java 编程语言的出现使得客户端机器可以方便的从网络上下载 java 程序到本机上运行,但是如何保证该 java 程序不携带病毒或者不怀有其它险恶目的呢?如果 java 语言不能保证执行的安全性,那么它就不可能存活到今天。虽然有时候少数程序员会抱怨说 applet 连文件系统也不能访问,但是正是各种安全措施的实行才确保了 Java 语言的生存字节码的执行需要经过三个步骤,首先由类装载器(class loader)负责把

10、类文件(.class 文件)加载到 java 虚拟机中,在此过程需要检验该类文件是否符合类文件规范;其次字节码校验器(bytecode verifier)检查该类文件的代码中是否存在着某些非法操作,例如 applet 程序中写本机文件系统的操作;如果字节码校验器检验通过,由 java 解释器负责把该类文件解释成为机器码进行执行。java 虚拟机采用的是“ 沙箱“运行模式,即把 Java 程序的代码和数据都限制在一定内存空间里执行,不允许程序访问该内存空间外的内存,如果是 applet 程序,还不允许访问客户端机器的文件系统。1.2.4 Java 语言的特点(1)1 简单、面向对象和为人所熟悉j

11、ava 的简单首先体现在精简的系统上,力图用最小的系统实现足够多的功能;对硬件的要求不高,在小型的计算机上便可以良好的运行。和所有的新一代的程序设计语言一样,java 也采用了面向对象技术并更加彻底,所有的 java 程序和 applet 程序均是对象,封装性实现了模块化和信息隐藏,继承性实现了代码的复用,用户可以建立自己的类库。而且 java 采用的是相对简单的面向对象技术,去掉了运算符重载、多继承的复杂概念,而采用了单一继承、类强制转换、多线程、引用(非指针)等方式。无用内存自动回收机制也使得程序员不必费心管理内存,是程序设计更加简单,同时大大减少了出错的可能。java 语言采用了 C 语

12、言中的大部分语法,熟悉 C 语言的程序员会发现 Java 语言在语法上与 C 语言极其相似。2 鲁棒并且安全java 语言在编译及运行程序时,都要进行严格的检查。作为一种强制类型语言,java 在编译和连接时都进行大量的类型检查,防止不匹配问题的发生。如果引用一个非法类型、或执行一个非法类型操作,java 将在解释时指出该错误。在 java 程序中不能采用地址计算的方法通过指针访问内存单元,大大减少了错误发生的可能性;而且 java 的数组并非用指针实现,这样就可以在检查中避免数组越界的发生。无用内存自动回收机制也增加了 Java 的鲁棒性。作为网络语言,java 必须提供足够的安全保障,并且

13、要防止病毒的侵袭。java 在运行应用程序时,严格检查其访问数据的权限,比如不允许网络上的应用程序修改本地的数据。下载到用户计算机中的字节代码在其被执行前要经过一个核实工具,一旦字节代码被核实,便由 java 解释器来执行,该解释器通过阻止对内存的直接访问来进一步提高 java 的安全性。同时 java 极高的鲁棒性也增强了 Java 的安全性。3 结构中立并且可以移植网络上充满了各种不同类型的机器和操作系统,为使 java 程序能在网络的任何地方运行,java 编译器编译生成了与体系结构无关的字节码结构文件格式。任何种类的计算机,只有在其处理器和操作系统上有java 运行时环境,字节码文件就

14、可以在该计算机上运行。即使是在单一系统的计算机上,结构中立也有非常大的作用。随着处理器结构的不断发展变化,程序员不得不编写各种版本的程序以在不同的处理器上运行,这使得开发出能够在所有平台上工作的软件集合是不可能的。而使用 Java 将使同一版本的应用程序可以运行在所有的平台上。体系结构的中立也使得 java 系统具有可移植性。 java 运行时系统可以移植到不同的处理器和操作系统上,java 的编译器是由 java 语言实现的,解释器是由 Java 语言和标准 C 语言实现的,因此可以较为方便的进行移植工作。1.2.4 Java 语言的特点(2)4 高性能虽然 java 是解释执行的,但它仍然

15、具有非常高的性能,在一些特定的 CPU 上,java 字节码可以快速的转换成为机器码进行执行。而且 java 字节码格式的设计就是针对机器码的转换,实际转换时相当简便,自动的寄存器分配与编译器对字节码的一些优化可使之生成高质量的代码。随着 java 虚拟机的改进和“即时编译“(just in time)技术的出现使得 Java 的执行速度有了更大的提高。5 解释执行、多线程并且是动态的如果你了解 C 语言和 C+语言,可以参考下列 Java 与 C/C+语言的比较,如果不了解 C 语言和 C+语言,可以忽略本部分知识。a 全局变量Java 程序不能定义程序的全局变量,而类中的公共、静态变量就相

16、当于这个类的全局变量。这样就使全局变量封装在类中,保证了安全性,而在 C/C+语言中,由于不加封装的全局变量往往会由于使用不当而造成系统的崩溃。b 条件转移指令C/C+语言中用 goto 语句实现无条件跳转,而 Java 语言没有 goto 语言,通过例外处理语句 try、catch、finally 来取代之,提高了程序的可读性,也增强了程序的鲁棒性。c 指针指针是 C/C+语言中最灵活,但也是最容易出错的数据类型。用指针进行内存操作往往造成不可预知的错误,而且,通过指针对内存地址进行显示类型转换后,可以类的私有成员,破坏了安全性。在 java中,程序员不能进行任何指针操作,同时 Java 中

17、的数组是通过类来实现的,很好的解决了数组越界这一C/C+语言中不做检查的缺点。d 内存管理在 C 语言中,程序员使用库函数 malloc()和 free()来分配和释放内存,C+语言中则是运算符 new 和 delete。再次释放已经释放的内存块或者释放未被分配的内存块,会造成系统的崩溃,而忘记释放不再使用的内存块也会逐渐耗尽系统资源。在 Java 中,所有的数据结构都是对象,通过运算符 new 分配内存并得到对象的使用权。无用内存回收机制保证了系统资源的完整,避免了内存管理不周而引起的系统崩溃。e 数据类型的一致性在 C/C+语言中,不同的平台上,编译器对简单的数据类型如 int、float

18、 等分别分配不同的字节数。例如:int 在 IBM PC 上为 16 位,在 VAX-11 上就为 32 位,导致了代码数据的不可移植。在 java 中,对数据类型的位数分配总是固定的,而不管是在任何的计算机平台上。因此就保证了 Java 数据的平台无关性和可移植性。f 类型转换在 C/C+语言中,可以通过指针进行任意的类型转换,不安全因素大大增加。而在 Java 语言中系统要对对象的处理进行严格的相容性检查,防止不安全的转换。g 头文件在 C/C+语言中使用头文件声明类的原型和全局变量及库函数等,在大的系统中,维护这些头文件是非常困难的。java 不支持头文件,类成员的类型和访问权限都封装在

19、一个类中,运行时系统对访问进行控制,防止非法的访问。同时,Java 中用 import 语句与其它类进行通信,以便访问其它类的对象。h 结构和联合C/C+语言中用结构和联合来表示一定的数据结构,但是由于其成员均为公有的,安全性上存在问题。Java 不支持结构和联合,通过类把数据结构及对该数据的操作都封装在类里面。 i 预处理C/C+语言中有宏定义,而用宏定义实现的代码往往影响程序的可读性,而 Java 不支持宏定义为易于实现跨平台性,java 设计成为解释执行,字节码本身包含了许多编译时生成的信息,使连接过程更加简单。而多线程使应用程序可以同时进行不同的操作,处理不同的事件。在多线程机制中,不

20、同的线程处理不同的任务,互不干涉,不会由于某一任务处于等待状态而影响了其它任务的执行,这样就可以容易的实现网络上的实时交互操作。Java 在执行过程中,可以动态的加载各种类库,这一特点使之非常适合于网络运行,同时也非常有利于软件的开发,即使是更新类库也不必重新编译使用这一类库的应用程序。1.2.5 Java 平台不断扩展的计算平台java 不仅是编程语言,还是一个开发平台,java 技术给程序员提供了许多工具:编译器、解释器、文档生成器和文件打包工具等等。同时 java 还是一个程序发布平台,有两种主要的“发布环境“,首先 java 运行时环境(java runtime environment

21、,简称 JRE)包含了完整的类文件包,其次许多主要的浏览器都提供了 java 解释器和运行时环境。目前 Sun 公司把 java 平台划分成 J2EE、J2SE、J2ME 三个平台,针对不同的市场目标和设备进行定位。J2EE 是 Java2 Enterprise Edition,主要目的是为企业计算提供一个应用服务器的运行和开发平台。 J2EE 本身是一个开放的标准,任何软件厂商都可以推出自己的符合 J2EE 标准的产品,使用户可以有多种选择。IBM、Oracle、BEA、HP 等 29 家已经推出了自己的产品,其中尤以 BEA 公司的 weglogic 产品和 IBM 公司的 webspha

22、re 最为著名。J2EE 将逐步发展成为可以与微软的.NET 战略相对抗的网络计算平台。J2SE 是 Java2 Standard Edition,主要目的是为台式机和工作站提供一个开发和运行的平台。我们在学习 java 的过程中,主要是采用 J2SE 来进行开发。J2ME 是 Java2 Micro Edition,主要是面向消费电子产品,为消费电子产品提供一个 java 的运行平台,使得 java 程序能够在手机、机顶盒、 PDA 等产品上运行。上述三个 Java 平台的关系 如图所示 1.3 一切都是对象1.3.1 面向过程面向对象的第一个原则是把数据和对该数据的操作都封装在一个类中,在

23、程序设计时要考虑多个对象及其相互间的关系。有些功能并不一定由一个程序段完全实现,可以让其它对象来实现,在本例中就由类Max 完成求最大值的功能。而面向对象的另外一个好处是实现代码的重复使用,例如其它的程序中如果需要求最大值的功能,只需要通过类 Max 的对象就可以达到目的。但是如果象面向过程的代码段那样把求最大值的算法都实现在该代码段中,则无法复用早期的编程语言如 FORTRAN、C 基本上都是面向过程的语言,其编程的主要思路专注于算法的实现。例如下面是一个面向过程的求正整数最大值的程序:int maxSoFar=0,price=1; /最大值 maxSoFar 的初始值为 0,price 是

24、输入的值while(price0) /循环输入 price 的值if (pricemaxSoFar) /输入的值 price 大于最大值 maxSoFarmaxSoFar=price; / 则 maxSoFar 的值为 price 的值String input=JoptionPane.showInputDialog(“Enter the next price“); /继续输入 priceprice=Double.parseDouble(input); /把字符串 input 转换成整数 priceSystem.out.println(“The maximum is “+maxSoFar); /

25、打印最大值 maxSoFar该程序段主要实现了求最大值的算法,但是,如果考虑用面向对象的编程,可以是另外一种方式: Max max=new Max( ); /max 是类 Max 的一个对象while(price0) max.updateMax(price); /对象 max 调用 updateMax 方法,更新最大值price=max.getPrice( ); /对象 max 调用 getPrice 获得下一个 price 的值System.out.println(“The maximum is “+max.getMax( );/对象 max 调用 getMax方法获得最大值,并打印出来1.

26、3.2 面向对象纯粹的面向对象程序设计方法是这样的:1 所有的东西都是对象。可以将对象想象成为一种新型变量,它保存着数据,而且还可以对自身数据进行操作。例如类 Max 中保留着数据的最大值,同时还有方法 updateMax 根据新加入的 price 值产生最新的最大值,还有 getMax 方法返回数据的最大值。2 程序是一大堆对象的组合。通过消息传递,各对象知道自己应该做些什么。如果需要让对象做些事情,则须向该对象“发送一条消息 “。具体来说,可以将消息想象成为一个调用请求,它调用的是从属于目标对象的一个方法。例如上面面向对象的程序段应该是属于某个类的,比如说是属于类 Shopping,则 S

27、hopping 中就包含了类 Max 的对象 max,调用方法 updateMax 就相当于 Shopping 对象对 max 对象发出一条指令“updateMax“,要求对象 max 重新计算最大值。3 每个对象都有自己的存储空间。可容纳其它对象,或者说通过封装现有的对象,可以产生新型对象。因此,尽管对象的概念非常简单,但是经过封装以后却可以在程序中达到任意高的复杂程度。4 每个对象都属于某个类。根据语法,每个对象都是某个“类“ 的一个“实例“。一个类的最重要的的特征就是“能将什么消息发给它?“ ,也就是类本身有哪些操作。例如 max 是类 Max 的实例。1.4 构建 Java 程序1.4

28、.1 第一个 Java applicationjava 程序分为 java application(java 应用程序)和 java applet(java 小应用程序)两种。下面让我们编写一个 java 应用程序,它能够利用来自 java 标准库的 System 对象的多种方法,打印出与当前运行的系统有关的资料。其中“/“代表一种注释方式,表示从这个符号开始到这行结束的所有内容都是注释。在每个程序文件的开头,如果这个文件的代码中用到了系统所提供的额外的类,就必须放置一个 import 语句。说它是额外的是指一个特殊的类库“java.lang“ 会自动导入到每个 Java 文件/这是我们的第一

29、个 java application,该程序保存在文件 Property.Java 中import Java.util.*; /*下面我们用到了 Date 和 Properties 这两个类,是属于 Java.util 这个包的;*/*而 System 和 Runtime 这两个类,是属于Java.lang 这个包的。*/public class Property /程序员给这个类取名为 Propertypublic static void main(String args) /main 是类的主方法System.out.println(new Date( ); /在命令行下面打印出日期Pro

30、perties p=System.getProperties( ); /获得系统的 Properties 对象 pp.list(System.out); /在命令行下打印出 p 中的各个系统变量的值System.out.println(“- Memory Usage:“); /*打印一行字符串-Memory Usage*/Runtime rt=Runtime.getRuntime( ); /获得系统的 Runtime 对象 rtSystem.out.println(“Total Memory= “ + rt.totalMemory( ) /打印总内存大小+“ Free Memory = “+r

31、t.freeMemory( ); /打印空闲内存大小 在 java 中,程序都是以类的方式组织的,java 源文件都保存在以 java 为后缀的.java 文件当中。每个可运行的程序都是一个类文件,或者称之为字节码文件,保存在.class 文件中。而作为一个 Java application,类中必须包含主方法,程序的执行是从 main 方法开始的,方法头的格式是确定不变的:public static void main(String args) 其中关键字 public 意味着方法可以由外部世界调用。main 方法的参数是一个字符串数组 args,虽然在本程序中没有用到,但是必须列出来。程序

32、的第一行非常有意思:System.out.println(new Date();打印语句的参数是一个日期对象 Date,而创建 Date 对象的目的就是把它的值发给 println()语句。一旦这个语句执行完毕,Date 对象就没用了,而后“无用内存回收器“ 会将其收回。第二行中调用了 System.getProperties( )。从帮助文档中可知,getProperties( )是 System 类的一个静态方法(static 方法),由于它是“静态 “的,所以不必创建任何对象就可以调用该方法。在第三行,Properties 对象有一个名为 list( )的方法,它将自己的全部内容都发给一

33、个 PrintStream 对象,该对象就是 list()方法的参数。第四行和第六行是典型的打印语句,其中第六行通过运算符“ 的重载来连接多个字符串对象,在 Java 中只有当“运算符作用于字符串时在能够进行重载。但是让我们仔细观察下述语句:System.out.println(“Total Memory= “ + rt.totalMemory( ) /打印总内存大小+“ Free Memory = “+rt.freeMemory( ); /打印空闲内存大小其中,totalMemory( )和 freeMemory( )返回的是数值,并非 String 对象。如果将一个字符串与一个数值相加,结

34、果会如何?在这种情况下,编译器会自动调用一个 toString()方法,将该数值(int 型或者 float型)转换成字符串。经过这样处理以后,就可以用“ 进行字符串连接了。main() 的第五行通过调用 Runtime 的 getRuntime()方法创建了一个 Runtime 对象,该对象中包含了内存等信息。1.4.2 Java 程序的编辑java 程序的编辑可以使用任何一种文本编辑器,例如 UltraEdit、Notepad、Wordpad 甚至 word,然后只要把编辑好的文件存成.java 文件。当然也可以用一些集成开发环境,例如 Borland 公司的 JBuilder,IBM 公

35、司的 Visualage for Java,此外还有 cafe、kawa 等其它集成开发环境。下面两幅图分别是用 UltraEdit和 JBuilder 编辑 Property.Java 文件的情况Sun 公司为全世界的 java 程序员提供了一个免费的 java 程序开发包(Java Develop Kit,简称 JDK),其中包括了 java 编译器命令“javac“ ,以及 java 执行命令“java“,还有帮助文档生成器命令“javadoc“等等。所有这些命令都可以在命令行下运行,例如我们要编译上述 java 文件 Property.java,如果是在 windows中进行开发,就可

36、以在“命令提示符 “下进行编译,在命令行中敲入 “javac Property.Java“,1.4.4 Java application 的执行当编译结束以后,在 java 源文件中的每一个类都会生成相应的 .class 文件,例如上图中就会生成一个 Property.class 文件,而 java 程序在执行时调用的是.class 文件。Java application 的执行是在命令行下进行的,如果是在 windows 系统中,就可以“命令提示符“ 下敲入“java Propery“进行执行,该“java“命令会启动 Java 虚拟机,并读入 Property.class 文件进行执行。如

37、右图 1_4_2 所示:由于该程序的运行结果直接在命令行下进行输出,其结果如右图 1_4_3 所示1.4.5 第一个 Java appletjava 程序的另一种形式是 Java applet,applet 没有 main()方法,它必须嵌在超文本文件中,在浏览器中进行运行。右面这个程序将在浏览器中显示一行字符串./ 这是我们的第一个 java applet,该程序保存在文件 HelloEducation.Java 中import Java.awt.Graphics; /在进行显示输出时,需要用到类 Graphics 的对象;import Java.applet.Applet; /Applet

38、 类是所有的 Java applet 的父类;public class HelloEducation extends Applet /程序员给这个类取名为 HelloEducation/所有的 applet 程序都是 Applet 类的子类public String s;public void init() /s=new String(“Welcome to Tongfang Education“); /生成一个字符串对象public void paint(Graphics g)g.drawString(s,25,25); /在浏览器中坐标为(25,25)的位置显示字符串 s applet 程

39、序是从方法 init( )开始执行的,在该方法中完成了对字符串 s 的初始化工作,而显示功能是在方法 paint( )中执行的。 paint( )方法是类 Applet 的一个成员方法,其参数是图形对象 Graphics g,通过调用对象 g 的 drawString( )方法就可以显示输出。1.4.6 Java applet 的执行java applet 程序也是一个类,其编译方式与 java application 完全一样,HelloEducation.java 程序经过编译以后就生成了 HelloEducation.class 文件。java applet 的执行方式与 java ap

40、plication 完全不同,Java applet 程序必须嵌入到 html 文件中才能够执行,因此必须编写相应的 html 文件。下面为 HelloEducaiton.html 文件的内容:然后可以通过 JDK 所提供的命令“appletviewer“ ,在命令行下面执行 Java applet 程序。如果是在 windows 操作系统中,就可以在“命令提示符“ 下敲入“appletviewer HelloEducation.html“,如图 1_4_4 所示。此时系统会弹出另外一个窗口运行该 applet 程序,结果如图 1_4_5 所示。applet 还可以采用另外一种方式运行,那就是

41、直接在浏览器中打开 HelloEducation.html 程序,结果如图 1_4_6 所示。在主流的浏览器如 IE、Netscape 中都包含有 java 虚拟机,负责解释执行 Java applet 程序。1.5 Java 程序规范 1.5.1 Java 源程序结构一个完整的 Java 源程序应该包括下列部分:package 语句; /该部分至多只有一句,必须放在源程序的第一句import 语句; /*该部分可以有若干 import 语句或者没有,必须放在所有的类定义之前*/public classDefinition; /公共类定义部分,至多只有一个公共类的定义/java 语言规定该 J

42、ava 源程序的文件名必须与该公共类名完全一致classDefinition; /类定义部分,可以有 0 个或者多个类定义interfaceDefinition; /接口定义部分,可以有 0 个或者多个接口定义例如一个 java 源程序可以是如下结构,该源程序命名为 HelloWorldApp.Java:package Javawork.helloworld; /*把编译生成的所有.class 文件放到包Javawork.helloworld 中*/import Java.awt.*; /告诉编译器本程序中用到系统的 AWT 包import Javawork.newcentury; /*告诉编

43、译器本程序中用到用户自定义的包 Javawork.newcentury*/public class HelloWorldApp /*公共类 HelloWorldApp 的定义,名字与文件名相同*/class TheFirstClass /第一个普通类 TheFirstClass 的定义class TheSecondClass /第二个普通类 TheSecondClass 的定义/其它普通类的定义interface TheFirstInterface /*第一个接口TheFirstInterface 的定义*/其它接口定义package 语句:由于 java 编译器为每个类生成一个字节码文件,且

44、文件名与类名相同,因此同名的类有可能发生冲突。为了解决这一问题,java 提供包来管理类名空间,包实际提供了一种命名机制和可见性限制机制。而在 java 的系统类库中,把功能相似的类放到一个包(package)中,例如所有的图形界面的类都放在 java.awt 这个包中,与网络功能有关的类都放到 这个包中。用户自己编写的类(指.class文件)也应该按照功能放在由程序员自己命名的相应的包中,例如上例中的 javawork.helloworld 就是一个包。包在实际的实现过程中是与文件系统相对应的,例如 javawork.helloworld 所对应的目录是 pathjavaworkhello

45、world,而 path 是在编译该源程序时指定的。比如在命令行中编译上述 HelloWorldApp.java 文件时,可以在命令行中敲入“javac -d f:javaproject HelloWorldApp.java“,则编译生成的 HelloWorldApp.class文件将放在目录 f:javaprojectjavaworkhelloworld目录下面,此时 f:javaprojcet 相当于 path。但是如果在编译时不指定 path,则生成的.class 文件将放在编译时命令行所在的当前目录下面。比如在命令行目录 f:javaproject 下敲入编译命令 “javac Hel

46、loWorldApp.java“,则生成的 HelloWorldApp.class 文件将放在目录 f:Javaproject 下面,此时的 package 语句相当于没起作用。但是,如果程序中包含了 package 语句,则在运行时就必须包含包名。例如,HelloWorldApp.java 程序的第一行语句是:package p1.p2;编译的时候在命令行下输入“javac -d path HelloWorldApp.Java“,则HelloWorldApp.class 将放在目录 pathp1p2 的下面,这时候运行该程序时有两种方式:第一种:在命令行下的 path 目录下输入字符“Jav

47、a p1.p2.HelloWorldApp“。第二种:在环境变量 classpath 中加入目录 path,则运行时在任何目录下输入“Java p1.p2.HelloWorldApp“即可。import 语句 :如果在源程序中用到了除 java.lang 这个包以外的类,无论是系统的类还是自己定义的包中的类,都必须用 import 语句标识,以通知编译器在编译时找到相应的类文件。例如上例中的 java.awt是系统的包,而 javawork.newcentury 是用户自定义的包。比如程序中用到了类 Button,而 Button 是属于包 java.awt 的,在编译时编译器将从目录 cla

48、sspathjavaawt 中去寻找类 Button,classpath 是事先设定的环境变量,比如可以设为:classpath=.;d:jdk1.3lib。 classpath 也可以称为类路径,需要提醒大家注意的是,在 classpath 中往往包含多个路径,用分号隔开。例如 classpath=.;d:jdk1.3lib 中的第一个分号之前的路径是一个点,表示当前目录,分号后面的路径是 d:jdk1.3lib,表示系统的标准类库目录。在编译过程中寻找类时,先从环境变量 classpath 的第一个目录开始往下找,比如先从当前目录往下找 java.awt 中的类 Button 时,编译器找

49、不着,然后从环境变量 classpath 的第二个目录开始往下找,就是从系统的标准类库目录d:jdk1.3lib 开始往下找 Java.awt 的 Button 这个类,最后就找到了。如果要从一个包中引入多个类则在包名后加上“.*“表示。如果程序中用到了用户自己定义的包中的类,假如在上面程序中要用到 javawork.newcentury 包中的类HelloWorldApp,而包 javawork.newcentury 所对应的目录是 f:javaprojectjavaworknewcentury,classpath 仍旧是 classpath=.;d:jdk1.3lib,则编译器在编译时将首先从当前目录寻找包 javawork.newcentury,结果是没有找到;然后又从环境变量 classpath 的第二个目录 d:jdk1.3lib开始往下找,但是仍然没有找

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 大学课件

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报