版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第一章导论第1页,共179页。现代逻辑创始于19世纪末叶和20世纪早期,其发展动力主要来自于数学中的公理化运动数理逻辑的发展和计算机的产生密切有关数理逻辑是计算理论的基础,而计算理论又是计算机科学的核心基础数理逻辑学家的工作对于通用计算机的产生是决定性的,许多计算机科学家都是逻辑学家现代计算机的产生和现代逻辑的发展第2页,共179页。阿兰·麦席森·图灵AlanMathisonTuring,6月23日生于英国伦敦。是英国著名的数学家和逻辑学家,被称为计算机科学之父、人工智能之父,是计算机逻辑的奠基者,提出了“图灵机”和“图灵测试”等重要概念。人们为纪念其在计算机领域的卓越贡献而设立“图灵奖”。在图灵的设计思想指导下,1950年制出了ACE样机,1958年制成大型ACE机。1948年,图灵接受了曼彻斯特大学的高级讲师职务,并被指定为曼彻斯特自动数字计算机(Madam)项目的负责人助理,具体领导该项目数学方面的工作.作为这一工作的总结,1950年图灵编写并出版了《曼彻斯特电子计算机程序员手册》(Theprogrammers’handbookfortheManchesterelectroniccomputer)。现代计算机的产生和现代逻辑的发展第3页,共179页。约翰·冯·诺依曼(JohnVonNeumann,1903-1957),美藉匈牙利人在第二次世界大战前,他主要从事算子理论、集合论等方面的研究冯·诺依曼对人类的最大贡献是对计算机科学、计算机技术和数值分析的开拓性工作.EDVAC方案明确奠定了新机器由五个部分组成,包括:运算器、逻辑控制装置、存储器、输入和输出设备,并描述了这五部分的职能和相互关系.报告中,诺伊曼对EDVAC中的两大设计思想作了进一步的论证,为计算机的设计树立了一座里程碑。设计思想之一是二进制:逻辑代数的应用已成为设计电子计算机的重要手段现代计算机的产生和数理逻辑的发展第4页,共179页。逻辑学专业有必要学习程序设计的有关知识目的意义?逻辑学与程序设计第5页,共179页。考试考试成绩=期末考试成绩×70%+平时成绩×30第6页,共179页。教材参考资料教材:叶核亚等,Java2程序设计实用教程(第3版),电子工业出版社,2010年2月Java编程思想:BruceEckel(著)JAVA2核心技术卷I:基础知识,(著)JavaTutorial:第7页,共179页。
软件的基本组成部分是完成其功能的程序。程序设计语言(也被称为“编程语言”,ProgrammingLanguage)是人们编制程序所使用的语言。程序描述了计算机处理数据、解决问题的过程,这是程序的实质。但程序的描述形式却可以是多种多样的,可以用不同的方式表述——不同的程序设计语言。程序设计语言第8页,共179页。程序设计语言程序设计语言的种类:机器语言:机器指令,直接执行汇编语言:符号化,汇编器(Assembler)高级程序设计语言(编译型)高级程序设计语言(解释型)第9页,共179页。
高级语言中用于描述计算的结构采用类似于数学中代数运算公式的形式,这种结构被称为“表达式”。程序中基本的动作单位被称为“语句”,不同的语句实现不同的功能。用高级语言书写的程序不可能直接地在计算机上执行,要在计算机上执行高级语言书写的程序,有两种基本方法:
编译(Compilation)执行:这种方法是设法把高级语言程序(也称为“源程序”)转换成为机器语言的可以由计算机直接执行的程序,即转变为“可执行(Executable)程序”。“解释”(Interpretation)执行:这种方法是即时把源程序转换为机器可执行的指令。有时为了提高效率,也可以先编译成一种中间代码。程序设计语言
——高级程序设计语言第10页,共179页。
对于“编译执行”方式,人们实现了高级语言“编译器”(Compiler)完成这种转换工作。编译器把高级语言程序看成是符合一定语法结构的符号串,对它进行加工变换。编译器对源程序的加工一般分为两个阶段:源程序首先被翻译成机器语言,这种翻译结果称为“目标码”(objectcode),目标码构成的程序片段称为目标模块。第二步,这些目标模块被与其他一些基本模块(由编译软件提供)连接在一起,最终形成“可执行程序”(executableprogram),这样的程序就可以在计算机上实际运行了。第一个加工步骤称为“编译”(compiling),第二个步骤称为“连接”(linking)。
程序设计语言
——高级程序设计语言第11页,共179页。程序设计语言
——高级程序设计语言编译过程第12页,共179页。
对于“解释执行”方式,人们实现了一种称为“解释器”(Interpreter)的软件来完成转换工作。解释器在工作方式上与编译器不同,它不对源程序进行翻译,而是直接对源程序的语句进行分析和解释,实现源程序所描述的功能。程序设计语言
——高级程序设计语言解释过程第13页,共179页。程序设计语言
——高级程序设计语言
高级语言写出的程序是独立于任何具体的计算机的。但是“编译器”和“解释器”则是与机器相关的。同一种语言,对于不同的机器,需要不同的“编译器”和“解释器”。人们已经开发出了许多不同的高级程序设计语言,不同的语言有各自不同的规范,因此需要专门的“编译器”和“解释器”。第14页,共179页。FORTRAN(FORmularTRANslation)语言,HPF:IBM,1950Pascal语言:,1968,(Delphi,Borland)COBOL(COmmonBusinessOrientedLanguage)语言:美国国防部,1960C和C++语言:DennisRetchie,1972;BjarneStroustrup,1983,BellBasic(Beginner'sAll-purposeSymbolicInstructionCode)语言:美国国防部,1964Ada语言:军用程序设计语言,美国国防部,1983Java语言:1991年,SUNMicroSystem公司程序设计语言
——高级程序设计语言第15页,共179页。计算机语言发展史适应软件需求量增加的发展20世纪70年代MartinRichards设计的BCPL语言发展的结果导致了结构化程序设计语言——C语言的产生C++:程序的复杂性导致了C++的产生1979年,BjarneStroustrup发明了“带类的C”——C++,它是对一个已经高度成功的语言的改进C#:对抗JavaMS为了对抗Java,全力推出了C#和.net平台,两虎相争,孰能取胜?且让我们拭目以待。第16页,共179页。Java的发展历史1991:OakJameGosling(SUN)为开发家电产品而设计Oak→Java(爪哇,太平洋上一个盛产咖啡的岛屿的名字)1992~1993:一个客户也没找到1994:Internet的迅猛发展。需要一个中性的浏览器:它不依赖于任何硬件平台和软件平台,并且实时性较高,可靠安全,有交互功能的。Gosling决定用Java开发Web浏览器(HotJava)。
1996:版发布,可以创建动态网页1998:JavaOne会议的最大新闻是版现在:版
第17页,共179页。Java的起源
Java来自于Sun公司的一个叫Green的项目,其原先的目的是为家用消费电子产品开发一个分布式代码系统,这样我们可以把E-mail发给电冰箱、电视机等家用电器,对它们进行控制,和它们进行信息交流。开始,准备采用C++,但C++太复杂,安全性差,最后基于C++开发了一种新的语言Oak(Java的前身),Oak是一种用于网络的精巧而安全的语言,Sun公司曾以此投标一个交互式电视项目,但结果被SGI打败。可怜的Oak几乎无家可归,恰巧这时MarkArdreesen开发的Mosaic和Netscape启发了Oak项目组成员,他们用Java编制了HotJava浏览器,得到了Sun公司首席执行官ScottMcNealy的支持,触发了Java进军Internet。Java的取名也有一则趣闻,有一天,几位Java成员组的会员正在讨论给这个新的语言取什么名字,当时他们正在咖啡馆喝着Java(爪哇)咖啡,有一个人灵机一动说就叫Java怎样,得到了其他人的赞赏,于是,Java这个名字就这样传开了。Java的起源
Download:第18页,共179页。Java的现状开发桌面应用程序开发大规模的企业应用开发移动通信设备第19页,共179页。20Java与InternetInternet使Java成为网上最流行的编程语言Java对Internet的影响也意义深远在Java出现以前,几乎没有什么工具可以在Internet上执行动态交互程序Applet程序可以对用户的输入和操作做出响应
第20页,共179页。对Java学习者你们在学习一门体现了最新的软件开发技术的语言,就业前景广阔。学Java面向对象的理论基础最重要。学好Java需要掌握设计模式理论。如何学好Java语言多上机编程实践多看书和资料,每次上完课后要复习有机会多参加实际项目和参加各种培训第21页,共179页。我们为什么要用Java因为Java是简单的面向对象的健壮的安全的解释的与平台无关的多线程的动态的语言
Download:第22页,共179页。我们为什么要用Java简单的
Java最初是为对家用电器进行集成控制而设计的一种语言,因此它必须简单明了。Java语言的简单性主要体现在三个方面:
1、Java的风格类似于C++,因而C++程序员初次接触Java语言,就会感到很熟悉。从某种意义上讲,Java语言是C及C++语言的一个变种,因此,C++程序员可以很快地掌握Java编程技术。
2、Java摒弃了C++中容易引发程序错误的一些特性,如指针、结构、枚举以及内存管理等。
3、Java提供了丰富的类库,可以帮助我们很方便的开发Java程序。
Download:第23页,共179页。我们为什么要用Java面向对象的
面向对象可以说是Java最重要的特性,所以它支持继承、重载、多态等面向对象的特性。Java语言的设计是完全面向对象的,它不支持类似C语言那样的面向过程的程序设计技术。
Download:第24页,共179页。我们为什么要用Java健壮的
Java致力于检查程序在编译和运行时的错误。Java也是一种强类型的语言,其类型检查比C++还要严格。类型检查帮助我们检查出许多开发早期出现的错误。Java自己负责内存管理,提供了垃圾内存回收机制,有效的避免了C++中最头疼的内存泄漏问题。
Download:第25页,共179页。我们为什么要用Java安全的
Java的安全性可从两个方面得到保证。一方
面,在Java语言里,删除了指针和释放内存等C++功能,避免了非法内存操作。另一方面,通过Java的安全体系架构来确保Java代码的安全性。当我们从网上下载Java代码在本地执行时,Java的安全架构能确保恶意的代码不能随意访问我们本地计算机的资源,例如:删除文件,访问本地网络资源等操作都是被禁止的。
Download:第26页,共179页。Java语言的特点(安全性)Java源程序(.java文件)Java编译器JavaBytecode(.class文件)Bytecode载入器Bytecode解释器系统执行平台语言定义publicprotectedprivatefinal取消指针自动回收垃圾Bytecode检查程序执行系统WWW浏览器限制Java小应用程序的不正当使用限定对象的存取权限系统堆栈溢出参数类型一致第27页,共179页。我们为什么要用Java解释的
Java代码是解释执行的,我们使用Java编译器将Java代码编译成字节码,这是一种中间代码,然后由Java解释器解释执行。而C++程序是编译执行的,C++程序代码被编译为本地机器指令,然后执行。
Download:第28页,共179页。我们为什么要用Java与平台无关的
Java作为一种网络语言,其源代码被编译成一种结构中立的中间文件格式。只要有Java运行系统的机器都能执行这种中间代码。Java源程序被编译成一种与机器无关的字节码格式,在Java虚拟机上运行。
Download:第29页,共179页。Java语言的特点平台无关性源程序Java编译器SPARCpentiumPowerpc中间码MacPCUNIX二进制Java解释器第30页,共179页。我们为什么要用Java多线程的
Java语言的一个重要特性就是在语言级支持多线程的程序设计。多线程就好像我们做一张桌子,如果你一个人完成这张桌子—就好像单线程,那么你需要先做桌面,做完桌面后,再做4个桌子腿,如果现在有5个人来做桌子—在程序中开辟5个线程,其中1个人做桌面,另外4个人分别做4个桌子腿,那么这两种方式效率的高低,相信大家都能区分出来。
Download:第31页,共179页。我们为什么要用Java动态的
Java的动态特性是其面向对象设计方法的扩展。它允许程序动态地装入运行过程中所需要的类,这是我们采用C++语言进行面向对象程序设计所无法实现的。在C++程序设计过程中,每当在类中增加一个实例变量或一个成员函数后,
引用该类的所有子类都必须重新编译,否则将导致程序崩溃。Java从以下几个方面采取措施来解决这个问题。Java编译器不是将对实例变量和成员函数的引用编译为数值引用,而是将符号引用信息在字节码中保存下来,传递给解释器,再由解释器在完成动态连接类后,将符号引用信息转换为数值偏移量。一个在存储器中生成的对象不在编译过程中决定,而是延迟到运行时由解释器确定。这样,对类中的变量和方法进行更新时就不至于影响现存的代码。
解释执行字节码时,这种符号信息的查找和转换过程仅在一个新的名字出现时才进行一次,随后代码便可以全速执行。在运行时确定引用的好处是可以使用已被更新的类,而不必担心会影响原有的代码。如果程序连接了网络中另一系统中的某一类,该类的所有者也可以自由地对该类进行更新,而不会使任何引用该类的程序崩溃。Java还简化了使用一个升级的或全新协议的方法。如果你的系统运行Java程序时遇到了不知怎样处理的程序,Java能自动下载你所需要的功能程序。
Download:第32页,共179页。Java跨平台的原理
Java的跨平台是通过Java虚拟机(JVM)来实现的。
Download:第33页,共179页。Java跨平台的原理Java源文件的编译过程Java应用程序的开发周期包括编译、下载、解释和执行几个部分。Java编译程序将Java源程序翻译为JVM可执行代码—字节码。这一编译过程同C/C++的编译有些不同。当C编译器编译生成一个对象的代码时,该代码是为在某一特定硬件平台运行而产生的。因此,在编译过程中,编译程序通过查表将所有对符号的引用转换为特定的内存偏移量,以保证程序运行。Java编译器却不将对变量和方法的引用编译为数值引用,也不确定程序执行过程中的内存布局,而是将这些符号引用信息保留在字节码中,由解释器在运行过程中创建内存布局,然后再通过查表来确定一个方法所在的地址。这样就有效的保证了Java的可移植性和安全性。
Download:第34页,共179页。Java跨平台的原理Java解释器的执行过程
运行JVM字节码的工作是由解释器来完成的。解释执行过程分三步进行:代码的装入、代码的校验和代码的执行。装入代码的工作由“类装载器”(classloader)完成。类装载器负责装入运行一个程序需要的所有代码,这也包括程序代码中的类所继承的类和被其调用的类。当类装载器装入一个类时,该类被放在自己的名字空间中。除了通过符号引用自己名字空间以外的类,类之间没有其他办法可以影响其它类。在本台计算机上的所有类都在同一地址空间内,而所有从外部引进的类,都有一个自己独立的名字空间。这使得本地类通过共享相同的名字空间获得较高的运行效率,同时又保证它们与从外部引进的类不会相互影响。当装入了运行程序需要的所有类后,解释器便可确定整个可执行程序的内存布局。解释器为符号引用同特定的地址空间建立对应关系及查询表。通过在这一阶段确定代码的内存布局,Java很好地解决了由超类改变而使子类崩溃的问题,同时也防止了代码对地址的非法访问。随后,被装入的代码由字节码校验器进行检查。校验器可发现操作数栈溢出,非法数据类型转换等多种错误。通过校验后,代码便开始执行了。
Download:第35页,共179页。Java跨平台的原理Java字节码的两种执行方式1、即时编译方式:解释器先将字节码编译成机器码,然后再执行该机器码。
2、解释执行方式:解释器通过每次解释并执行一小段代码来完成Java字节码程序的所有操作。
通常采用的是第二种方法。由于JVM规格描述具有足够的灵活性,这使得将字节码翻译为机器代码的工作具有较高的效率。对于那些对运行速度要求较高的应用程序,解释器可将Java字节码即时编译为机器码,从而很好地保证了Java代码的可移植性和高性能。
Download:第36页,共179页。Java跨平台的原理JVM规格描述JVM的设计目标是提供一个基于抽象规格描述的计算机模型,为解释程序开发人员提供很好的灵活性,同时也确保Java代码可在符合该规范的任何系统上运行。JVM对其实现的某些方面给出了具体的定义,特别是对Java可执行代码,即字节码(Bytecode)的格式给出了明确的规格。这一规格包括操作码和操作数的语法和数值、标识符的数值表示方式、以及Java类文件中的Java对象、常量缓冲池在JVM的存储映象。这些定义为JVM解释器开发人员提供了所需的信息和开发环境。Java的设计者希望给开发人员以随心所欲使用Java的自由。
JVM是为Java字节码定义的一种独立于具体平台的规格描述,是Java平台独立性的基础。
Download:第37页,共179页。Java跨平台的原理Java程序执行与C/C++程序执行的对比分析如果把Java源程序想象成我们的C++源程序,Java源程序编译后生成的字节码就相当于C++源程序编译后的80x86的机器码(二进制程序文件),JVM虚拟机相当于80x86计算机系统,Java解释器相当于80x86CPU。在80x86CPU上运行的是机器码,在Java解释器上运行的是Java字节码。Java解释器相当于运行Java字节码的“CPU”,但该“CPU”不是通过硬件实现的,而是用软件实现的。Java解释器实际上就是特定的平台下的一个应用程序。只要实现了特定平台下的解释器程序,Java字节码就能通过解释器程序在该平台下运行,这是Java跨平台的根本。当前,并不是在所有的平台下都有相应Java解释器程序,这也是Java并不能在所有的平台下都能运行的原因,它只能在已实现了Java解释器程序的平台下运行。
Download:第38页,共179页。Java应用分类
1.应用程序典型的通用程序可以在具备Java运行环境的设备中独立运行,它又分为:
GUI应用程序:即图形用户界面程序,可实现丰富的输入界面和输出显示。命令行程序:无需界面,只需在命令行下运行,运行结果只在后台发生变化,可以将输出存放到文件中。嵌入式应用程序:Java语言的平台独立性决定了它可以嵌入到不同的设备中,且只需具备必要的运行环境即可。第39页,共179页。1.4JDK包的下载与安装JavaDevelopKit简称为JDK,是Sun公司免费发行的软件包,可以从Sun网站免费下载,也可以从其它国内地址下载。JDK版本从开始,目前版本发展到,其中高级版本对低级版本实现向下兼容。运用这个软件包,就可以对Java源程序进行编译和运行。本书中下载使用的JDK包为。下载后双击图标,即可进行安装,默认的安装目录为。本书作者将安装目录改为。第40页,共179页。1.5Java环境配置JDK包安装完成后,需要设置环境变量。用鼠标右键单击桌面上的图标“我的电脑”,选择“属性”项,出现标题为“系统特性”的对话框,点击“高级”标签,可以看见有一个“环境变量”按钮,如图所示。第41页,共179页。图1.1“系统特性”对话框第42页,共179页。
单击“环境变量”按钮,可以看见本机环境变量,如图所示。上面为用户变量,下面为系统变量,随着操作系统或用户环境的不同,变量名、值有所不同。这里需要修改三个用户变量:include、lib和path,分别将JDK包安装之后的相应路径包含到这三个用户变量中。第43页,共179页。图1.2“环境变量”对话框第44页,共179页。
选中include变量,单击“编辑”按钮,弹出标题为“编辑用户变量”的对话框,如图所示。在变量值一栏的最后添加“;D:\j2sdk1.4.0_01\include”,“;”表示与前面的各项隔开,后面的路径是JDK包的安装路径下的include目录。图为作者修改include变量的情况,注意你的安装路径可能与作者的有所不同,要以你的安装路径为基准进行修改。第45页,共179页。图1.3编辑include变量第46页,共179页。
选中lib变量,单击“编辑”按钮,弹出标题为“编辑用户变量”的对话框,如图所示。在变量值一栏的最后添加“;D:\j2sdk1.4.0_01\lib”,“;”表示与前面的各项隔开,后面的路径是JDK包的安装路径下的lib目录。图为作者修改lib变量的情况,注意你的安装路径可能与作者的有所不同,要以你的安装路径为基准进行修改。第47页,共179页。图1.4编辑lib变量第48页,共179页。
选中path变量,单击“编辑”按钮,弹出标题为“编辑用户变量”的对话框,如图所示。在变量值一栏的最后添加“;D:\j2sdk1.4.0_01\bin”,“;”表示与前面的各项隔开,后面的路径是JDK包的安装路径下的bin目录。图为作者修改path变量的情况,注意你的安装路径可能与作者的有所不同,同样要以你的安装路径为基准进行修改。第49页,共179页。图1.5编辑path变量第50页,共179页。Java开发工具包括:
Javac:Java编译器,用来将java程序编译成
Bytecode。
Java:Java解释器,执行已经转换成Bytecode的
java应用程序。
Jdb:Java调试器,用来调试java程序。
Javap:反编译,将类文件还原回方法和变量。
Javadoc:文档生成器,创建HTML文件。
Appletviwer:Applet解释器,用来解释已经转换成
Bytecode的java小应用程序。Java开发环境第51页,共179页。C:\Jdkbinlibjavacjavaappletviewer用户类文件所在目录c:\java\examples\applications当前目录jredemoJava开发环境第52页,共179页。多数编程语言都有预选编译好的类库以支持各种特定的功能在Java中,类库以包(package)的形式提供不同版本的Java提供不同的包,以面向特定的应用Java2平台包括标准版(J2SE)、企业版(J2EE)和微缩版(J2ME)三个版本Java开发类库组成第53页,共179页。StandardEdition J2SE 包含那些构成Java语言核心(标准版) 的类。数据库连接、接口定义、输入/输出、网络编程EnterpriseEditionJ2EE 包含J2SE中的类,并且还包(企业版) 含用于开发企业级应用的类。EJB、servlet、JSP、XML、事务控制MicroEdition J2ME 包含J2SE中一部分类,用于(微缩版) 消费类电子产品的软件开发。呼机、智能卡、手机、PDA、机顶盒Java开发类库组成
——Java2的三个版本第54页,共179页。Java提供了丰富的标准类来帮助程序设计者更方便快捷地编写程序,这些标准类组成了类包,主要有:……
除了之外,其余类包都不是java语言所必须的。Java开发类库组成
——J2SE的类包第55页,共179页。Language java.lang 构成Java语言核心的类Object,Math,String,Number,Exception,System,Runtime……Utilities java.util 提供实用的数据结构Vector,Stack,Hashtable……/Colloection,List,Set,Map……I/O java.io 提供多种类型的输出/输出InputStream,OutputStream,Reader,Writer,RandomAccessFile,File……Text java.text 文本/日期/数字/消息的本地化支持NumberFormat,DateFormat,andCollator……Math java.math 提供任意精度的整数和浮点数运算AWT java.awt 用户接口设计和事件处理Swing javax.swing 提供全Java的,在任何平台上表现 都相同的轻量级构件Java开发类库组成
——J2SE的类包第56页,共179页。Javax javax 对Java语言的扩展Applet java.applet 用于创建Applet的类Beans java.beans 用于开发JavaBeans的类Reflection java.lang.reflect用于动态获取类信息的类SQL java.sql 提供对数据库中数据的访问和处理Connection,ResultSet,Statement……RMI java.rmi 支持分布式编程Networking 支持开发网络应用的类Socket,URL,URLConnection……Security java.security 支持访问控制和信息安全的类用于访问控制,防止非信任代码执行关键操作认证相关的类,实现了消息摘要和数字签名与数字认证等Java开发类库组成
——J2SE的类包第57页,共179页。(1)
本类包中包含了各种定义java语言时必须的类,这些类能够以其他类不能使用的方式访问java的内部。任何java程序都将自动引入这个包。其中的类包括:
Object类:java中最原始、最重要的类,每个java类都是它的子类,它实现了每个类都必须具有的基本方法。基本类型包装器:Boolean,Character,Number,Double,Float,Integer,Long。
String类:字符串类。
Math类:数学函数的集合。执行线程:类Thread,ThreadGroup,接口Runable。异常和错误:类Exception,Error,接口Throwable。Java开发类库组成
——J2SE的类包第58页,共179页。(1)
运行环境:可以通过类Runtime和System访问外部系统环境。System类的两个常用功能就是访问标准输入/输出流和错误流、退出程序。其他类:接口Cloneable、运行时的类等。(2)JavaApplet是Java编程的一个主要魅力,类包提供了Applet的运行机制以及一些编写Applet非常有用的方法。Java开发类库组成
——J2SE的类包第59页,共179页。(3)
本类包是各种窗口环境的统一界面(AWT代表AbstractWindowsToolkit,即抽象窗口工具包),其中的类使得创建诸如窗口、菜单、滚动条、文本区、按钮以及复选框等图形用户界面(GUI)的元素变得非常容易。(4)
类包能够以独立于设备的方式加载并过滤位图图象。(5)是全部awt组件的对等对象接口的集合,每个接口都提供了机器相关基本的方法,awt使用这些方法来实现GUI,而不必关心是何种机器或操作系统。Java开发类库组成
——J2SE的类包第60页,共179页。(6)Java的输入/输出模式是完全建立在流的基础之上的。流是一种字节从一个地方到另一个地方的单向流动,可以把流附加于文件、管道和通信链路等。类包中定义的许多种流类通过继承的方式进行组织,其中也包括一些用来访问本地文件系统上的文件的流类。(7)类包用来完成与网络相关的功能:URL、WWW连接以及更为通用的Socket网络通信。(8)类包包含了一些实用类和有用的数据结构,如字典(Dictionary)、散列表(Hashtable)、堆栈(Stack)、向量(Vectro)以及枚举类(Enumeration)等。Java开发类库组成
——J2SE的类包第61页,共179页。编写源文件
(1)
源文件的组成使用一个文字编辑器,如Edit或记事本,来编写源文件。不可使用Word编辑器,因它含有不可见字符。
Java是面向对象编程,Java应用程序的源文件是由若干个书写形式互相独立的类组成。见例子1
第一个Java应用程序第62页,共179页。应用程序的主类
一个Java应用程序必须有一个类含有publicstaticvoidmain(Stringargs[])方法,称这个类是应用程序的主类。args[]是main方法的一个参数,是一个字符串类型的数组(注意String的第一个字母是大写的),以后会学习怎样使用这个参数。
第63页,共179页。源文件的命名规则
源文件有几个类?源文件名=该类类名一个两个以上有public类?没有源文件名=类名之一有有几个public类?一个两个以上源文件名=该Public类名
这是不允许的!第64页,共179页。
包、类、变量、方法等命名:要体现各自的含义。包名全部小写,io,awt
类名第一个字母要大写,HelloWorldApp
变量名第一个字母要小写,userName
方法名第一个字母要小写,setName
程序书写格式:保证良好的可读性,使程序一目了然。大括号{}的使用与对齐语句段的对齐在语句段之间适当空行程序注释:帮助了解程序的功能。类注释变量注释方法注释语句注释语句段注释建议:一个类一个.java文件程序示例Java程序—程序书写规范第65页,共179页。第一个Java应用程序(1)编写程序,创建源代码文件:/***TheHelloWorldAppclassimplementsanapplicationthat*simplydisplays"HelloWorld!"tothestandardoutput.*/classHelloWorldApp{publicstaticvoidmain(String[]args){System.out.println("HelloWorld!");//Displaythestring.}}第66页,共179页。第一个Java应用程序(2)进入到源文件所在的目录第67页,共179页。第一个Java应用程序(3)编译源文件输入指令:javacHelloWorldApp.java
,如果成功将在当前目录下产生文件HelloWorldApp.class第68页,共179页。第一个Java应用程序(4)运行程序输入指令:javaHelloWorldApp
第69页,共179页。Java开发工具包(JDK)字节码编译器()将Java文件(.java)编译为字节码文件(.class)用法示例:(文件名)字节码解释器()解释执行字节码文件(.class)用法示例:javaHellow(类名)Applet浏览器()用于Applet开发过程中的测试用法示例:appletviewerHellow.html(网页文件名)第70页,共179页。在Java出现以前,几乎没有什么工具可以在Internet上执行动态交互程序流程控制分为三种基本结构:顺序结构、分支结构和循环结构。第40页,共179页。装入代码的工作由“类装载器”(classloader)完成。(1)标识符由字母、数字、下划线(_)、美元符号($)组成,但美元符号用得较少。如果程序连接了网络中另一系统中的某一类,该类的所有者也可以自由地对该类进行更新,而不会使任何引用该类的程序崩溃。第157页,共179页。publicclassExample{inti=1;x=12;类的定义又包括类头声明和类体定义。变量名第一个字母要小写,userNameJava语言编译执行流程编译器解释器编译一次,但每次执行时均需解释第71页,共179页。Java程序的开发流程(Application)文本编辑器Java源代码App.Java文件编译Java源代码javacApp.java编译错误?Java类文件.class文件执行Java程序javaApp结果正确?结束是否是否第72页,共179页。程序分析/*thisisasimpleJavaprogram.*/publicclassExample{
//mainfunctionpublicstaticvoidmain(String[]args){System.out.println(“Hellowworld!");}}第73页,共179页。程序分析——注释注释的作用:程序执行时会忽略所有的注释注释用于说明程序开发者的意图,不是语法说明!注释可以提高程序可读性//单行注释
/*多行注释多行注释*/
/**多行注释多行注释*/不能嵌套:/*xx/*yy*/zz*/注释可以跟在一行代码的后面javadoc使用该类注释产生程序文档第74页,共179页。程序分析——类classExample{开始定义类HelloWorldApp每一个Java程序至少有一个用户自定义的类关键字:专供Java本身使用的词关键字class后紧跟类名类名规范:每个单词的首字母大写,例如:SampleClassName第75页,共179页。76
分析程序程序从main()方法开始执行关键字public是一个访问说明符,控制类成员的可见度和作用域关键字static允许调用main()方法,而无需创建类的实例关键字void告诉编译器main()方法在执行时不返回任何值第76页,共179页。程序分析——程序的入口main函数必须严格象下面那样定义main函数是Java程序的入口,由main函数调用其它函数,它是每一个Java应用程序(application)的必备部分方法(函数)用于完成某个任务并返回结果信息void
表明main
方法不返回任何结果由{开始方法定义,由}结束方法定义publicstaticvoid
main(Stringargs[]){…………}第77页,共179页。程序分析——输出语句命令计算机执行一个指令打印一个字符串字符串–
由双引号包围的一系列字符字符串中的空白符会被编译器保留下来。标准输出对象在MS-DOS窗口中输出内容
System.out.println对象的一个方法,显示一行文本括号中是参数这一行被称为语句语句必须用(;)结束System.out.println(“Javadrivestheweb.");第78页,共179页。程序分析——语句所有的语句以;结束一个单独的语句可以被分为多行不能在一个标识符中间或字符串内部断开一个语句System.out.println("HelloWorld!");√ln("HelloWorld!");XSystem.out.println("HelloWorld!");X第79页,共179页。第二个简单程序publicclassExample2{publicstaticvoidmain(String[]args){intvar1;//声明变量var1intvar2;//声明变量var2var1=1024;//将1024赋值给变量var1System.out.println("var1中存放的数字是:"+var1);var2=var1/2;System.out.print("var2中存放的数字是var1/2:");System.out.println(var2);}}第80页,共179页。程序分析——变量变量就是内存单元的名字定义:类型名变量名;强类型语言:变量要先定义再使用变量名必须是合法的标识符Java中区分大小写:sun与Sun不同第81页,共179页。变量和内存变量每个变量都有一个名字、数据类型、所占内存单元数和一个值名字对应于内存中的位置当新值被赋给变量老值将被取代从内存中读数据不会破坏数据第82页,共179页。内存概念sum=0;number1=1;number2=2;
sum0
sum
3
sum=number1+number2;执行之后:第83页,共179页。第一次使用Java时常见的问题
编译时运行时第84页,共179页。使用“.”作为目录名分割符:[yourhome]>错误:不能读:1个错误解决办法:[yourhome]>或者[yourhome]>Java编译时常见的问题(1)第85页,共179页。Java编译时常见的问题(2)忘记文件后缀.java[yourhome]>javacexamples\ch1\Welcome1javac:无效的参数:examples\ch1\Welcome1用法:javac<选项><源文件>……解决办法:[yourhome]>或者[yourhome]>第86页,共179页。Java运行时常见的问题(1)使用“\”最为包名的分割符:[yourhome]>javaexamples\ch1\Welcome1Exceptioninthread"main"java.lang.NoClassDefFoundError:examples\ch1\Welcome1(wrongname:examples/ch1/Welcome1)atjava.lang.ClassLoader.defineClass0(NativeMethod)
……解决办法:[yourhome]>或者[yourhome]>javaexamples/ch1/Welcome1第87页,共179页。Java运行时常见的问题(2)没有把当前目录加到classpath环境变量中:[yourhome]>Exceptioninthread"main"java.lang.NoClassDefFoundError:examples\ch1\Welcome1解决办法:setclasspath=%classpath%;.或者[yourhome]>java–classpath.第88页,共179页。Java编译小窍门命令行:javac*.java可以编译当前目录下所有的.java文件命令行:javacyourpackage\*.java编译yourpackage目录下所有的.java文件第89页,共179页。第2章Java基本语法2.1Java程序的构成2.2数据类型、变量和常量2.3运算符和表达式2.4流程控制2.5数组的使用习题
第90页,共179页。2.1Java程序的构成2.1.1逻辑构成
Java源程序逻辑构成分为两大部分:程序头包的引用和类的定义。
1.程序头包的引用主要是指引用JDK软件包自带的包,也可以是自己定义的类。引用之后程序体中就可以自由应用包中的类的方法和属性等。第91页,共179页。2.类的定义
Java源程序中可以有多个类的定义,但必须有一个主类,这个主类是Java程序运行的入口点。在应用程序中,主类为包含main方法的类;在Applet中,主类为用户自定义的系统Applet类的扩展类。在Java源程序中,主类的名字同文件名一致。类的定义又包括类头声明和类体定义。类体中包括属性声明和方法描述。下面来看一个例子,其中斜体表示的语句行为主类类头,主类类头下面从大括号“{”开始到“}”结束的部分称为主类类体。第92页,共179页。【例2.1】下面是一个应用程序,也是一个Applet,既可以在命令行下运行,也可以嵌入到HTML网页中用appletviewer命令运行。运行时在界面上的第一个文本框中输入你的名字,按回车键后,在第二个文本框中会显示“XXX,欢迎你来到Java世界!”,运行结果如图所示。//程序文件名称为WelcomeApplet.java注释语句引入包publicclassWelcomeAppletextendsAppletimplementsActionListener主类类头
{第93页,共179页。属性init方法第94页,共179页。actionPerformed方法第95页,共179页。main主方法第96页,共179页。图2.1程序界面第97页,共179页。2.1.2物理构成
Java源程序物理上由三部分构成,分别为语句、块和空白。
(1)语句指一行以分号“;”结束的语句。
(2)块指用括号对{}界定的语句序列,块可以嵌套使用。
(3)空白指语句之间、块内部或者块之间的空白行。空白不影响Java源程序的编译和运行,适当地运用空白,可以形成良好的代码风格。第98页,共179页。在例中, LabellblName;TextFieldtxtName;TextFieldtxtDisp;都是语句,而
{ lblName=newLabel("请输入您的名字:"); txtName=newTextField(8); txtDisp=newTextField(20); add(lblName); add(txtName); add(txtDisp); txtName.addActionListener(this); }是块,语句之间、块之间或块内部的空行都为空白。第99页,共179页。2.1.3注释语句注释语句主要用来进行一些说明,或者标记一些无用的程序语句。有两种注释方法,行注释为以//开始的行;块注释以/*开始和*/结束,Java编译器忽略注释后的程序语句或说明。例如,下面的语句就是注释语句用来说明程序文件名称的。//程序文件名称为上述的语句注释可以更改为:/*程序文件名称为WelcomeApplet.java*/或/*程序文件名称为*/第100页,共179页。2.1.4标识符、关键字和转义符在Java语言中,标识符是赋予变量、类和方法等的名称。标识符由编程者自己指定,但需要遵循一定的语法规范:
(1)标识符由字母、数字、下划线(_)、美元符号($)组成,但美元符号用得较少。
(2)标识符从一个字母、下划线或美元符号开始。
(3)Java语言中,标识符大小写敏感,必须区别对待。
(4)标识符没有最大长度的限制,但最好表达特定的意思。
(5)标识符定义不能是关键字。第101页,共179页。
关键字又称保留字,是指Java语言中自带的用于标志数据类型名或者程序构造名等的标识符,如public、double等。转义符是指一些有特殊含义的、很难用一般方式表达的字符,如回车、换行等。所有的转义符以反斜线(\)开头,后面跟着一个字符来表示某个特定的转义符,如表所示。第102页,共179页。具有专门的意义和用途,不能当作一般的标识符使用,这些标识符称为保留字(reservedword)。
abstractbreakbytebooleancatchcaseclasscharcontinuedefaultdoubledoelseextendsfalsefinalfloatforfinally ifimportimplementsintinterfaceinstanceoflonglengthnativenewnullpackageprivateprotectedpublicfinalreturnswitchsynchronizedshortstaticsupertrytruethisthrowthrowsthreadsafetransientvoidwhileJava语言基本元素
——保留字第103页,共179页。数据和返回值类型:int,void,return……包/类/成员/接口:package,class,interface访问控制:public,private,protected循环及循环控制:if,switch,break例外处理:throw,try,finally保留词(无含义但不能使用):goto,constJava语言基本元素
——保留字:基本分类第104页,共179页。在Java中,true、false和null都是小写的。区别于C++中大写的TRUE、FALSE和NULL。所有的数据类型所占用的字节数都是固定的,并且和实现无关的,因此在Java中没有sizeof操作符。不必死记这些关键词,当理解每个关键词的含义后,自然就记住了所有的关键词。Java语言基本元素
——保留字:注意事项第105页,共179页。表2.1转义符第106页,共179页。2.2数据类型、变量和常量2.2.1数据类型
Java编程语言定义了八种基本的数据类型(见表2.2),共分为四类:整数类(byte、short、int、long)、文本类(char)、浮点类(double、float)和逻辑类(boolean)。第107页,共179页。108数据属于不同类别非洲ThequickbrownfoxTRUE数据非数值数值整型非整型9999/12/2003123陈扬char非数值数值整型int…………double非整型StringJava常用数据类型
数据类型第108页,共179页。表2.2Java的数据类型第109页,共179页。1.整数类(1)采用三种进制——十进制、八进制和十六进制。2——十进制值是2;077——首位的0表示这是一个八进制的数值;0xBAAC——首位的0x表示这是一个十六进制的数值。(2)具有缺省int。(3)用字母“L”和“l”定义long。(4)所有Java编程语言中的整数类型都是带符号的数字。第110页,共179页。
2.文本类
(1)代表一个16bitUnicode字符。
(2)必须包含用单引号('')引用的文字。
(3)使用下列符号:
'a'——一个字符。
'\t'--一个制表符。
'\u????'--一个特殊的Unicode字符,????应严格使用四个十六进制数进行替换。第111页,共179页。
3.浮点类默认为double类型,如果一个数字包括小数点或指数部分,或者在数字后带有字母F或f(float)、D或d(double),则该数字为浮点数。第112页,共179页。4.逻辑类boolean数据类型有两种值:true和false。例如:booleanflag=true;上述语句声明变量flag为boolean类型,它被赋予的值为true。第113页,共179页。2.2.2变量与常量常量是指整个运行过程中不再发生变化的量,例如数学中的π=3.1415……,在程序中需要设置成常量。而变量是指程序的运行过程中发生变化的量,通常用来存储中间结果,或者输出临时值。变量的声明也指变量的创建。执行变量声明语句时,系统根据变量的数据类型在内存中开辟相应的存储空间并赋予初始值。变量有一个作用范围,超出它声明语句所在的块就无效。第114页,共179页。115电脑使用内存来记忆计算时所使用的数据内存如何存储数据?内存像旅馆数据各式各样,要先根据数据的需求(即类型)为它申请一块合适的空间1、开房间(单人间、双人间、总统套间)2、入住√回顾内存如何存放数据第115页,共179页。1161000*(1+5%)内存10001050变量:一个数据存储空间的表示对于专业程序员,数据存入内存不算完:怎么找到存入的数据?存进去还能改吗?不同数据存入具有不同内存地址的空间,相互独立变量在银行存1000元钱,银行一年的利息5%,那一年之后钱变成了多少?第116页,共179页。117内存地址不好记,怎么办?通过内存中小房间的别名找到数据存储的位置变量是存储数据的一个基本单元房间
房间名字
房间类型
入住的客人变量
变量名
变量类型
变量值为什么需要变量对应第117页,共179页。118变量应用1、在内存中存储本金1000元2、显示内存中存储的数据的值publicclassHelloAccp1{publicstaticvoidmain(String[]args){
intmoney=1000;//存数据
}}
数据类型
变量名
内存空间存的数值
演示示例:如何存取变量System.out.println(money);//使用数据第118页,共179页。119变量的声明和赋值使用变量的步骤:第一步:声明一个变量第二步:赋值第三步:使用变量数据类型变量名=数值;根据类型开辟空间将数据存入空间取出数据使用数据类型变量名;变量名=数值;intmoney=1000;intmoney;money=1000;第119页,共179页。
下面看一个使用各种类型变量声明并改变的示例。程序中pi为常量,s1、i1、l1、ch1、f1、d1、b1为全局变量,可以在方法change中发生改变,然后在方法main中输出。而s2、i2、l2、ch2、f2、d2、b2是方法main的局部变量,它们的作用范围只局限于方法main中。
【例2.2】测试不同数据类型的变量,程序输出如图所示。源程序代码如下://程序文件名称为publicclassSetVariable{ //全局变量第120页,共179页。;//数学常量 staticshorts1; staticinti1; staticlongl1; staticcharch1; staticfloatf1; staticdoubled1; staticbooleanb1; publicstaticvoidmain(Stringargs[]) {第121页,共179页。 //局部变量
shorts2=35; inti2=-32; longl2=34555L; charch2='A'; floatf2=897.89F; doubled2=34.345; booleanb2=false; //输出常量
System.out.println("数学常量pi="+pi); //输出局部变量第122页,共179页。System.out.println("******局部变量******");System.out.println("短整型变量s2="+s2);System.out.println("整型变量i2="+i2);System.out.println("长整型变量l2="+l2);System.out.println("字符变量ch2="+ch2);System.out.println("浮点数类型f2="+f2);System.out.println("双精度型变量d2="+d2);System.out.println("布尔型变量b2="+b2);//调用方法修改全局变量的值第123页,共179页。change();//输出全局变量的值System.out.println("******全局变量******");System.out.println("短整型变量s1="+s1);System.out.println("整型变量i1="+i1);System.out.println("长整型变量l1="+l1);System.out.println("字符变量ch1="+ch1);System.out.println("浮点数类型f1="+f1);System.out.println("双精度型变量d1="+d1);System.out.println("布尔型变量b1="+b1);}第124页,共179页。//方法:修改全局变量的值
publicstaticvoidchange(){ s1=125; i1=88; l1=987654321L; ch1='B'; f1=3.2590F; d1=-1.04E-5; b1=true;}}第125页,共179页。图2.2变量输出结果第126页,共179页。2.3运算符和表达式Java常用的运算符分为五类:算术运算符、赋值运算符、关系运算符、布尔逻辑运算符、位运算符。位运算符除了简单的按位操作外,还有移位操作。按位操作返回布尔值。表达式是由常量、变量、对象、方法调用和操作符组成的式子。表达式必须符合一定的规范,才可被系统理解、编译和运行。表达式的值就是对表达式自身运算后得到的结果。根据运算符的不同,表达式相应地分为以下几类:算术表达式、关系表达式、逻辑表达式、赋值表达式,这些都属于数值表达式。第127页,共179页。2.3.1算术运算符及算术表达式
Java中常用的算术运算符如下:
+ 加运算符
- 减运算符 * 乘运算符
/ 除运算符
% 取模运算(除运算的余数) ++ 增量运算符
-- 减量运算符第128页,共179页。【例2.3】测试运算符及表达式,程序输出如图所示。源程序代码如下://程序文件名称为publicclassNumberOper{ publicstaticvoidmain(Stringargs[]) { //变量初始化
inta=30; intb=20; //定义结果变量
intr1,r2,r3,r4,r5,r6,r7,r8,r9; //计算结果
r1=a+b;第129页,共179页。 r2=a-b; r3=a*b; r4=a/b; r5=a%b; r6=a++; r7=b--; r8=++a; r9=--b; //输出结果
System.out.println("a="
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年重要教育讲话试题及答案
- 深度解析(2026)《GBT 29872-2013工业企业能源计量数据集中采集终端通 用技术条件》
- DB46-T 527-2021 建筑消防设施检测技术规程
- 《GBT 7895-2008人造光学石英晶体》(2026年)合规红线与避坑实操手册
- 2026年社区图书借阅APP开发合同
- 奇怪!这种碱性染料竟要配成酸性溶液?分享免疫组化实验中HE染色的机制
- 某省市普通高中招生考试·语文创新卷三
- 低空飞行服务平台指挥调度中心建设路线
- 导尿管脱管处理
- 胫腓骨骨折围手术期护理理论考核试题
- 2026中国医疗美容行业发展现状及政策监管趋势分析报告
- 2026年九年级物理中考二轮复习 专题07 电学重点实验(复习课件)
- 2026年北京市海淀区初三下学期一模物理试卷及答案
- 2026黑龙江佳木斯同江市招聘社区工作者20人备考题库及答案详解(网校专用)
- 2026年高考(浙江卷)英语试题及答案
- 2026年检验检测机构管理考试试卷及答案
- 2025年-安徽交控建设公司笔试及答案
- 2025年四川省高考化学试卷真题(含答案解析)
- 2025年轨道交通调度员(技师)职业技能鉴定考试题库(共500题)
- 中医对高脂血症认识与防治课件
- 秦艽的鉴定(中药鉴定技术)
评论
0/150
提交评论