版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Java语言程序设计(第二版)全套可编辑PPT课件单元一认识Java语言单元二Java基本语法单元三Java面向对象特性单元四Java的异常处理单元五Java的多线程单元六JavaApplet单元七Java的图形用户界面单元八输入输出与文件处理单元九Java数据库编程单元十Java的网络应用模块一认识Java语言全套可编辑PPT课件目录DIRECTORY01Java语言的发展与特点02第一个Java程序全套可编辑PPT课件01Java语言的发展与特点全套可编辑PPT课件学习目标1.能够说出Java语言的发展历程和工作原理;2.能够掌握Java语言的语法机制;3.能够理解Java运行系统与Java虚拟机(JVM);4.能够掌握Java开发环境的安装与配置,简单了解开发工具;5.能够了解Java,激发学习Java语言的兴趣和动力,做一个热爱编程的人。全套可编辑PPT课件一、Java的起源与发展
1991年,美国SunMicrosystems公司的某个研究小组为了能够在消费电子产品上开发应用程序,积极寻找合适的编程语言。BillJoy先生领导的研究小组就着手设计和开发出一种语言,称之为Oak。1995年,互联网在世界上蓬勃发展,Sun公司发现Oak语言所具有的跨平台、面向对象、安全性高等特点非常符合互联网的需要,于是改进了该语言的设计,并给该语言取名为Java语言。(一)Java的起源全套可编辑PPT课件
1995年,美国SunMicrosystems公司正式向IT业界推出了Java语言,该语言具有安全、跨平台、面向对象、简单、适用于网络等显著特点。IBM、Oracle、微软、Netscape、Apple、SGI等大公司纷纷与SunMicrosystems公司签订合同,授权使用Java平台。微软公司总裁比尔·盖茨先生在经过研究后认为:“Java语言是长时间以来最卓越的程序设计语言”。(二)Java的发展二、什么是Java技术Java技术,简而言之就是一种独立于操作系统平台的编程语言与开发平台。S设计目标提供一种易于编程的语言;消除其他语言在诸如指针运算和存储器管理方面影响健壮性的缺陷;利用面向对象的概念使程序真正地成为可视化程序;为使代码尽可能清晰合理、简明流畅提供了一种方法;为获得以下两点益处提供一种解释环境:提高开发速度——消除编译→链接→装载→测试周期、代码可移植性——使操作系统能为运行环境做系统级调用;为运行不止一个活动线程的程序提供了一种方式;通过允许下载代码模块,从而当程序运行时也能动态支持程序改变;为那些保证安全性而装载的代码模块提供了一种检查方法。S开发平台
Java技术给程序员提供了许多工具:编译器、解释器、文档生成器和文件打包工具等等。S程序发布平台有两种主要的“发布环境”。首先Java运行时环境(JavaRuntimeEnvironment,JRE)包含了完整的类文件包,其次许多主要的浏览器都提供了Java解释器和运行时环境。目前Sun公司把Java平台划分成J2SE、J2EE、J2ME三个平台,针对不同的市场目标和设备进行定位。三、Java的语法机制概述(一)Java源程序的组成部分package语句;//该部分至多只有一句,必须放在源程序的第一句import语句;//该部分可以有若干import语句或者没有,必须放在所有的类定义之前publicclassDefinition;//公共类定义部分,至多只有一个公共类的定义//Java语言规定该Java源程序的文件名必须与该公共类名完全一致classDefinition;//类定义部分,可以有0个或者多个类定义interfaceDefinition;//接口定义部分,可以有0个或者多个接口定义如果在源程序中包含有公共类的定义,则该源文件名必须与该公共类的名字完全一致,字母的大小写都必须一样。这是Java语言的一个严格的规定,如果不遵守,在编译时就会出错。在一个Java源程序中至多只能有一个公共类的定义。如果源程序中不包含公共类的定义,则该文件名可以任意取名。如果在一个源程序中有多个类定义,则在编译时将为每个类生成一个.class文件。(二)源文件的命名规则(三)注释
为了方便他人理解程序中的某个变量、方法或者类对象的定义,提高程序的可读性,程序中往往需要编写注释。注释有以下三种形式:
(1)单行注释,以“//”开始,该行后面的内容都会成为注释,可以放在语句开头或者注释掉该行或者放在语句结尾对该句进行注解。(2)多行注释,以“/*”开始,“*/”结束。(3)文档注释,以“/**”开始,“*/”结束。Java的运行系统是一个完整、有机的程序设计系统,其功能主要由JVM、JDK以及开发平台组成。四、Java运行系统与JVM(一)Java虚拟机——JVM
JVM(JavaVirtualMachine),Java虚拟机,是软件模拟的计算机,可以在任何处理器上(无论是在计算机中还是在其他电子设备中)安全并且兼容的执行保存在.class文件中的字节码。Java虚拟机的“机器码”保存在.class文件中,也可以称之为字节码文件。。213指令集(相当于中央处理器CPU)(二)JVM的组成注册集类文件格式456栈垃圾收集堆存储区在C++语言中是由程序员进行内存回收的,程序员需要在编写程序的时候把不再使用的对象内存释放掉;但是这种人为的管理内存释放的方法却往往由于程序员的疏忽而致使内存无法回收,同时也增加了程序员的工作量。而在Java运行环境中,始终存在着一个系统级的线程,专门跟踪内存的使用情况,定期检测出不再使用的内存,并进行自动回收,避免了内存的泄露,也减轻了程序员的工作量。(三)垃圾自动回收机制(四)代码安全性检查机制
字节码的执行需要经过三个步骤,首先由类装载器(classloader)负责把类文件(.class文件)加载到Java虚拟机中,在此过程需要检验该类文件是否符合类文件规范;其次字节码校验器(bytecodeverifier)检查该类文件的代码中是否存在着某些非法操作;如果字节码校验器检验通过,由Java解释器负责把该类文件解释成为机器码进行执行。Java虚拟机采用的是“沙箱”运行模式,即把Java程序的代码和数据都限制在一定内存空间里执行,不允许程序访问该内存空间外的内存,如果是Applet程序,还不允许访问客户端机器的文件系统。五、Java程序开发(一)JDK的安装和配置1.下载并安装JDK
Java开发工具包(JavaDevelopmentKits,简称JDK)是Java应用程序开发的基础工具包,开发Java应用程序首先必须下载JDK(JDK可以从Oracle公司的官方网站上下载)。下载完成后,双击图标进行安装,安装过程中可以自定义安装目录等信息。2.认识JDK
在安装完成后,可以发现在安装目录下具有bin、include、jre、lib、sample、demo等文件夹。3.配置JDK环境变量
(1)右击“此电脑”,如图1-2所示,选择“属性”命令。(2)切换到“系统”窗口,如图1-3所示,单击“高级系统设置”。(3)切换到“系统属性”窗口,单击“高级”选项卡,如图1-4所示,单击“环境变量”按钮。(4)切换到“环境变量”对话框,如图1-5所示,在“系统变量”中选择变量“path”,然后单击“编辑”按钮。(5)切换到“编辑环境变量”窗口,如图1-6所示,点击“编辑”或“新建”按钮,添加路径C:\ProgramFiles(x86)\Java\jdk1.8.0_144\bin”,这样使得系统可以在任何路径下识别Java命令。(6)在步骤(4)中,在“用户变量”中单击“新建”,如图1-7所示,在变量名中输入“classpath”,在变量值中输入“.”,classpath为java加载类(class或lib)路径,只有类在classpath中,java命令才能识别,设为“.”表示当前路径,然后单击“确定”按钮。(二)Eclipse简介1.Eclipse简介
为了提高程序的开发效率,大部分软件开发人员都是使用集成开发工具(IntegratedDevelopmentEnvironment,IDE)来进行Java程序开发的。常用的Java的IDE主要有:JCreater,JBuilder,Eclipse等。其中Eclipse是IBM花费巨资开发的一款功能完整且成熟的IDE集成开发环境。它是一个开源的,基于Java的可扩展开发平台,是目前最流行的Java语言开发工具。Eclipse具有强大的代码编排功能。可以帮助程序开发人员完成语法修正、代码修正、补全文字信息提示等编码工作。大大提高了程序开发的效率。2.下载并安装Eclipse
最新版本的EclipseIDE可以从它的官方网站上下载,如图1-8所示。下载后安装Eclipse之前必须保证已安装恰当的JDK。Eclipse是一个绿色软件,无须安装即可执行。02第一个Java程序(1)(2)(3)(4)任务目标能够了解Java程序分为两类;能够掌握Java标准库中System对象的多种方法;能够编写最简单的“字符串输出”程序,掌握编写、编译、运行Java程序的基本方法。4.能够养成良好的编程习惯,促进对编程的理解,具备初步的编程思维。Java程序分为JavaApplication(Java应用程序)和JavaApplet(Java小应用程序)两种。Java程序分为JavaApplication(Java应用程序)和JavaApplet(Java小应用程序)两种。
Java程序分为JavaApplication(Java应用程序)和JavaApplet(Java小应用程序)两种。Java的基本语法:(1)Java中的程序代码可分为结构定义语句和功能执行语句,其中,结构定义语句用于声明一个类或者方法,功能执行语句用于实现具体的功能,每条功能执行语句的最后都必须用分号(;)结束。(2)虽然Java没有严格要求用什么样的格式来编排程序代码,但是,出于可读性的考虑。应该让自己编写的程序代码整齐美观,层次清晰。以下两种方法都可以,但是建议使用后一种。(3)Java程序中,一句连续的字符串儿不能分开在两行中书写。任务实施/*源程序文件名:Ex0101.Java*/importjava.util.Date;importjava.util.Properties;publicclassEx0101{//创建公共类,名为Ex0101publicstaticvoidmain(Stringargs[]){System.out.println(newDate());Propertiesp=System.getProperties();p.list(System.out);System.out.println("MemoryUsage:");Runtimert=Runtime.getRuntime();System.out.println("TotalMemory="+rt.totalMemory()+"FreeMemory="+rt.freeMemory());//打印总内存大小,打印空闲内存大小}}程序运行结果如图1-9所示THANKSForYourWatchingJava语言程序设计(第二版)模块二Java基本语法目录DIRECTORY01常量和变量02算数表达式与赋值表达式03条件判断05流程控制语句06数组07字符串04数据类型的转换01常量和变量任务目标1.能够正确区分程序中的变量和常量;2.能够为程序中的变量定义合理的数据类型和初始化,理解变量的作用域;3.能够遵循变量的命名规则,并能为变量取一个正确且合理的名字;4.具备“无规矩不成方圆”的意识,做一个做遵纪守法的人。一、常量
在程序运行的过程中,其值不可改变的量称为常量。Java语言中的常量有两种类型:一种称为直接常量,也叫值常量,如23、-65、3.14;另一种称为符号常量,符号常量需要明确定义。(一)直接常量整型常量(byte、short、int、long)浮点型(实型)常量(float、double)字符型常量(char)布尔型常量(boolean)1.整型常量(byte、short、int、long)
整型常量又称整数,可以用来给整型变量赋值,整数可以使用十进制、八进制、十六进制形式来表示,如表2-1所示。2.浮点型(实型)常量(float、double)数值后面加上f或F表示float型浮点数,占4个字节。数值后面加上d或D表示double型浮点数,若没有则默认为double型,占8个字节。3.字符型常量(char)
字符型常量是无符号常量,占2个字节,表示的字符范围为0~65535。Java中的字符采用国际标准Unicode编码,它所包含的信息量远远多于8位的ASCII编码。计算机在处理时把这些字符当作不同的整数对待(十六进制编码\u000~\uffff)。采用Unicode(标准万国码)编码格式,为了避免各国在编码过程中使用的冲突产生。
字符型常量分为一般字符常量和转义字符常量。对于可输入字符,用单引号括起来,如‘a’、‘A’、‘计’等。对于不可输入字符,以反斜杠“\”开头的字符序列表示,称为“转义字符”,用于表示unicode字符集内的控制代码和某些功能定义。4.布尔型常量(boolean)
布尔型常量只有两个值:true和false,分别代表布尔逻辑中的“真”和“假”。必须小写。在Java语言中布尔常量不能转换成任何其他数据类型,true常量不等于1,而false常量也不等于0。(二)符号常量
Java中使用final关键字来定义符号常量,如下所示:finaldoublePI=3.1415926;符号常量可以是任何类型,定义符号常量时必须要初始化。符号常量通常要用大写字母来表示。若常量名有两个或两个以上单词组成,则单词间用下划线连接,例如:finalintMAX_SCORE=100;符号常量实际上是一种特殊变量,也是占用内存空间的,不同于C语言中的宏。二、变量
变量是指在程序运行过程中其值可以被改变的量,变量主要用于保存输入、输出和程序运行过程中的中间数据,可以理解为保存数据的容器(即存储单元)。要使用一个变量,必须先声明变量的名字、类型等特征,并对其进行初始化后才能使用它。简单变量的声明和初始化格式如下:typename=value;(一)数据类型整型数据有byte(字节型)、short(短整型)、int(标准型)和long(长整型)四种。byte:以1个字节存储的整型数。short:以2个字节存储的整型数。int:常使用的整数类型,以4个字节存储的整型数。long:以8个字节存储的整型数。声明为long类型的整数值后需要加上“L”或“l”。以上四种数据类型的声明用法如下:byteb=0x1f;//指定变量b为byte型十六进制整数shorts=16;//指定变量s为short型十进制整数inti=123;//指定变量i为int型十进制整数longl=123L;//指定变量l为long型十进制整数1.整型数据2.浮点型(实型)数据浮点型有float(单精度类型)和double(双精度类型)两种。double类型比float类型具有更高的精度和更大的表示范围。float:以4个字节存储的浮点型数。声明为float类型的数值后需要加上“F”或“f”。double:以8个字节存储的浮点型数。声明为double类型的数值后需要加上“D”或“d”,也可以省略不加。以上两种数据类型的声明用法如下:doubled=3.1415926;//指定变量d为double型doubled=3.1415926d(D);//指定变量d为double型floatf=3.1415926F;//指定变量f为float型3.字符型数据字符型变量的声明用法如下:charc='a';//指定变量c为字符型,且初始值为字符'a'chard='\u0061';/*指定变量d为字符型,且初始值为Unicode编码为十六进制整数0061(十进制97)的字符'a'*/4.布尔型数据
Boolean(布尔型)数据类型只有两个值:true和false,分别代表布尔逻辑中的“真”和“假”。在Java语言中布尔常量不能转换成任何其他数据类型,true常量不等于1,而false常量也不等于0。布尔类型的数据一般在if,while,do,for或三元运算符?:环境下使用。booleanx=true;//指定变量c为布尔型,且初始值为布尔值true(二)标识符
标识符用于对变量、常量、类、接口和方法命名。标识符是除关键字外的任意一串以合法字母、下划线(_)或美元符号($)开头的,由合法字母、数字、下划线(_)和美元符号($)组成的字符串。Java标识符命名规则如下:(1)标识符必须以字母、下划线(_)或美元符号($)开头;(2)Java中合法字母除大小写的英文字母外,还包括Unicode字符集里位置在00C0以前的字符(如中文字符、日文字符、阿拉伯字符等);(3)Java的关键字(表2-4)不能用作标识符;(4)保留字是为以后Java语言扩展使用的,保留字不是关键字,也不能用作标识符。如true、false、null等;(5)Java是严格区分大小写的语言,First和first分别代表的是两个不同的标识符;(6)一般标识符用大写字母开头。同一个标识符中,中间的单词以大写字母开头,或用下划线进行分割;(7)标识符应在一定程度上反映它所表示的变量、常量、对象接口或类的意义。Java标识符命名规范:(1)尽量能够见名知意,用单词命名,不用中文字符。(2)通常不限制字符数,但是太长没有意义。(3)包名:包名是全小写的单词,中间由“.”分隔开,(4)类名:通常由多个单词组成,要求每个单词的首字母都要大写,例如:HelloWorldApp。(5)方法名:往往由多个单词组成,第一个单词通常为动词,首字母小写,其后的每个单词的首字母都要大写,例如:balanceAccount、isButtonPressed。(6)抽象类的命名:通常在表示意义的词组前加Abs,接口的命名规则跟类名类似,只是通常在前面加I(大写的i),接口的实现类通常在后加Impl(第一个是大写的i,第4个是小写的L)。(7)变量名通常是名词,全部小写,例如:length。(8)常量的命名全部大写,单词与单词间用下划线_分隔,例如:YEAR,WEEK_OF_MONTH;如果是对象类型的常量,则是大小写混合,由大写字母把单词隔开。(三)变量的作用域
变量经过声明和初始化后就可以使用了,但并不是一个变量声明和初始化后就可以随便在哪里都能使用,这里涉及一个作用域的问题。变量的作用域就是该变量能被访问的区间,在程序源代码中通常以程序段来划分。在本任务中,定义了二个变量:fr和farea,由于这二个变量都是在main方法中定义的,所以它们的作用域就是整个main方法。也就是说,在main方法中的任何地方,都可以访问到这二个变量的值。02算数表达式与赋值表达式能够正确书写并使用Java的算术运算符与算术表达式;能够正确书写Java的赋值运算符与赋值表达式;能够把“小事”做细,树立“细节决定成败”的意识,做一个做事严谨的人。任务目标一、算术运算符与算术表达式(一)算术运算符算术运算符用于完成算术运算。Java提供了两大类共八个算术运算符。双目运算符单目运算符1.双目运算符双目运算符是有两个操作数的运算符,Java中有五个双目算术运算符。
其中加法(+)运算符除能对数值进行加法运算操作外,还可以用来实现字符串的连接,比如下面的语句:System.out.println("abc"+"de");就将输出字符串“abcde”。另外,与C、C++不同,取余(%)运算的操作数不但可以是整数也可以是浮点数,例如:整数%整数,结果是整数,如12%5=2;浮点数%整数,结果是浮点数,如12.3%6=0.3;整数%浮点数,结果是浮点数,如19%6.7=5.6;浮点数%浮点数,结果是浮点数,如18.6%6.7=5.200000000000001。2.单目运算符单目运算符是只有一个操作数的运算符,Java中有四个单目算术运算符。需要注意的是自增(++)和自减(--)运算符在做前缀和后缀使用时是有区别的。分析下列程序的输出结果,注意其中前置运算和后置运算的区别。publicclassExam{publicstaticvoidmain(Stringargs[]){inti,x,y;i=5;x=i++;/*后置运算,先把i的值赋给x,然后i的值加1*/System.out.println("i=%d,x=%d\n",i,x);i=5;y=++i;/*前置运算,先使i的值加1,然后将i的值赋给y*/System.out.println("i=%d,y=%d\n",i,y);}}程序运行结果如下所示。i=6,x=5i=6,y=6(二)算术表达式
用算术运算符或圆括号将运算对象(也称操作数)连接起来的、符合C语法规则的式子,称为C的算术表达式。运算对象包括常量、变量、函数等。算术表达式在使用时要注意书写形式。二、赋值运算符与赋值表达式(一)简单赋值运算符
赋值运算符“=”用于将运算符右边表达式的值赋给左边的变量,如“x=5”是把量5赋给变量x。由赋值运算符将一个变量和一个表达式连接起来的式子称为“赋值表达式”。它的基本使用格式如下:变量=表达式;(二)复合赋值运算符
除基本赋值运算符外,Java还提供了一系列复合赋值运算符(快捷赋值运算符),用于在一个运算符里同时完成赋值操作和另一个算术、移位或按位操作。例如:i=i+j;可以使用快捷赋值运算符“+=”:i+=j;赋值运算符和复合赋值运算符的优先级高于逗号运算符,结合方向均为“从右到左”。(三)赋值表达式
(1)赋值运算符的左边必须是变量名,被赋值变量的值就是赋值表达式的值。(2)当赋值表达式中左边的变量与右边的表达式的数据类型不同时,需要进行类型转换。转换的规则是:右边表达式的值被转换成左边变量的数据类型,然后再赋值给变量。(3)赋值表达式也可以包含复合的赋值运算符。例如:a+=a-=a*a如果a的初值为8,此赋值表达式的求解步骤如下:①先进行“a-=a*a”的运算,它相当于a=a-a*a=8-64=-56。②再进行“a+=-56”的运算,它相当于a=a+(-56)=-56-56=-112。03条件判断任务目标1.能够正确书写Java的关系表达式和逻辑表达式,为选择结构程序设计打好基础;2.会计算关系表达式和逻辑表达式的值;3.能够变“抽象”为“具体”,具有举一反三、自己获取知识的能力。一、关系运算符和关系表达式(一)关系运算符
关系运算符用来比较两个操作数的值,其运算结果是布尔型值true或false。关系运算符都是双目运算符,Java语言一共提供了6个关系运算符。
Java中任何类型的数据(包括基本类型和构造类型)都可以使用==和!=来比较是否相等。关系运算符常与条件运算符一起使用,作为流程控制语句的判断条件。使用关系运算符时,应注意其优先级。(1)“<”“<=”“>”“>=”这四个运算符的优先级相同,“==”和“!=”的优先级相同。前4个运算符的优先级高于后两个运算符的优先级。(2)关系运算符的优先级低于算术运算符而高于赋值运算符。它们的结合性是“自左至右”。例如:a!=b+c等价于a!=(b+c);a=b>c等价于a=(b>c)。(二)关系表达式
关系表达式就是用关系运算符将两个或两个以上运算对象连接起来的式子。其中,运算对象可以是常量、变量或表达式。关系表达式的运算结果有两种:“真”或“假”。在Java语言中用true表示“真”,用false表示“假”。例如:3*5>6*2,表达式的执行结果为true。二、逻辑运算符和逻辑表达式(一)逻辑运算符逻辑运算符用来进行逻辑运算,操作数类型是布尔型数据,运算结果也是布尔型。使用逻辑运算符时,应注意它的优先级和结合性。(1)逻辑运算符从高到低的优先次序为:!(逻辑非)→&&(逻辑与)→||(逻辑或)。(2)逻辑非“!”的结合方向是“自右至左”,逻辑与“&&”和逻辑或“||”的结合方向是“自左至右”。(3)常见运算符的优先次序如图2-2所示。(二)逻辑表达式
用逻辑运算符将关系表达式或逻辑量连接起来的式子称为逻辑表达式。逻辑表达式的值也有两种,即“真”和“假”。有一点需要指出,在逻辑表达式的求值过程中,存在“短路”行为。(1)在求解a&&b&&c的值时,只有a的值是真时,才会计算b的值;只有a和b均为真时,才会计算c的值。如果a为假,则整个表达式的值已经确定为假,就不会继续计算b和c的值。(2)在求解a||b||c的值时,只有a为假时,才会计算b的值;只有a和b均为假时,才会计算c的值。如果a是真,则整个表达式的值已经确定为真,就不会计算b和c的值。三、位运算符(一)按位运算符按位运算符包括有四种,其使用方法和功能如表2-11所示。逻辑与、或和按位与、或的比较相同点:都能参与逻辑运算,按位与或完全可以替代逻辑与或。区别:按位与或可以参与位运算,逻辑与或只能参与逻辑运算;逻辑与或可以“短路”,按位与或不能“短路”。逻辑与的短路操作,先计算左边的操作数,如果左操作数为false,此时已经可以得到整个表达式的值为false,则不会计算右操作数;例如:a>b&&c<d一旦a>b为假,c<d不再计算。逻辑或的短路操作,先计算左边的操作数,如果左操作数为true,此时已经可以得到整个表达式的值为true,则不会计算右操作数;例如:a>b||c<d一旦a>b为真,c<d不再计算。(二)移位运算符移位运算符包括三种,其使用方法和功能如表2-12所示。
移位运算适用数据类型:byte、short、char、int、long对低于int型的操作数将先自动转换为int型再移位。四、其他运算符(1)“?:”运算符是唯一的一个三元运算符,它的形式为:a?b:c程序运行时先判断a,如果a为true,则返回b的值,否则返回c的值。例如:inta,b=5,c=7;a=(b>c)?b:c;//a值为7可见,利用第二条语句可以自动判断b和c的大小,并返回其中较大的值。(2)“[]”运算符用来定义数组,创建数组,或访问数组元素。例如:int[]aValue=newint[12];aValue[3]=12;(3)“.”运算符用来访问对象的成员函数或成员变量。(4)“(参数1,参数2,……)”运算符用于向方法中传递参数,这部分内容也将在下一单元说明。(5)“(变量类型)”,将在本单元任务4中介绍。(6)“instanceof”运算符的用法为:ainstanceofb其中a是对象名,b是类名。如果对象a是b类或其直接或间接子类的实例,则该表达式返回true;如果对象a是b类或其直接或间接父类的实例,则表达式返回false。对象与继承的概念,在下一单元中说明。五、运算符的优先级
对于包含多个运算符的表达式,计算时必须遵循一定的先后次序。Java中所有运算符的优先次序如表2-14所示。对于相同优先级的运算符,Java采用从左到右的次序,但赋值运算是从右到左的。04数据类型的转换任务目标1.能够正确描述Java的编译系统对不同类型数据进行运算时的转换规则;2.能够根据编程需要进行强制类型转换;3.能够领会“变则通,通则存,存则强”的精髓,拒绝做一个墨守成规的人。
赋值运算的基本要求是运算符左右两边的数据类型必须一致,如果遇到赋值号两边的数据类型不一致的情况,就需要把右边的数据类型转换成左边的数据类型。通常情况下,如果类型不一致,需要程序员在程序中进行强制类型转换,在某些特殊情况下,Java也可以自动进行类型转换。(一)强制类型转换
强制类型转换也叫显式转换,它的一般格式是:(数据类型)变量名或表达式由于不同数据类型所占用的存储空间不同,转换后可能丢失信息,所以当较长的数据类型转换为较短的数据类型时必须使用强制类型转换,程序员需要自己确保数据在类型转换后的有效性。请看下列语句:inti;longl=0xFFFFFFFFFFL;doubled=12.34;i=(int)l;//将l转换成int类型,有可能丢失信息。i=(int)d;//将d转换成int类型,有可能丢失信息。l=(long)i;//将i转换成long类型,不会丢失信息。(二)自动类型转换
当赋值运算符左右两边数据类型不一致,且右边的数据类型存储长度小于等于左边的数据类型,即转换后不会丢失信息的情况下,Java可以自动完成数据类型的转换。shorts=10;inti=100;floatf;longl;doubled;f=i;//i自动转换成float类型。l=i;//i自动转换为long类型。d=i;//i自动转换为double类型。i=s;//s自动转换为int类型。s=i;//i不能自动转换为short类型。
简单类型除了boolean类型以外,其他的数据类型可以自动转换成其他的数据类型,要遵循的原则如图2-3所示。05流程控制语句1、能正确掌握Java的分支语句的写法,根据编程需要编写选择结构程序;任务目标2、能正确掌握Java的循环语句的写法,根据编程需要编写循环结构程序;3.能正确掌握break语句和continue语句的写法,根据编程需要应用;4、不但能灵活运行知识,也懂得按“规矩”办事。一、条件分支(一)if语句if语句是最基本的分支控制语句,它可以让程序根据某些条件选择性地执行语句。if语句的形式如下:if(关系表达式){语句}它的含义是:如果关系表达式的值为true,则执行后面大括号里的语句,否则就不执行大括号里的语句。例如,假设程序要判断字符变量iChar中保存的是不是字符“q”,可以使用这样的语句:if(iChar=='q'||iChar=='Q'){System.out.println("是Q。");}
当字符iChar的值是字母q(不管是大写还是小写)时,关系表达式的值为true,因此执行大括号里的语句,即输出“是Q。”这样一条信息。如果iChar的值不是字母q,则不会显示这条信息。需要注意的是,在上面的程序中,大括号里只有一条语句,因此可以省略大括号,将程序简化为:if(iChar=='q'||iChar=='Q')System.out.println("是Q。");但如果有两条或以上的语句,则必须用大括号括起来。(二)if…else语句
有时,程序需要控制当条件满足和不满足时分别执行不同的语句,这时可以使用if…else语句,通过判断一个条件,可以决定程序到底执行哪些语句。if…else语句的形式如下:if(关系表达式){语句1}else{语句2}
它的含义是:如果关系表达式的值为true,则执行后面大括号里的语句1,否则执行大括号里的语句2。语句1和语句2总会有一个被执行。语句1和语句2都可以是多行,如果只有一行,则相应的括号可以省略。
例如,假设程序要判断字符变量iChar中保存的是不是字符“q”,可以使用这样的语句:if(iChar=='q'||iChar=='Q'){System.out.println("是Q。");}else{System.out.println("不是Q。");}当字符iChar的值是字母q(不管是大写还是小写)时,关系表达式的值为true,则执行语句1,即输出“是Q。”。如果iChar的值不是字母q,则执行语句2,即输出“不是Q。”(三)if…else嵌套
如果我们的程序需要有两个以上的分支,那么单纯的if…else结构就不能满足需要了,这时可以使用嵌套的if…else结构。例如:判断变量a的值是正数、负数还是零,那么相应的代码就应该是:if(a>0){System.out.println("a的值大于零。");}elseif(a<0){System.out.println("a的值小于零。");}else{System.out.println("a的值等于零。");}
这里出现了elseif语句,它实际上是在else语句后面接了另一个完整的if...else结构。由于一个if...else结构算是一条语句,所以else和if之间没有大括号,我们也完全可以在else和if之间加上大括号,这样更容易理解:if(a>0){System.out.println("a的值大于零。");}else{if(a<0){System.out.println("a的值小于零。");}else{System.out.println("a的值等于零。");}}这种if...else的嵌套结构让程序有了三种分支选择,如果需要有更多的选择,也可以使用更复杂的嵌套结构,形成if...elseif...elseif...else结构。(四)switch语句switch语句用于处理多分支选择,它的一般形式是:switch(intVar){caseVar1:语句1;break;caseVar2:语句2;break;caseVarn:语句n;break;default:语句n+1;}
intVar的最终值的类型必须是整型或能自动转换成整型的类型,如字节型、短整型、字符型、整型、枚举(JDK1.5引入)、字符串(JDK1.7引入)。
if语句(包括if...else和if...else嵌套)和switch语句是Java语言提供的两种分支选择语句,它们有各自的特点和适用范围。if语句的适用性更强,所有的分支选择都可以使用if语句(包括if...else和if...else嵌套)来完成,但多重的if...else嵌套将严重降低程序的可读性;switch语句的可读性比多重if...else嵌套要好得多,但它又只能对整型量进行判断。所以在编写程序的时候,应当根据具体情况来选择使用何种分支选择语句。二、循环
程序设计中有时需要将一段代码反复执行,这时就需要用到循环控制语句。使用循环控制语句可以提高代码的使用率,减轻程序员负担,增加程序运行效率,让我们用很简洁的语句完成重复的、复杂的操作。(一)while循环while语句实现“当”型循环,即先判断循环条件,如果条件满足,则执行循环体,否则就结束循环。while语句的一般格式如下:while(条件表达式){循环体}while语句通常用于循环次数未知或不方便计算,而使用某种条件来判断循环是否结束的情况。由于while语句是在执行循环体之前先判断循环条件,所以循环体有可能不会被执行。例如:inti=1;while(i<=9){System.out.println(i+"×9="+i*9);i++;}(二)do...while循环
do...while语句的判断过程与while语句正好相反,它是先执行循环体,再进行判断以决定是否进行下一次循环。do...while语句的一般格式如下:do{循环体}while(条件表达式);与while语句的循环体有可能不被执行不同,do...while语句的循环体至少会被执行一次。在大多数情况下,for语句、while语句和do...while语句都可以相互替换,实现同样的功能,但由于while语句和do...while语句的细微差别,所以不是所有使用while语句的情况都可以用do...while语句替换的,这一点一定要注意。同样,我们可以用do...while语句改写上面的代码:inti=1;do{System.out.println(i+"×9="+i*9);i++;}while(i<=9);也可以完成同样的操作。(三)for循环
for语句是最常用的一种循环控制语句,它通常用于循环次数已知的情况。for语句的一般格式如下:for(初始化表达式;循环条件表达式;迭代表达式){循环体}for语句在运行时,首先执行初始化表达式,对循环控制变量和相关的其他变量进行定义和初始化。接下来判断循环条件,如果条件满足,就执行循环体内的语句,否则就结束循环。循环体执行完后,计算迭代表达式,这里通常是对循环控制变量进行增减,以达到控制循环次数的目的。然后再次判断循环条件,一直到循环条件表达式的值为false,结束循环。
关于for语句,还有两点需要注意:(1)初始化表达式和迭代表达式中可以使用逗号分隔多个语句,例如:for(i=0,j=10;i<10;i++,j--){...}(2)初始化表达式、循环条件表达式、迭代表达式和循环体都可以为空(但分号不能省略),当四者都为空时,相当于一个无限循环,当然在编程时应该尽量避免这种情况。三、中断控制语句
在一些循环结构中,可能遇到某种情况,需要中止循环,但Java没有提供goto语句,不能使用直接跳转语句跳出循环,但是Java针对这种情况,提供了break、continue和return语句,用于不同情况下的中断控制。(一)break语句
在switch语句中,break用来终止switch语句的执行,程序流程转到switch语句块后的第一条语句。同样在循环语句for、while和do…while中,break将立即终止正在执行的循环,程序流程转到循环语句后的第一条语句。如果break后面有标号,会终止标号的循环体。(二)continue语句
continue语句只能用在循环语句中,它有两种使用格式。一种是不带标号的continue语句,它的作用是终止当前这次循环,继续下一次循环。另一种是带标号的continue语句,其格式是:continue标号名。它的作用是终止标号名对应循环的当前这次循环,继续标号名对应循环的下一次循环。(三)return语句return语句从当前函数中返回到调用该函数的语句处,并继续执行后面的语句(有关函数的内容将在单元三中介绍)。return语句有两种格式:return表达式;和return;第一种格式是返回一个值给调用该函数的语句。返回值的类型必须与函数声明中的返回值类型一致。第二种格式是直接结束函数的运行,不返回任何值,相应的该函数的返回值类型应该为void。return语句通常用在一个函数体的最后,退出该函数并返回一个值。单独的return语句用在一个函数体的中间时,会产生编译错误,因为此时会有一些语句不会被执行。可以通过把return语句嵌入到某些语句(如if…else)中,来让程序在没有执行完函数中的所有语句时退出。06数组任务目标1.能够掌握一维数组的定义和使用,根据编程需要灵活使用一维数组;2.能够掌握多维数组的定义和使用,主要是二维数组;根据编程需要灵活使用二维数组;3.做一个有“组织”的数据,方便组织统一管理。一、一维数组(一)一维数组的声明
一维数组的声明方式有两种:数据类型[]数组名;数据类型数组名[];数据类型可以是Java中的任意数据类型,数组名应为一个合法的标识符,[]指明这是一个数组。这两种定义没有任何区别,大家可以根据自己的习惯选用。(二)一维数组的初始化
在使用已经声明好的数组之前,需要对其进行初始化操作,即为数组分配内存空间,并为每个数组元素设置一个默认的初始化值。这里需要使用到运算符new,其格式如下:数组名=new数据类型[数组长度]通常可以将数组的声明和初始化操作合为一步完成,例如:intMyArray[]=newint[10];这里声明了一个整型数组MyArray,并指定它的长度为10,同时分配一块内存空间,供数组使用,其元素个数为10。且此时数组中每个元素的值为int类型的默认初始值0。数组在创建时,每个元素都有相同的默认值。不同类型数组的默认值如表2-15所示。另外,还可以在数组声明时为数组元素定义另外的初始值。(三)一维数组的使用
可以通过下面的格式访问数组中的任意一个元素:数组名[下标]前面我们知道了,Java中数组的下标是从0开始的,最大到数组长度减1。另外,Java要对数组元素进行越界检查以确保程序的安全性,如果发现下标越界,程序会抛出ArrayIndexOutOfBoundsException异常。二、多维数组的使用
Java中的多维数组可以看作数组的数组。例如对二维数组而言,其本身是一个一维数组,数组中的每一个元素又是一个一维数组。(一)二维数组的声明
二维数组的声明方式为:数据类型数组名[][];与一维数组一样,这时的数组元素也没有分配内存空间,同样要对数组进行初始化后,才能够访问数组中的每一个元素。(二)二维数组的初始化
对二维数组来说,分配内存空间有两种方法。一种是直接分配,即一次性指定两个维数上的长度,另一种是在一维数组的基础上,为第二维分配空间。第一种intbuffer[][]=newint[3][4];第二种inta[][]=newint[3][];a[0]=newint[3];a[1]=newint[4];a[2]=newint[5];int[][]allRecord={{70,85},{59,65},{59,60},{90,95},{65,50},{50,50}};(三)二维数组的使用
同一维数组类似,可以通过给出二维数组的两个下标来访问数组中的元素。与一维数组类似,多维数组通常也和for循环配合使用,以访问多维数组中的每一个元素,只是根据数组维数的多少,而使用多重循环来达到目的。多维数组的定义和使用与一维数组基本一致,只是由于多维数组的复杂性,在使用过程中要多加注意。07字符串1.能够掌握Java中String类和StringBuffer类的区别;2.能够掌握Java中String类的使用方法;3.能够掌握Java中StringBuffer类的使用方法;4.能够理解String的“墨守成规”和StringBuffer的“灵活多变”。任务目标一、String类
String类封装了有关字符串的操作。这里的字符串是常量,即创建后就不可进行更改和变动。程序中只做字符串的比较、查找等操作时,通常使用String类,如果需要进行大量的字符串操作,应当使用StringBuffer类或字符数组,最终结果可以转换为String格式。(一)String类对象的创建使用String类的构造函数是创建String对象的一种重要方法。
除了使用以上构造函数之外,也可以使用更为熟悉的方式来定义字符串对象,例如:Strings1="Hello,World!";这种方式其实是Strings1=newString(“Hello,World!”)的简化,为了兼容其他程序设计语言的编程习惯,Java允许这样使用。(二)String类对象的基本操作二、StringBuffer类
String对象是一个常量,创建之后不能更改它的内容。而StringBuffer对象则相反,由于使用了缓冲区技术,可以很方便地修改StringBuffer对象的具体内容,这是它和String对象本质上的区别。缓冲区字符串类StringBuffer与String类相似,它具有String类的很多功能,甚至更丰富。它们主要的区别在于StringBuffer类可以方便地在缓冲区内被修改,如增加、替换字符或字符串。StringBuffer对象可以根据需要自动增加存储空间,所以特别适合处理可变字符串。当完成操作后,可以使用StringBuffer.toString()方法或String类的构造函数将其转换为String类型。(一)StringBuffer类对象的创建通常情况下,使用StringBuffer的构造函数来创建StringBuffer对象。(二)StringBuffer类对象的基本操作
很多String类的方法,对StringBuffer类也同样适用。另外,StringBuffer类还有一些独有的方法。(三)StringBuffer类和String类的区别
String类是常量类型,在对String类的对象进行操作后,并没有改变这个字符串的内容,StringBuffer类是变量类型,在对StringBuffer类的对象进行操作时,是直接在原有字符串的内容上进行更改。String对象在进行操作时,生成了一个新的String对象,原有的字符串不会发生改变;而StringBuffer对象在进行操作时,是在原有的字符串上进行操作,不会产生新对象,而是改变原有的字符串的内容。这是String类和StringBuffer类的最大也是最根本的区别。THANKSForYourWatchingJava语言程序设计(第二版)目录DIRECTORY01类的定义06抽象类02创建和使用对象07多态03Static修饰符08接口04类的封装09包05继承01类的定义运用态度认识学习目标1.能够理解面向对象编程的思想;2.能够理解类和对象的概念;3.能够掌握使用Java语言定义类的规则与方法;
4.能够掌握封装的概念,知道封装就是把数据和方法“保护”起来,能够对现实环境进行总结、抽象、加工,再描绘出它的模型。一、面向对象程序设计方法概述面向对象程序设计方法是相对过去传统的结构化编程方法而言的,这种方法是首先对现实环境进行总结、抽象、加工,再描绘出它的模型,使用对象、类、继承、封装、消息等基本概念来进行程序设计。从现实世界中客观存在的事物(即对象)出发来构造软件系统,并且在系统构造中尽可能运用人类的自然思维方式。然后用Java语言将其表述出。二、类的定义类是一组具有共同特性的所有对象成员的抽象描述。就如同“汽车”这个概念一样,它能被看作是一个类,那么我们怎样来描述“汽车”的呢?请看表3-1。(一)类的概念类是Java中的一种重要的复合数据类型,是组成Java程序的基本要素。它封装了一类对象的状态和方法,是这一类对象的原形型。一个类的实现包括两个部分:类声明和类体。(二)类的声明[public][abstract|final]classclassName[extendssuperclassName][implementsinterfaceNameList]{……}其中,修饰符public、abstract、final说明了类的属性,className为类名,superclassName为父类的名字,interfaceNameList为类所实现的接口列表。(三)类的组成处于类内部的部分,我们称其为类的成员。组成的这些成员有:成员变量、成员方法、构造函数等。构造函数又叫构造器,成员变量还可叫作属性。classclassName{[public|protected|private][static][final][transient][volatile]typevariableName;//成员变量[public]className([paramList]){statements;}//构造函数[public|protected|private][static][final|abstract][native][synchronized]returnTypemethodName([paramList])[throwsexceptionList]{statements;}//成员方法}三、构造函数(一)构造函数的概念、作用与格式构造函数是类中一种非常特殊的方法,这个方法在实例化对象时使用,在编程时主要用于为类中的成员赋值。一般情况下,每个类都会有一个默认的无参的空构造函数,若程序员没编写相关的构造函数,系统会自动地去调用这个默认的无参的空构造函数。若需要自己写这个函数,那就必须遵循下面的规则:(1)该方法与类同名;(2)该方法没有返回值,不能使用void关键字;(3)一般情况下其访问属性为public;(4)当编写了自己的构造函数后,其原来的默认构造函数就不存在。(二)构造函数的重载一个类中可以有多个构造函数,这种情况用于成员变量初始化时有多种不同要求时,称为构造函数的重载。02创建和使用对象学习目标1.能够掌握实例化类的方法;2.会实例化类,并调用其中的属性和方法;3.能够理解把“理想”变为“现实”这一过程,做一个“实在”人。一、创建对象(一)创建句柄
首先来想象在家看电视的情景,我们使用遥控器来遥控电视换台或开关它,如果想在屋里边走动边控制电视机的频道时,你会怎么做?你会手里拿着遥控器,而不是搬着电视机跟着你走对吗?再回到语句上,下面这条语句就可以看作有两层含义:Automobileauto1=newAutomobile();将其分解以后就是这样,Automobileauto1;//首先申请一个遥控器auto1=newAutomobile();//使用auto1这个遥控器来指挥电视那么第一条语句的意思是说:你想看Automobile牌子的电视了,所以你先在手里拿了一个Automobile牌子的遥控器,用计算机语言来说就是你向计算机申请了一个句柄,它的名字叫auto1,准备用它来控制对象。第二条语句的意思是说:你将使用名为auto1的遥控器与一台电视联系起来,以后这台电视必需使用这个遥控器来遥控,用计算机的语言来说就是你申请了句柄以后,将它与一个特定的对象关联了起来,以后使用这个对象时,就必须使用个句柄。(二)内存分配
程序运行时,所有的数据都必须放在内存中,内存中有三种存放数据的块我们需要了解:堆栈、堆、静态存储区。
(1)堆栈:这是一块有规律的内存空间,就像一个被分成很多相同大小的小格子的大柜子。通常用类似的图示来描述它,如图3-1所示。这种内存分配适合为长度一定的数据分配空间。
(2)堆:一种内存池。主要用于存放长度不固定的数据。我们已经知道对象的长度是不一样的,所以计算机使用它来为对象分配相应的空间。分配的大小是由类的结构来规定的,而分配在堆的空间就是对象。怎样来使用这个对象呢?——句柄。二、引用对象的属性观察下列代码:publicclassAutomobile{publicStringname;StringID;Stringproducer;Stringcolor;doubleprice;Stringowner;publicvoiddrive(){System.out.println("Theautomobileisdriving");}}
语句中第2至第7行的定义部分就是类的属性,我们也可以称它们为类的数据成员或者字段。怎样引用这些属性?还记得我们先必须制造电视并选一支指向它的遥控器吗?然后你就能使用遥控器来控制它的属性了。publicstaticvoidmain(Stringargs[]){Automobileauto=newAutomobile();="Benz";}看见我们怎样遥控它的吗?方法:句柄的名字(对象名).属性名。三、引用对象的方法观察下列代码:publicclassCar{publicStringname;StringID;Stringproducer;Stringcolor;doubleprice;Stringowner;publicvoiddrive(){System.out.println("Theautomobileisdriving");}}
代码中publicvoiddrive(){…}部分就是类的方法,或者也可以叫作成员方法。怎样调用它呢?方法:句柄.方法名(),例如:auto.drive();03static修饰符1SS3S2能够理解什么是静态属性与方法;会使用static关键字;能够理解“非静态”是自己的,“静态”是大家的;学习目标一、定义方法
怎样告诉计算机这个属性或者这个方法是静态的,是属于类的,不是属于对象的,其实很简单——使用static关键字。静态属性的定义:publicstaticintnumber=0;静态方法的定义:publicstaticvoidcount(){System.out.println("已制造了"+number+"辆汽车");}二、调用方法静态属性:类名.属性名。例如:Automobile.number。静态方法:类名.方法名()。例如:Automobile.count()。另外还可以用对象名来调用,如对象名.属性名,对象名.方法名()。04类的封装学习目标1.能够正确理解面向对象编程中类封装的思想;2.能够掌握public、protected、default、private关键字的意义;3.能够掌握上述三个关键字的访问区域;4.会保护自己的数据,我的“地盘”我做主。
封装就是在程序中我们只需要提供给用户方法的接口,而不需要告诉他们这个方法里具体的内容是怎样,它到底是怎样进行工作的。一、封装二、修饰符(一)public公共的public修饰的成员变量和方法被称为“公共变量”和“公共方法”。public修饰的方法和属性可以被所有类的对象使用。(二)protected受保护的
用protected修饰的成员变量或方法可以被该类自身、同一个包中的其他类以及在其他包中的该类的子类访问。(三)default默认的不用修饰符的成员变量和方法被称为默认变量和默认方法。需要注意的是:如果你在源文件中用import语句引入了另外一个包中的类,并用该类创建了一个对象,那么该类的这个对象将不能访问自己的默认变量和默认方法。如果一个类被修饰为public的,那么你可以在任何另外一个类中,使用该类创建对象。如果一个类不加任何修饰,那么你在另外一个类中使用这个类创建对象时,要保证它们是在同一包中。(四)private私有的
用private修饰的成员变量和方法被称为私有变量和私有方法。private修饰的成员变量和方法只能被同一类中的其他成员访问,不能被其他类的成员访问,也不能被其子类成员访问。但是若访问这个方法的对象位于包外或者不是该类的继承者,则访问就是非法的。访问限定符小结:变量和方法可以处于四个访问级别的一个:public、protected、default或private。类可以是public或default。变量、方法或类有缺省访问性,如果它没有显式受保护修饰符作为它的声明的一部分的话。这种访问性意味着,访问可以来自任何方法,当然这些方法只能在作为目标的同一个包中的成员类当中。以修饰符protected标记的变量或方法实际上比以缺省访问控制标记的更易访问。一个protected方法或变量可以从类当中的任何方法进行访问,这个类可以是同一个包中的成员,也可以是从任何子类中的任何方法进行访问。当它适合于一个类的子类但不是不相关的类时,就可以使用这种受保护访问来访问成员。05继承学习目标能够正确理解继承的含义与作用;能够在Java中使用类的继承;能够使用Java中继承的属性和方法;能够理解继承不仅是“抄袭”,还要有“创新”,做一个善于“学习”,勇于“创新”的人。一、创建子类
在类的声明中,通过使用关键字extends来创建一个类的子类,格式如下:classBusextendsAutomobile{……}把Bus类声明为Automobile类的子类,Automobile类是Bus类的父类。二、子类的继承性
子类继承了其父类中除private属性外的成员变量和成员方法作为自己的成员变量和成员方法。注意,如果一个类的声明中没有使用extends关键字,这个类被系统默认为是Object的子类。Object是包java.lang中的类,是所有类的父类。包外的子类不可继承。当一个类被关键字final所修饰时,它表示这是这个类是最终类,不能再被继承,所以如果你写的类不想被其他类继承,就可以给它加上final的修饰符。三、特殊的父类
类也受访问限定符的控制,对于不是定义为public的类,由于只能在包中被访问,因此这种类型也只能被包中的子类继承。
包外的子类不可继承。当一个类被关键字final所修饰时,它表示这是这个类是最终类,不能再被继承,所以如果类不想被其他类继承,就可以给它加上final的修饰符。四、this和super关键字
在Java中,this是非常重要的关键字,它可以被看作一个指针,用来指向调用方法或成员变量的对象本身,因此针对静态的方法或变量,是没有this指针指向它的。thissuper在Java中,super关键字有两种作用:(1)用在子类中引用其父类的构造函数。其格式为:super([实参列表]);(2)用来调用父类的成员变量和成员方法。super可以用作前缀来引用父类中的成员。
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 家庭房子过户合同模板
- 公寓租售合同模板
- 高校学生会纠纷调解方案
- 一纸合同模板
- 托管木床转让合同模板
- 中介服务居间合同模板
- 库房彩钢瓦维修合同模板
- 水泵电源转让合同模板
- 批发生意转让合同模板
- 新风管合同模板
- 葬礼白包DIY-A4纸直接打印
- 关于债权转让的法律意见书
- 综合科学科教研活动记录表
- 数量词病句课件
- 人教版七年级上册语文第一单元测试卷及答案(常用)
- 四年级上册信息技术课件-11电子邮件我收发 |人教版 (共20张PPT)
- 环境规划与管理全套课件完整版电子教案最新板
- (最新)国际经济学-中国人民大学题库答案
- 苏教版二年级数学上册《认识线段》课件(市级赛课一等奖)
- (完整word版)水利工程设计概(估)算编制规定
- (完整word版)小餐饮经营食品安全管理制度
评论
0/150
提交评论