版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
2026/8/23
*1第一章Java概述第2页
JDK的下载、安装与环境配置了解Java虚拟机的特点以及Java语言的特点掌握编译和执行Java程序的基本步骤理解Java程序的入口并能够通过命令行传递参数会编写通过键盘输入数据的简单的Java程序会编简单的Applet程序会使用浏览器和appletviewer运行Applet程序会调试简单的Java程序
本章学习要点2026/8/23
*31.1
Java的简介第4页
Java技术的出现与形成1995年1月,Oak被更名为Java。这个名字的产生,既不是根据语言本身的特色来命名,也不是由几个英文单词的首字母拼成,更不是由人名或典故而来,而是来自于印度尼西亚有一个盛产咖啡的岛名,中文名叫爪哇,意为世人端上一杯热咖啡。许多程序设计师从所钟爱的热腾腾的香浓咖啡中得到灵感,因而热腾腾的香浓咖啡也就成为Java语言的标志。1995年5月23日Java正式公布,以后人们对Java的兴趣和重视证明了这项技术将是未来网络计算的主流技术。第5页Java技术的出现与形成1995年一些著名的公司,如:IBM,Microsoft,Netscape,Novell,Apple,DEC,SGI等都纷纷购买语言使用权。1996年Java应用软件纷纷问世,赢得软件工业界的广泛支持。1997年Java技术用于网络计算,从业界的事实标准走向法律标准。2000年5月,JDK1.3发布,工程代号:Kestrel。2002年2月13日,JDK1.4发布,工程代号:Merlin。2004年9月,JDK1.5发布,工程代号Tiger。第6页2005年举行盛大的庆典“Java这十年”十件大事十大产品十大机构十大人物Java的畅销书Java技术的出现与形成
第7页1.1.1Java历史Java这十年第8页1.1.1Java历史Java这十年第9页1.1.1Java历史Java这十年第10页1.1.1Java历史Java这十年第11页Java这十年Java的畅销书1.1.1Java历史Java这十年第12页十年之后2005年6月,JavaOne大会召开,SUN公司公开JavaSE6。此时,Java的各种版本已经更名以取消其中的数字“2”:J2EE更名为JavaEE,J2SE更名为JavaSE,J2ME更名为JavaME。2006年12月11日,JDK1.6发布,工程代号为mustang(野马)。2009年4月20日,全球最大的数据库软件商甲骨文(Oracle)公司甲宣布,该公司将以每股9.5美元的价格收购Sun。该交易价值约为74亿美元。2005年6月,JavaOne大会召开,SUN公司公开JavaSE6。此时,Java的各种版本已经更名以取消其中的数字“2”:J2EE更名为JavaEE,J2SE更名为JavaSE,J2ME更名为JavaME。2006年12月11日,JDK1.6发布,工程代号为mustang(野马)。2009年4月20日,全球最大的数据库软件商甲骨文(Oracle)公司甲宣布,该公司将以每股9.5美元的价格收购Sun。该交易价值约为74亿美元。2005年6月,JavaOne大会召开,SUN公司公开JavaSE6。此时,Java的各种版本已经更名以取消其中的数字“2”:J2EE更名为JavaEE,J2SE更名为JavaSE,J2ME更名为JavaME。2006年12月11日,JDK1.6发布,工程代号为mustang(野马)。2009年4月20日,全球最大的数据库软件商甲骨文(Oracle)公司甲宣布,该公司将以每股9.5美元的价格收购Sun。第13页十年之后2005年6月,JavaOne大会召开,SUN公司公开JavaSE6。此时,Java的各种版本已经更名以取消其中的数字“2”:J2EE更名为JavaEE,J2SE更名为JavaSE,J2ME更名为JavaME。2006年12月11日,JDK1.6发布,工程代号为mustang(野马)。2009年4月20日,全球最大的数据库软件商甲骨文(Oracle)公司甲宣布,该公司将以每股9.5美元的价格收购Sun。该交易价值约为74亿美元。2005年6月,JavaOne大会召开,SUN公司公开JavaSE6。此时,Java的各种版本已经更名以取消其中的数字“2”:J2EE更名为JavaEE,J2SE更名为JavaSE,J2ME更名为JavaME。2006年12月11日,JDK1.6发布,工程代号为mustang(野马)。2009年4月20日,全球最大的数据库软件商甲骨文(Oracle)公司甲宣布,该公司将以每股9.5美元的价格收购Sun。该交易价值约为74亿美元。2011年7月28日,Java7发布!这是自2006年12月Sun发布JavaSE6以来的首个重要版本更新,也是Sun被Oracle收购以来发行的第一个版本,包含了Java诞生以来最大的改进,可以看作是Java发展史上一个显要的里程碑。2014年3月18日,甲骨文公司举办Java8网络直播发布会,发布甲骨文迄今为止最重要的Java技术Java8。甲骨文宣布推出了Java平台标准版8(JavaSE8)、Java平台微型版8(JavaME8)以及OracleJavaEmbedded产品的有关版本。第14页2017年9月21日JDK1.9发布,它的发布主要是引入模块化以及简化进程、改善锁争用机制、代码分段缓存等。2018年3月20JDK10发布。改进的关键点包括:一个本地类型推断、一个垃圾回收的“干净”接口、将JDK的多个存储库合并成一个,简化开发。目前,JDK版本已经发展到JDK11了。十年之后2026/8/23
*151.2Java语言的特色第16页
在Sun公司的白皮书中,对Java的定义是“Java:ASimple,object-oriented,distributed,robust,secure,architecture-neutral,portable,high-performance,multi-threaded,anddynamiclanguage.”即Java是一种简单的、面向对象的、分布式的、强壮的、安全的、体系结构中立的、可移植的、高性能的、多线程的和动态的语言。第17页1.2Java语言的特色第18页1.2Java语言的特点Java虚拟机JavainterpreterJust-in-timecompilerRuntimeSystemOperatingSystemHardware不同的操作系统有不同的虚拟机.它类似一个小巧而高效的CPU.byte-code代码是与平台无关的是虚拟机的机器指令.Java字节代码运行的两种方式:interpreter(解释方式)Just-in-time(即时编译):代码生成器将字节代码转换成本机的机器代码,就可以以较高速度执行.2026/8/23
*191.3Java的开发和执行环境第20页Java的开发工具和运行环境现在还是免费的。只要可以进入Internet,就可以免费下载开发工具集JDK,其中包括了Java的全套文档资料。在JDK的基础上,目前有许多公司也成功地开发出集成化的Java开发环境,其中最流行的是开源软件Eclipse和IntelliJIDEA。1.3Java的开发和执行环境第21页1.3.1JDK的下载
通过浏览器上网后,可以在Sun公司的Internet站点找到JDK的最新版本,自由下载。JDK1.8的下载网址是:/technetwork/java/javase/downloads/jdk8-downloads下面介绍的JDK1.8的64位Windows系统版本,可以从网址/technetwork/java/javase/downloads/jdk8-downloads-2133151.html上找到JDK1.8(jdk-8u191-windows-x64.exe,207.22MB,可直接运行)。第22页1.3.1JDK的下载
API说明文档可以从网址:/technetwork/java/javase/documentation/jdk8-doc-downloads-2133158.html下载jdk-8u191-docs-all.zip(89.46MB)。解压后,自动进入安装过程,此时可以按照提示,逐步完成安装。安装时可以自选一个比较简单的目录,例如,C:\JDK18,避免拼写复杂的目录名给操作带来的很多不便。第23页1.3.2JDK的安装与环境配置在Window2000/XP下,环境变量的配置从“我的电脑”(右键)
高级
环境变量,再在其中选择“系统变量”的“新建”,然后在变量名中输入:“classpath”,在变量值输入:“D:\JDK18\BIN;D:\JDK18\LIB\dt.jar;D:\JDK18\LIB\tools.jar”;.;也可直接编辑自动批处理文件Autoexec.bat文件,在该文件中添加设置语句:
setclasspath=D:\JDK18\BIN;D:\JDK18\LIB\dt.jar;D:\JDK18\LIB\tools.jar;.;第24页1.3.3JDK环境工具简介JDK环境工具包括Java编译器,Java虚拟机,Applet程序观察器,Java文档生成器,Java调试器等。1.编译器——javacjavac的作用是将源程序(.java文件)编译成字节码(.class文件)。Java源程序的后缀名必须是java。javac一次可以编译一个或多个源程序,对于源程序中定义的每个类,都会生成一个单独的类文件。例如,如果在A.java中定义了A、B、C三个类,则经过javac编译后要生成A.class,B.class,C.class三个类文件。javac的调用格式为:javac[选项]源文件名表其中源文件名表是多个带.java后缀的源文件名第25页2.Java的语言解释器——javajava命令解释执行Java字节码。其格式为:
java[选项]类名〈参数表〉这里的类名代表由编译器生成的带.class后缀的类文件名,但在上述命令不需要带后缀。这个类必须是一个独立程序(不能是Applet),程序中必须带有一个按如下格式声明的main方法。
publicstaticvoidmain(String[]args){…}并且包含main方法的类的类名必须与类文件名相同,即与现在命令行中的“类名”相同。在执行java命令时,若类名后带有参数表,则参数表中的参数依次直接传递给该类中的main方法的args数组,这样在main方法中就可以使用这些数组元素。1.3.3JDK环境工具简介第26页3.JavaApplet观察器——appletviewerappletviewer命令使用户不通过Web浏览器也可以观察Applet运行情况。其格式为:
appletviewer[-debug]HTML文件appletviewer下载并运行HTML文件中包含的Applet,如果HTML文档中不包含任何Applet,appletviewer则不采取任何行为。如果上述命令中使用了-debug选项,则appletviewer将jdb从内部启动,这样就可以调试HTML文件所引用的Applet。1.3.3JDK环境工具简介2026/8/23
*271.4一个简单的独立应用程序第28页Java程序分两种:JavaApplication(Java应用程序):是一个完整的应用程序,可以独立地运行运行在Java虚拟机(JVM)上中间代码必须有main函数JavaApplet(小应用程序):不是一个完整的应用程序,而是框架程序中的一个模块,所以只能在WWW浏览器环境下运行可以没有main函数必须由某个支持java的浏览器来运行第29页1.4.1从编辑程序到执行程序的完整过程利用编辑器编写Java源程序源文件名:主类名.java利用编译器将源程序编译成字节码字节码文件名:源文件名.class利用虚拟机(解释器)运行运行过程:载入、代码校验、解释执行第30页第一个JavaApplication程序的例子/**一个简单的Application程序;*/publicclass
HelloWorld{publicstaticvoid
main(String
args[]){
String
s="HelloWorld!";//定义字符串s
System.out.println(s); }}(1)Java语言标识符的字母区分大小写;(2)一个程序可以由一个或多个类组成,其中必须有也只能有一个主类。(3)源文件名必须与程序的主类名一致,并且以.java为其后缀。第31页程序说明:用保留字class来声明一个新的类,其类名为HelloWorld,它是一个公共类(public)。一个Java程序中可以定义多个类,但只有一个类可以定义为public类;在该类中定义了一个main()方法,其修饰符有:public表示访问权限,指明所有的类都可以使用这一方法;
static指明该方法是一个类方法,它可以通过类名直接调用;
void则指明main()方法不返回任何值。
main()是执行程序的入口;对于一个可执行的应用程序来说,main()方法是必需的,而且必须按照如上的格式来定义。main()方法括号()中的Stringargs[]是传递给main()方法的参数,参数可以没有或多个。第32页应用程序的编译执行过程Java引入编译的主要原因:(1)保证程序的语法正确性;(2)通过编译引入Java类库中已编写好的模块;(3)编译成功的结果将生成一个或多个字节码文件,每个字节码文件对应源程序中定义的一个类,该文件的名字是它所对应的类的名字,并以.class
为统一的后缀名。编译一个源程序的命令为:
C:\>javac
HelloWorld.javaJava的源程序经过编译后,每个类都生成一个类文件第33页应用程序的编译执行过程执行一个Java程序的命令格式为:C:\>java
HelloWorld
该命令调用Java的解释器软件java.exe运行编译好的Java字节码程序。程序执行结果显示:HelloWorld!解释运行的三个阶段:
(1)载入:Java解释器中的类载入器将字节码文件加载到内存(网上运行程序则通过网络下载到本地内存);
(2)代码校验:Java解释器中的代码检验器检查这些字节码的合法性;
(3)解释执行:合法的字节码程序由Java解释器逐句地解释运行。2026/8/23
*341.5一个简单的Applet程序第35页1.5一个简单的Applet程序Applet程序是一个嵌入在浏览器中执行的Java程序,它必须扩展Applet类。扩展Applet类的程序没有构造方法,也不需要main()方法。一个Applet程序一般包含4个重要方法:init()、start()、stop()和destroy(),它的执行由init()方法控制。Applet程序一旦装载后,init()方法只执行一次。每次重新访问Applet时,则要调start()方法。每次Applet所在的Web页面被其他页面所取代时,则要调stop()方法。第36页1.5一个简单的Applet程序/*这是一个Applet程序;*/import
java.awt.*;import
java.applet.*;public
class
HelloApp
extends
Applet{
public
void
paint(Graphics
g){
g.drawString(“HelloWorld!”,20,20);
}}程序中,首先用import语句输入java.awt和java.applet包中所有的类,使得该程序可能使用这些包中所定义的类,它类似于C中的#include语句。第37页程序说明:接着声明一个公共类HelloApp,用extends指明它是Applet的子类。在类中,重写父类Applet的paint()方法,其中参数g为Graphics类,它表明当前画图的上下文。在paint()方法中,调用图形对象g的方法drawString(),在坐标(20,20)处输出字符串“HelloWorld!”
。import
java.awt.*;import
java.applet.*;public
class
HelloApp
extends
Applet{
public
void
paint(Graphics
g){
g.drawString(“HelloWorld!”,20,20);
}}第38页JavaApplet基本结构importjava.applet.*;importjava.awt.*;class
extendsApplet{}类名称类成员声明第39页JavaApplet工作原理HTML文件嵌入Appletwww服务器www服务器www浏览器请求HTML文件下载HTML文件请求Applet字节码下载Applet字节码解释执行Applet字节码第40页嵌入到HTML文件中<HTML><HEAD><TITLE>AnApplet</TITLE></HEAD><BODY><APPLETCode=“HelloApp.class“Width=200Height=40></APPLET></BODY></HTML>第41页浏览效果2026/8/23
*421.6一个具有输入功能的程序第43页1.6一个具有输入功能的程序前面介绍的两个程序都只具有输出功能,如果想对Java整体有一个大概的了解,可能很想看看具有输入功能的程序。这里也顺便提到Java的异常处理机制,这也是Java最具特色的地方之一。输入比输出更容易出错。一个错误的输入将会导致程序的崩溃(程序中断或退出),运行时发生的错误称为异常,Java提供了特殊的机制来处理异常。一个最简单的处理输入/输出异常的方法是在main()方法后面加上“throwsIOException”。第44页1.6一个具有输入功能的程序例1.3交互式输入输出。这个程序首先提示用户输入姓名,然后等待用户输入。当用户输入姓名,并按Enter键后,系统很快给出一个问候信息。
importjava.io.*;publicclassSay_Hello_to_You{publicstaticvoidmain(String[]args)throwsIOException{InputStreamReaderreader=newInputStreamReader(System.in);BufferedReaderinput=newBufferedReader(reader);System.out.print("Enteryourname:");Stringname=input.readLine();System.out.println("Hello,"+name+"!");}}第45页1.6一个具有输入功能的程序最后执行该程序,其交互方式如图1.6所示。程序简单分析:源代码文件中的第1行是:
importjava.io.*;它告诉编译器到java.io类库中寻找程序中用到的I/O类。事实上该程序用到3个I/O类:IOException、InputStreamReader和BufferedReader类。第46页1.6一个具有输入功能的程序第4行中,把reader定义为InputStreamReader类的一个实例,并把系统的输入流对象System.in与作为它的输入流,把数据从键盘传递到程序当中。第5行中,把input对象定义为BufferedReader类的一个实例,并把reader对象作为它的输入流。第7行,input对象的readLine()方法从键盘读取一整行的字符,并把它们当做String对象来对待:
Stringname=input.readline();该语句声明了一个String对象name,它被初始化为input.readLine()方法的返回值。无论用户从键盘输入了什么字符,它都被保存在name对象中。name中的字符串被接下来的语句打印出来。2026/8/23
*471.7小结第48页1.7小结(程序书写规范)
包、类、变量、方法等命名:要体现各自的含义。包名全部小写,io,awt类名第一个字母要大写,HelloWorldApp变量名第一个字母要小写,userName方法名第一个字母要小写,setName程序书写格式:保证良好的可读性,使程序一目了然。大括号{}的使用与对齐同层语句段的对齐在语句段之间适当空行程序注释:帮助了解程序的功能。类注释变量注释语句段注释方法注释语句注释第49页1.7小结源程序编辑器推荐:Eclipse、IntelliJIDEA、Jcreator、Editplus2、UtrlEditGEL(/)网上资源SunDeveloperNetwork(/)Sun网络社区(/)Java研究组织(/index.jsp)Chinajavaworld论坛(/)第50页1.7小结
本章介绍了Java的跨平台性为代表的主要特征,然后介绍了如何下载和安装Sun公司提供的Java开发工具JDK以及使用说明。有了这些简单Java知识,我们就可以开发简单的Java程序。本章给出了这些程序从编辑源到用Java虚拟机执行的完整过程。本章给出的实例实际有两种方式输入信息:通过命令行参数输入信息和在程序中通过键盘读入信息。然后经过简单加工,再通过标准输出显示到屏幕上。有了本章的基础,我们应该可以编写简单的程序了。第51页课后练习配置Windows+JDK1.5开发环境;编写、编译并运行一个简单的Java应用程序(Application);编写、编译并运行一个简单的Java小程序(Applet)。教材:Java语言与面向对象程序设计
清华大学出版社作者:朱福喜
第二章Java语言基础2026/8/23
*52
本章学习要点Java基本的数据类型和表示方法数值类型的运算逻辑运算和比较条件执行语句,包括三种条件语句和switch语句循环控制语句,包括for、while、dowhile循环及相应的辅助语句字符串类String和BufferString数组的声明及使用第53页本章介绍Java的基本编程知识,以及其他的特点。Java语言抛弃了C、C++中不合理的内容,主要有如下几点:(1)全局变量:Java程序中,不能在类之外定义全局变量,只能通过在一个类中定义公用、静态的变量来实现一个类中的全局变量。(2)goto语句:Java不支持goto语句,而是通过异常处理语句try、catch、final等来处理遇到错误时跳转的情况。(3)指针:Java语言不支持指针的操作,但通过引用等特性实现了指针的功能及灵活性。(4)内存管理:Java语言系统则能创建并动态维护数据结构所需的内存,并自动完成内存垃圾的收集工作。第54页
2.1变量和数据类型2026/8/23
*55在程序中使用的每一个变量必须提供一个名字。Java是强类型语言,这就意味着每一个变量都必须有一个数据类型。为了描述一个变量的类型和名字,必须用如下方式编写变量声明:
类型变量名;使用变量之前必须先声明变量。声明变量包括两项内容:变量名和变量的类型。通过变量名可使用变量包含的数据。变量的类型决定了它可以容纳什么类型的数值以及可以对它进行什么样的操作。变量声明的位置,决定了该变量的作用域。第56页2.1.1变量的名字变量名应满足下面的要求:必须是一个合法的标识符。不能是一个关键字或者保留字(如true、false或者null)。在同一个作用域中必须是唯一的。Java语言规定标识符由字母、下划线(_)、美元符($)和数字组成,且第一个字符不能是数字。其中,字母包括:大、小写字母、汉字等。一般约定:变量名是以小写字母开头。如果变量名包含了多个单词,则在每个单词的第一个字母大写,如:isVisible。下划线“_”可以用在常数中用它分离单词,因为常数名都是用大写字母,用下划线可以更清晰。第57页2.1.2变量的类型两种数据类型:简单类型和引用类型。一个简单变量名就是表示该变量的真实值;引用类型的变量是指向它的值或者它所表示的值的集合。第58页2.2运算符2026/8/23
*59只有一个运算对象的运算符称为一元运算符。一元运算符支持前缀和后缀运算符。前缀运算符是指运算符出现在它的运算对象之前,例如:
operatorop//前缀运算符后缀运算符是指运算对象出现在运算符之前,例如:
opoperator//后缀运算符需要两个运算对象的运算符号称为二元运算符。比如赋值号(=)就是一个二元运算符。所有的二元运算符使用中缀运算符,即运算符出现在两个运算对象的中间:
op1operatorop2//中缀运算符三元运算符需要三个运算对象。Java语言有一个三元运算符“?:”,它是一个简要的if-else语句。三元运算符也是使用中缀运算符,例如:op1?op2:op3//中缀运算符第60页2.2运算符运算符分成以下几类:算术运算符这些运算符为+(加)、-(减)、*(乘)、/(除)以及%(取模)。其中求模运算op1%op2为op1除以op2的余数关系和条件运算符关系运算符用于比较两个值并决定它们的关系,然后给出相应的取值。移位和逻辑运算符赋值运算符其他的运算符第61页2.2.1算术运算符结果的数据类型运算数据类型long任何一个运算对象都不是float或者doule型,而且至少有一个运算对象为longint任何一个运算对象都不是float或者doule型,且不能为long型double至少有一个运算对象为double型float至少有一个运算对象为float型,但不能是double型第62页一元运算符运算符用法描述++op如果op是一个byte、short或者char型,op变成int型--op取op的相反数第63页2.2.1算术运算符
本例得程序显示一些特殊有趣的数据的运算,如exp(4000.0)是一个非常大的数,有可能大于一个double类型所能够容纳得下的数;10.0/0.0是一个非法的运算,现在看看Java如何处理?FunnyNumbers.java第64页无穷大无定义图2.2程序FunnyNumbers的执行结果2.2.2关系与逻辑运算符关系运算符运算符用法返回true的情况>op1>op2op1大于op2>=op1>=op2op1大于等于op2<op1<op2op1小于op2<=op1<=op2op1小于等于op2==op1==op2op1等于op2!=op1!=op2op1不等于op2第65页四种条件运算符
运算符用法返回true的情况&&op1&&op2op1和op2都是true||op1||op2op1或者op2是true!!opop为false^op1^op2op1和op2逻辑值不相同第66页&&和||称为“短路”运算符2.2.3位运算符移位和逻辑运算符运算符用法操作>>op1>>op2将op1右移op2个位<<op1<<op2将op1左移op2个位>>>op1>>>op2将op1右移op2个位(无符号的)&op1&op2按位与|op1|op2按位或^op1^op2按位异或~~op2按位求补第67页2.2.4赋值运算符复合赋值运算符
运算符用法等价形式+=op1+=op2op1=op1+op2-=op1-=op2op1=op1-op2*=op1*=op2op1=op1*op2/=op1/=op2op1=op1/op2%=op1%=op2op1=op1%op2&=op1&=op2op1=op1&op2|=op1|=op2op1=op1|op2^=op1^=op2op1=op1^op2<<=op1<<=op2op1=op1<<op2>>=op1>>=op2op1=op1>>op2>>>=op1>>>=op2op1=op1>>>op2第68页2.2.5其他的运算符运算符描述?:作用相当于if-else语句[]用于声明数组,创建数组以及访问数组元素.访问对象的成员变量和方法(params)以逗号分开的参数系列(type)将某一个值转换为type类型new创建一个新的对象或者新数组instanceof决定第一个运算对象是否为第二个运算对象的一个实例第69页
2.3表达式与语句2026/8/23
*70
2.3.1表达式表达式是由运算符、操作数和方法调用,按照语言的语法构造而成的符号序列。表达式可用于计算一个公式、为变量赋值以及帮助控制程序的执行流程。表达式任务有:·
利用表达式的元素来进行计算。·
返回计算结果的值。表达式返回数值的数据类型取决于在表达式中使用的元素。例如,如果aChar是字符型,则表达式aChar='S'返回一个字符型的值。Java语言允许将多个子表达式构造成复合表达式。下面是一个复合表达式的例子:
(x*y*z)/w第71页
2.3.1表达式各种运算符的优先级
后缀运算符[].(params)expr++expr--
单元运算符++expr--expr+expr-expr~!创建运算符New(type)expr乘除运算符*/%加减运算符+-
移位运算符<<>>>>>关系运算符<><=>=instanceof相等与不等==!=第72页
2.3表达式与语句各种运算符的优先级(续)位运算符&位运算符^位运算符|逻辑运算符&&逻辑运算符||条件运算符?:赋值运算符=+=-=*=/=%=&=^=|=<<=>>=>>>=第73页
2.3.2语句语句是一个执行程序的基本单元,它类似于自然语言的句子。Java语言的语句可分为以下几类:·表达式语句·复合语句·控制语句·包语句和引入语句其中,表达式语句是用分号“;”终止表达式的语句,包括:·赋值表达式语句·++、--语句·方法调用语句·对象创建语句·变量的声明语句第74页
2.4控制语句2026/8/23
*75
2.4控制语句控制语句用于改变程序执行的顺序。程序利用控制语句有条件地执行语句、循环地执行语句或者跳转到程序中的其他部分执行语句。当编写程序的时候,如果没有使用控制语句,计算机将顺序执行所有的语句。如果要改变程序的流程,可以在程序中使用控制语句来有条件地选择执行语句或重复执行某个语句块。Java的控制语句有:·if-else语句·for语句·switch语句·
跳转语句·while和do-while语句·
异常处理语句第76页2.4.1if语句if(boolean-expression1){statements1;}
elseif(boolean-expression2){statements2;}else{ …statementsN;}
布尔表达式boolean-expression是任意一个返回布尔数据类型的表达式,而且必须是.每个单一语句后面都要有分号。为了增强程序的可读性,应将if或else后的语句用{}括起来。
else子句是任选的,不能单独作为语句使用,它必须和if语句配对使用,并且总是与离它最近的if配对。例2.5(IfElseExample)第77页2.4.2switch语句switch(expression){
casevalue1:{statements1;
break;}….
casevalueN:{statementsN;
break;}[default:{defaultStatements;}]}表达式expression的返回值类型必须是这几种类型之一:int、byte、char、short。case子句中的值valueI必须是常量,而且所有case子句中的值应是不同的。default子句是任选的。break语句用来在执行完一个case分支后,使程序跳出switch语句,即终止switch语句的执行。如果某个case分支后没有break语句,程序将不再做比较而执行下一个分支。switch语句的功能可以用if-else语句来实现,但某些情况下,使用switch语句更简炼。SwitchExample.java第78页2.4.3while和do-while语句循环语句while(当型循环)[initialization]//初始化条件while(termination){//循环条件
body;//循环体
[iteration;]//迭代,变更循环条件}当表达式termination为true时,执行{}中的语句,否则终止循环。
WhileExample.java第79页2.4.3while和do-while语句do-while循环语句(直到型循环)[initialization]//初始化条件do{ body;//循环体
[iteration;]//迭代,变更循环条件}while(termination);//循环条件首先执行一遍{}中的语句,当表达式termination为true时,继续执行{}中的语句,否则终止循环。DoWhileExample.java第80页2.4.4for语句for循环语句for(initialization;termination;iteration){ body;//循环体}
其中:
initialization:初始化条件;termination:循环条件
iteration:迭代,变更循环条件初始化、终止以及迭代部分都可以为空语句(但分号不能省),三者均为空的时候,相当于一个无限循环。在初始化部分和迭代部分可以使用逗号语句,来进行多个操作。逗号语句是用逗号分隔的语句序列。第81页2.4.5跳转语句Java语言有3种跳转语句:·break语句·continue语句·return语句第82页2.4.5跳转语句break语句
其功能是从该语句所在的switch分支或循环中跳转出来,执行其后继语句。SwitchExample.java在Java中,可以为每个代码块加一个标号,一个代码块通常是用大括号{}括起来的一段代码。加标号的格式为:
BlockLabel:{codeBlock;}BreakExample.javabreak语句的第二种使用情况就是跳出它所指定的块,并从紧跟该块后的第一条语句处执行。
break
BlockLabel;ContinueExample.java第83页2.4.5跳转语句a:{//标记代码块a…… b:{ //标记代码块b……c:{//标记代码块c…… breakb; ……//这段语句将不执行
}//代码块c结束
…… //这段语句也不执行
}//代码块b结束
…… //从这段语句开始执行}//代码块a结束第84页2.4.5跳转语句continue语句continue语句用来结束本次循环,跳过循环体中下面尚未执行的语句,接着进行终止条件的判断,以决定是否继续循环。对于for语句,在进行终止条件的判断前,还要先执行迭代语句。它的格式为:
continue;ContinueExample.java也可以用continue跳转到括号指明的外层循环中,这时的格式为
continue
outerLable;
ContinueWithLabelExample.java
第85页2.4.5跳转语句return语句
return语句从当前方法中退出,返回到调用该方法的语句处,并从紧跟该语句的下一条语句继续程序的执行。返回语句有两种格式:
return
expression;//当方法需要返回某种类型数据时
return;//当方法的返回类型为void时单独一条return语句放在方法中间时,会产生“不可到达”编译错误,因为其后的语句将不会执行到。若真需要退出方法,可以通过将return语句嵌入某些语句(如if-else)来使程序在未执行完方法中所有语句时退出。第86页2.4.5跳转语句异常处理语句:try-catch-finally,throw在进行程序设计时,错误的产生是不可避免得。如何处理错误?把错误交给谁去处理?程序又该如何从错误中恢复?这是任何程序设计语言都必须面对和解决的问题。Java语言中是通过异常(Exception)来处理错误的。将在第7章中详细介绍异常及其处理。第87页2.5数组2026/8/23
*882.5数组在Java语言中,数组是一种最简单的复合数据类型(引用数据类型)。数组是有序数据的集合,数组中的每个元素具有相同的数据类型。可以声明任何类型的数组──原始类型或引用类型。可以象创建对象一样,使用关键字new创建一个数组。可以用一个统一的数组名和下标来唯一地确定数组中的元素,所有数组的下标都从0开始。第89页2.5数组一旦创建以后,数组就有了固定长度。如图所示,数组的长度为10,第一个下标为0,下标为8的元素为第9个元素。
数组元素就是数组中的一个成员,可以通过数组中的位置来访问它。如果需要在一个结构中存储不同类型的数据,或者需要一个长度可以动态改变的结构,可以考虑使用Vector类型而不使用数组。第90页2.5.1创建和使用数组1.声明一个数组
int[]anArray; 2.创建一个数组可使用Java的new运算符来创建一个数组
anArray=newint[10];3.数组初始化程序
boolean[]answers={true,false,true,true,false};4.访问数组元素
anArray[i]=i;5.确定数组的大小
arrayname.length第91页2.5.2对象数组由同类型的对象为数组元素组成的数组称为对象数组。数组可用于保存引用类型的多个对象。例2.13ArrayOfStringsExample.java编写一个程序创建一个包含3个String对象的数组,并且将这3个字符串以小写字母的形式打印出来。第92页2.5.3多维数组Java的二维数组实质上是一维数组的数组,如图所示。这个二维数组可用arrayOfInts.length代表其长度,该长度为一维数组的个数。arrayOfInts[i].length表示第i行子数组的长度。图2.5二维数组结构示意图BreakWithLabelExample.java第93页某个一维数组的长度(可各不相同)二维数组的长度2.6小结Java是一种简单的语言。语言简洁,规模小。在Java的基本语句中取消了其他语言中十分繁琐和难以理解的内容,如C++的指针、运算符重载等。
Java的基本类型同许多语言一致,基本语句在外观上同许多流行的语言非常相像,多少让我们感到有点熟悉和亲切,易于学习。第94页习题1.Java有哪些基本数据类型?描述其分类情况,编写一个简单的程序,各声明一个变量,初始化并输出其值。2.比较break与continue语句的区别。3.编写一个程序,把变量n的初始值设置为1678,然后利用除法运算和取余运算把变量的每位数字都提出来并打印,输出结果为:n=1,6,7,84.编写Java程序,接受用户输入的1~12之间的整数,若不符合条件则重输入,利用switch语句输出对应月份的天数。5.编写Java程序计算一个整数之内的素数并输出。6.Java数组的特点是什么?如何创建和使用对象数组?7.编写Java程序实现:输入一组整数存放在数组中,比较并输出其中的最大值和最小值;再将数组元素从小到大排序并输出。第95页结束第96页
第四章类与对象2026/8/23
*97
本章学习要点全面掌握面向对象的基本特征掌握如何定义一个类以及如何生成对象深入掌握方法的定义及技巧深入掌握类的访问权限与封装机制深入掌握包的定义与包的使用方法
第98页Java是一种纯粹的面向对象的程序设计语言,一个Java程序乃至Java程序内的基本单元都是对象。因此,用Java进行程序设计必须将自己的思想转入到一个面向对象的世界,以对象世界的思维方式来思考问题。编写一个Java程序就是在定义类和创建对象,也就是说定义类和建立对象是Java编程的主要任务。本章和下一章将介绍Java面向对象程序设计基础,即对象、类、子类、超类、接口、包以及类的继承等内容。第99页4.1类的建立Java的类分为两大部分:系统定义的类和用户自定义类。学习Java语言在某种程度上就是在:学习如何定义所需要的类,即学习Java程序的书写规范,熟悉和掌握语法规则;熟悉Java平台定义了哪些经常要用到、而且满足我们需要的类。Java的类库就是系统定义的类,它是系统提供的已实现的标准类的集合,提供了Java程序与运行它的系统软件(Java虚拟机)之间的接口。第100页4.1.1类的概念与定义
用面向对象的观点来看,世界上的一切事物都是对象。而物以“类”聚,所以这些对象可以划分成各种“类”。按照面向对象的观点,一个类分为状态和行为两部分,再加上类名这一部分,可以把一个类的定义分为3个部分:IS,HAS,DOES。其具体含义是:·
IS
说明该类“是”什么样的一个类,即说明类的名字及其性质,如一个类的父类、修饰符等,这一部分称为类声明。·
HAS
说明这个类“有”些什么特征及属性,这些特征和属性用域变量来表示,这一部分统称为成员变量。·
DOES
说明这个类可以“做”什么,即这个类有哪些行为,这些行为用实例方法和类方法描述,这些方法统称为成员方法。第101页4.1.1类的概念与定义IS和HAS部分构成了一个类的状态,DOES就是一个类的行为,行为通过成员方法(MemberMethod)来实现。这样,定义一个类的基本形式为:class类名 //IS{成员变量; //HAS
成员方法; //DOES}在Java中,class是声明一个类的关键字,类名是要声明的类的名字,它必须是一个合法的Java标识符,习惯上用大写字母开头。第102页第103页4.1.2类声明类声明定义了类的名字以及其他的属性,说明该类是(IS)什么样的一个类。一般来说,根据声明的类的需要,类声明可以包含如下3个选项:·声明类的修饰符·说明该类的父类·说明该类所实现的接口第104页[类修饰符]class
类名称[extends
父类名称][implements
接口名称列表]{
变量定义及初始化;方法定义及方法体;}类体,其中定义了该类中所有的变量和该类所支持的方法,分别称为成员变量和成员方法。1.类修饰符第105页类修饰符是下列之一:
[public|
abstract|final]public
该关键字声明的类可以在其他的任何类中使用。默认时,该类只能被同一个程序包中其他的类使用。abstract—抽象类,没有具体对象的概念类,没有具体实现功能,只用于扩展子类。例如:“鸟”,它可以派生出“鸽子”、“燕子”等具体类。final—最终类,表示该类已经非常具体,没有子类可扩展。2.说明一个类的父类第106页在Java中,除Object之外,每个类都有一个父类。Object是Java语言中惟一没有父类的类,如果某个类没有声明父类,Java就认为它是Object的直接子类。因此,所有其他类都是Object的直接子类或间接子类。说明一个类的父类的形式为:class类名extends父类名{……//类体}其中extends子句认为是直接继承其后的父类,因此在类的分级结构中插入这个类。3.说明一个类所实现的接口第107页接口定义了行为的协议,这些行为可以在处于各个层次的任何类中被实现。一个类要实现的一个或多个接口,可以使用关键字implements,并且在其后面给出由该类实现的接口的名字表,接口的名字表是以逗号分隔的多个接口,其形式为:
implementsInterfaces1,Interfaces2,…,Interfacesk;接口可以声明多个方法和变量,但是没有这些方法的具体实现。4.1.3成员变量的声明类成员变量的定义及修饰符第108页[变量修饰符]变量数据类型
变量名1,变量名2[=变量初值]…;变量修饰符:[public|protected|private|package][static][final]public、protected、private为可访问性修饰符static—说明该成员变量是类变量final—
说明为常量使用成员变量的类型可以是Java中任意的数据类型,包括简单类型,类,接口,数组。访问控制符
public: 任何其它类、对象只要可以看到这个类的话,那么它就可以存取变量的数据,或使用方法。Dinner.javaprotected:同一类,同一包可以使用。不同包的类要使用,必须是该类的子类。ChocolateChip.javaprivate: 不允许任何其他类存取和调用。
IceCream.javadefault: (前边没有修饰字的情况)在同一包中出现的类才可以直接使用它的数据和方法.Cake.java第109页访问控制符对公共类的成员变量和成员方法而言,可通过施以一定的访问权限来限定其成员的应用范围,具体范围如下:第110页同一个类中同一个包中不同包中的子类不同包中的非子类private★default★★protected★★★public★★★★访问控制符公共类和非公共类的属性和方法的访问控制表及图示见下图:第111页类变量
属于类的变量和方法——staticstatic在变量或方法之前,表明它们是属于类的,称为类方法(静态方法)或类变量(静态变量)。若无static修饰,则是实例方法和实例变量。类变量在各实例间共享第112页classABCD{chardata;
staticintshare_data;}classDemo{ABCDa,b,c,d;}objectachardataobjectcchardataObjectbchardatastaticintshare_dataobjectdchardata同心圆类变量类变量的生存期不依赖于对象的实例,其它类可以不通过对象实例访问它们。甚至可以在它的类的任何对象创建之前访问。例ch4\Compare_test.java第113页publicclassStaticVar{ publicstaticintnumber=5;}publicclassOtherClass{ publicvoidmethod() { intx=StaticVar.number; }}4.1.4方法的声明与实现第114页
方法是类的动态属性。对象的行为是由它的方法来实现的。一个对象可通过调用另一个对象的方法来访问该对象。与类一样,方法也有两个主要部分:方法首部声明和方法体。方法声明的基本形式为:返回类型方法名(){……//方法体}方法声明方法声明的完整形式:第115页[方法修饰符]返回类型方法名称(参数1,参数2,…)[throwsexceptionList]{…statements; //方法体:方法的内容}方法修饰符[public|protected|private][static][final|abstract][native][synchronized]返回类型可以是任意的Java数据类型,当一个方法不需要返回值时,返回类型为void。参数的类型可以是简单数据类型,也可以是引用数据类型(数组、类或接口),参数传递方式是值传递。方法体是对方法的实现。它包括局部变量的声明以及所有合法的Java指令。局部变量的作用域只在该方法内部。方法的返回类型一个方法必须声明其返回类型,如果无返回值,则必须声明其返回类型为void。当return语句带有返回值时,它与方法定义的返回类型的关系必须符合如下几种情况之一:·当方法声明的返回类型是基本数据类型时,返回值的数据类型必须与返回类型一致。·当方法声明的返回类型是一个类时,返回对象的数据类型必须是与方法声明的返回类相同的类或其子类。·当方法声明的返回类型是一个接口类型时,返回的对象所属的类必须实现这个接口。Length第116页方法名方法名可以是任何合法的Java标识符。(1)方法可以重载Java支持方法名重载,即多个方法可以共享一个名字。(2)重载的方法不一定返回相同的数据类型,但参数必须有所区别:
·
参数的类型不同。例如,doubleIt(intx)和doubleIt(Stringx)方法的两个版本的参数的类型不一样。
·
参数的顺序不同。这里是指一个方法有多个不同类型参数的情况,改变参数的顺序也算是一种区分方法。
·
参数的个数不同。Overload.java第117页方法的参数一个参数是一个方法的变元,它与类的成员变量毫无关系,因此参数名可以和成员变量名相同。如果一个方法的参数名与成员变量名同名,在方法中出现的这个名字指的是参数名,而不是成员变量名。ClassCircle{intx,y,radius;publicCircle(intx,inty,intradius){this.x=x;this.y=y;this.radius=radius;}}第118页方法的参数传递Java的参数传递方式是传递值,也称为“值传递”。第119页参数有两种类型:基本类型的变量名是变量本身;引用类型变量的名字是变量的存储地点。方法的参数传递对于这种值传递方式要区分如下两种情况:(1)当参数变元是一个简单类型时,值传递意味着这个方法不能改变参数变元的值。(2)当参数变元是一个引用类型时,值传递意味着这个方法不能改
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026事业单位工勤技能-山东-山东水文勘测工一级(高级技师)历年参考题库含答案详解3套试卷
- 2026事业单位工勤技能-宁夏-宁夏检验员二级(技师)历年参考题库含答案详解3套试卷
- 2026事业单位工勤技能-天津-天津水文勘测工四级(中级工)历年参考题库含答案详解3套试卷
- 2026事业单位工勤技能-四川-四川水土保持工五级(初级工)历年参考题库含答案详解3套试卷
- 2026事业单位工勤技能-吉林-吉林水工监测工四级(中级工)历年参考题库含答案详解3套试卷
- 2026事业单位工勤技能-内蒙古-内蒙古检验员二级(技师)历年参考题库含答案详解3套试卷
- 2026事业单位工勤技能-上海-上海水利机械运行维护工三级(高级工)历年参考题库含答案详解3套试卷
- 月嫂培训考试试题及答案
- 2026年四川高考语文真题试卷及答案
- 成都天府实验北区2026初一入学语文分班考试真题含答案
- 工序流转卡管理制度
- 医疗质量管理和持续改进记录文本表
- 误伤私了协议书范本
- 护理风险防范管理制度
- 架空线路拆除施工组织设计方案
- 高考物理一轮复习课件开学第一课
- 《无损检测(第2版)》 课件第六章 声发射检测
- (高清版)DZT 0205-1999 地面γ能谱测量技术规程
- 工程冻土研究课件
- 母女三人闹元宵三人混战猜灯谜
- 胰腺癌的教学查房
评论
0/150
提交评论