Java大学实用教程_第1页
Java大学实用教程_第2页
Java大学实用教程_第3页
Java大学实用教程_第4页
Java大学实用教程_第5页
已阅读5页,还剩249页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第1章Java语言概述

本章导读

1.Java语言的诞生2.学习Java的必要性3.java的特点4.java与C/C++之关系5.Java运行平台6.Java程序开发编译器的新规定

1.1

Java语言的诞生

Java诞生于1995年,是Sun公司组织开发的一编程语言,主要奉献者是JamesGosling。1990年Sun公司成立了由JamesGosling领导的开发小组,开始致力于开发一种可移植的、跨平台的语言,该语言能生成正确运行于各种操作系统、各种CPU芯片上的代码。他们的钻研和努力促成了Java语言的诞生。Java的开展得利于Internet和Web的出现,Internet上有各种不同的计算机,它们可能使用完全不同的操作系统和CPU芯片,但仍希望运行相同的程序,Java的出现标志着真正的分布式系统的到来。返回1.2学习Java的必要性

Java不仅可以用来开发大型的桌面应用程序,而且特别适合于Internet的应用开发。目前,Java语言不仅是一门正在被广泛使用的编程语言,而且已成为软件设计开发者应当掌握的一门根底语言。Java语言是面向对象编程,并涉及到网络、多线程等重要的根底知识,而且很多新的技术领域都涉及到了Java语言,因此,学习和掌握Java已成为共识,国内外许多大学已将Java语言列入了本科教学方案,IT行业对Java人才的需求正在不断的增长,一些软件公司对其开发人员周期地进行Java的根底培训工作。在IT行业兴旺的北美洲,有将近60%的软件开发人员在使用Java完成他们的工作,EvansData公司在2002年做的一项调查中发现,在北美洲,Java的使用率已经接近C/C++。返回1.3java的特点

1.平台无关性Java语言和其他语言相比,最大的优势就是能够在所有的计算机上运行,这也是Java风行全球的主要原因。2.面向对象面向对象编程是一种先进的编程思想,更加容易解决复杂的问题。3.多线程Java的特点之一就是内置对多线程的支持。多线程允许同时完成多个任务。4.平安5.动态

返回1.4java与C/C++之关系

如果你学习过C++语言,你会感觉Java很眼熟,因为Java中许多根本语句的语法和C++一样,像常用的循环语句、控制语句等和C++几乎一样,但不要误解为Java是C++的增强版,Java和C++是两种完全不同的语言,他们各有各的优势,将会长期并存下去,Java语言和C++语言已成为软件开发者应当掌握的语言。

返回1.5Java运行平台

1)三种平台简介目前Java运行平台主要分为以下3个版本:〔JavaSE〔曾称作J2SE〕——Java标准版或Java标准平台。JavaSE提供了标准的JDK开发平台,利用该平台可以开发Java桌面应用程序和低端的效劳器应用程序,也可以开发JavaApplet。JavaEE〔曾称作J2EE〕——Java企业版或Java企业平台,可以构建企业级的效劳应用。JavaEE平台包含了JavaSE平台,并增加了附加类库,以便支持目录管理、交易管理和企业级消息处理等功能。JavaME〔曾称作J2ME〕——Java微型版或Java小型平台。JavaME是一种很小的Java运行环境,用于嵌入式的消费产品中,如移动、掌上电脑或其他无线设备等。2)安装JavaSE平台学习Java必须从JavaSE开始,因此,本书基于JavaSE来学习Java。目前Sun公司已发布了JDK的1.6版本。如果安装JDK选择安装到E:\Jdk1.6目录下,那么会生成如图1.1的目录结构。图1.1JDK目录结构

3〕系统环境Path值的设置JDK平台提供的Java编译器〔javac.exe〕和Java解释器〔java.exe〕位于Java安装目录的bin文件夹中,为了能在任何目录中使用编译器和解释器,应在系统特性中设置Path。对于Windows2000、Windows2003、WindowsXP,用鼠标右键点击“我的电脑〞,弹出菜单,然后选择“属性〞,弹出“系统属性〞对话框,再单击该对话框中的“高级〞选项,然后点击按钮“环境变量〞,添加如下的系统环境变量〔如图1.2所示〕:

图1.2设置环境变量path

4〕系统环境ClassPath值的设置编辑系统环境变量ClassPath的值。对于Windows2000、Windows2003、WindowsXP,用鼠标右键点击“我的电脑〞,弹出菜单,然后选择属性,弹出“系统特性〞对话框,再单击该对话框中的高级选项,然后点击按钮“环境变量〞,添加如下的系统环境变量〔如图1.3所示〕:如果曾经设置过环境变量:ClassPath,可点击该变量进行编辑操作,将需要的值参加即可。对于Win9x,用记事本编辑Autoexec.bat文件,将如下的设置语句参加即可,setclasspth=E:\jdk1.6\jre\lib\rt.jar;.;也可以在命令行窗口,如MS-DOS窗口键入命令:setclasspth=E:\jdk1.6\jre\lib\rt.jar;.;

图1.3设置环境变量classpath5〕仅仅安装JRE

如果你只想运行别人的Java程序可以只安装Java运行环境JRE,JRE由Java虚拟机、Java的核心类以及一些支持文件组成。可以登录Sun的网站免费下载Java的JRE。返回1.6Java程序开发

1.Java应用程序的开发开发一个Java应用程序的步骤:

编写源文件编译源文件生成字节码加载运行字节码FileName.javaFileName.class1)编写源文件(1)

源文件的组成使用一个文字编辑器,如Edit或记事本,来编写源文件。不可使用Word编辑器,因它含有不可见字符。Java是面向对象编程,Java应用程序的源文件是由假设干个书写形式互相独立的类组成。见例子1(2)应用程序的主类一个Java应用程序必须有一个类含有publicstaticvoidmain〔Stringargs[]〕方法,称这个类是应用程序的主类。args[]是main方法的一个参数,是一个字符串类型的数组〔注意String的第一个字母是大写的〕,以后会学习怎样使用这个参数。

(3)源文件的命名规那么源文件有几个类?源文件名=该类类名一个两个以上有public类?没有源文件名=类名之一有有几个public类?一个两个以上源文件名=该Public类名

这是不允许的!

(4)良好的编程习惯

在编写程序时,一行最好只写一条语句,类体的以方法的大括号最好也独占一行,并有明显的缩进。本书在编写代码时,尽量遵守良好的编程习惯。

良好的编程习惯对一个优秀的程序员是至关重要的!2〕编译Java源程序当创立了Hello.java这个源文件后,就要使用编译器〔javac.exe〕对其进行编译:需要翻开MS-DOS命令行窗口,进入C盘,然后进入到1000目录中,如图1.4所示。3〕运行Java程序Java应用程序必须通过Java虚拟机中的Java解释器〔java.exe〕来解释执行其字节码文件。Java应用程序总是从主类的main方法开始执行。因此,必须如下运行Java应用程序:C:\1000\>javaHello运行效果如图1.5所示。当Java应用程序中有多个类时,java命令执行的类名必须是主类的名字〔没有扩展名〕。例:〔1〕编译源文件c:\1000\>javacTom.java如果编译成功,你的目录1000下就会有Tom.class和Example.class这两个字节码文件了。〔2〕执行c:\1000\>javaExamplejava命令后的名字必须是主类的名字,运行效果如图1.6。返回2.JavaApplet程序的开发开发一个JavaApplet程序需经过三个步骤:编写源文件、编译源文件生成字节码、通过浏览器加载运行字节码。〔1〕编写源文件一个JavaApplet源文件也是由假设干个类组成的,一个JavaApplet源文件不再需要main方法,但必须有且只有一个类扩展了Applet类,即它是Applet类的子类〔Applet类是系统提供的类〕,我们把这个类称作JavaApplet源文件的主类。下面的例子2是一个简单的JavaApplet源文件。2〕编译

c:\1000\>javacBoy.java编译成功后,文件夹C:\1000下会生成一个Boy.class文件。如果源文件有多个类,将生成多个class文件,都和源文件在同一文件夹里。如果你对源文件进行了修改,那么你必须重新编译,再生成新的字节码文件。

3〕运行JavaApplet由浏览器来运行,因此我们必须编写一个超文本文件〔含有applet标记的web页〕通知浏览器来运行这个JavaApplet。下面是一个最简单的一个html文件,通知浏览器运行JavaApplet。我们使用记事本编辑如下:<appletcode=Boy.classheight=100width=300></applet>现在可以使用浏览器翻开文件Boy.html运行JavaApplet,效果如图1.7所示。返回如果你的浏览器不能运行你的Applet〔如没有安装浏览器,或浏览器没有内嵌的java实时运行环境等〕,你也可以使用J2SE提供的appletviewer〔小程序查看器〕来运行你的Applet:C:\temp>appletviewerBoy.html1.7JDK1.6编译器的新规定

和以前版本的编译器有了一个很大的不同,JDK1.6的编译器javac.exe不再向下兼容,也就是说,如果在编译源文件时没有特别约定的话,用JDK1.6的编译器生成的字节码只能在安装了JDK1.6或JRE1.6的Java平台环境中运行。可用“-source〞参数约定字节码适合的Java平台。如

javac–source1.2<FileName.java>返回第2章根本数据类型和数组本章导读1.标识符和关键字2.根本数据类型3.根本数据类型的转换4.数据的输入与输出5.数组2.1标识符和关键字

1.标识符

用来标识类名、变量名、方法名、类型名、数组名、文件名的有效字符序列称为标识符。简单地说,标识符就是一个名字。Java语言规定标识符由字母、下划线、美元符号和数字组成,并且第一个字符不能是数字。标识符中的字母是区分大小写的,Beijing和beijing是不同的标识符。2.关键字

关键字就是Java语言中已经被赋予特定意义的一些单词,它们在程序中有着不同的用途,不可以把关键字作为标识符来用。Java语言中的关键字在大多数的JAVAIDE中,关键字用蓝色字体显示.返回2.2根本数据类型根本数据类型也称作简单数据类型。Java语言有8种简单数据类型,分别是:boolean、byte、short、int、long、float、double、char。这8种数据类型习惯上可分为4大类型:逻辑类型:boolean字符类型:char整数类型:byte、short、int、long浮点类型:float、double2.2根本数据类型1.逻辑类型常量:true,false。变量的定义:使用关键字boolean来定义逻辑变量,定义时也可以赋给初值。

如:booleanx,ok=true,关闭=false;2.整数类型常量:123,6000〔十进制〕,077(八进制),0x3ABC(十六进制)。整型变量的定义分为4种2.2根本数据类型〔1〕int型使用关键字int来定义int型整型变量,定义时也可以赋给初值,例如:intx,平均=9898;对于int型变量,内存分配给4个字节〔byte〕。int型变量的取值范围是:-231~231-1。〔2〕byte型使用关键字byte来定义byte型整型变量。对于byte型变量,内存分配给1个字节,占8位,byte型变量的取值范围是-27~27-1。2.2根本数据类型〔3〕short型使用关键字short来定义short型整型变量。对于short型变量,内存分配给2个字节,short型变量的取值范围是-215~215-1。〔4〕long型使用关键字long来定义long型整型变量,对于long型变量,内存分配给8个字节,long型变量的取值范围是-263~263-1。2.2根本数据类型3.字符类型常量:Unicode表中的字符就是一个字符常量,例如‘A’,‘‘?’,‘9’,‘好’,‘き’,等。Java还使用转意字符常量,如:‘\n’:换行‘\b’:退格‘\t’:水平制表‘\’’:单引号‘\〞’:双引号变量的定义:使用关键字char来定义字符变量,例如:charx=‘A’,漂亮=‘假’,jiafei;2.2根本数据类型

char型变量,内存分配给2个字节,占16位,最高位不是符号位,没有负数的char。char型变量的取值范围是0~65536。要观察一个字符在unicode表中的顺序位置,必须使用int类型显示转换,不可以使用short型转换,因为char的最高位不是符号位。同样,要得到一个0~65536之间的数所代表的Unicode表中相应位置上的字符也必须使用char型显示转换。下面的例子1中,分别用显示转换来显示一些字符在Unicode表中的位置,以及某些位置上的字符。2.2根本数据类型4.浮点类型浮点型分两种〔1〕float型常量:453.5439f,21379.987F,2e40f〔2乘10的40次方,科学计数法〕变量的定义:使用关键字float来定义float型变量。对于float型变量,内存分配给4个字节,其取值范围是10-38~1038和-1038~-10-38。2.2根本数据类型〔2〕double型常量:21389.5439d〔d可以省略〕,23189908.987,123.0,6e-140〔6乘10的-140次方,科学计数法〕。变量的定义:使用关键字double来定义double型变量。double型变量,内存分配给8个字节,double型变量的取值范围大约是10-308~10308和-10308~-10-308。返回2.3根本数据类型的转换根本数据类型的转换就是把一种根本数据类型变量转变成另一种根本类型变量。以下根本类型会涉及数据转换,不包括逻辑类型和字符类型。我们将这些类型按精度从“低〞到“高〞排列了顺序:byteshortintlongfloatdouble当把级别低的变量的值赋给级别高的变量时,系统自动完成数据类型的转换,如int型转换成long型。当把级别高的变量的值赋给级别低的变量时,必须使用显示类型转换运算。显示转换的格式:〔类型名〕要转换的值;2.3根本数据类型的转换例如intx=(int)34.89;输出x将是34,强制转换运算可能导致精度的损失。当把一个整数赋值给一个byte、short、int或long型变量时,不可以超出这些变量的取值范围,否那么必须进行类型转换运算。下面我们看一个例子:程序运行结果见右图:返回2.4数据的输入与输出由于C语言出现的比较早,那个时候还没有图形用户界面的概念〔GraphicsUserInterface〕,因此,C语言提供了许多用来输入、输出数据的函数,例如printf、scanf等。Java不象C,提供在命令行进行数据输入、输出的功能不多。关于输入、输出我们将在第九章详细介绍,现在只需知道它的作用是在命令行窗口〔例如,MS-DOS窗口〕输出数据即可。Sun公司新推出的JDK1.5又新增了一些在命令行进行数据输入、输出的功能。2.4数据的输入与输出1.数据输出:

的功能完全类似C语言中的printf函数。pringf的一般格式:printf(格式控制局部,表达式1,表达式2,…表达式n);例如:System.out.printf(“点P的坐标为(%d,%d)〞,x,y);输出:点P的坐标为(200,300)Printf方法的用法与C语言相同。

下面我们看一个例子,来进一步了解数据输出。Printf()的格式控制局部格式控制局部由格式控制符和普通字符组成。格式控制符用来输出表达式的值,普通字符原样输出。%d——输出整数类型数据。%c——输出字符类型数据。%f——输出浮点类型数据,最多保存6位小数。%s——输出字符串类型数据。输出数据时,也可以控制数据在命令行的位置:%md——输出的int类型数据占m列。%m.nf——输出的浮点数据占m列,保存n位小数。Java提倡用:%n——表示回车换行。2.4数据的输入与输出2.数据的输入:ScannerScanner是SDK1.5新增的一个类,可以使用该类创立一个对象:Scannerreader=newScanner(System.in);然后reader对象调用以下方法〔函数〕,读取用户在命令行输入的各种数据类型,nextByte(),nextDouble(),nextFloat(),nextInt(),nextLine(),nextLong(),nextShort()。2.4数据的输入与输出上述方法执行时都会堵塞,等待你在命令行输入数据回车确认。下面让我们来看一个例子,来更好的了解Scanner语句,在这个例子中,用户在键盘依次输入假设干个数字,每输入一个数字都需要按回车键确认,最后在键盘输入一个非数字字符结束整个的输入操作过程。程序将计算出这些数的和及平均值。返回2.5数组数组是相同类型的数据按顺序组成的一种复合数据类型。通过数组名加数组下标来使用数组中的数据。下标从0开始。1.声明数组声明数组包括数组的名字、数组包含的元素的数据类型。声明一维数组有以下两种格式:数组元素类型数组名字[];数组元素类型[]数组名字;2.5数组声明二维数组有以下两种格式:数组元素类型数组名字[][];数组元素类型[][]数组名字;2.创立数组声明数组仅仅是给出了数组名和元素的数据类型,要想使用数组还必须为它分配内存空间,即创立数组。在为数组分配内存空间时必须指明数组的长度。格式如下:数组名字=new数组元素的类型[数组元素的个数];例如:boy=newfloat[4];2.5数组0x785BABoy[0]Boy[1]boy[2]boy[3]数组的内存模式36.5012.8768.7896.672.5数组3.数组元素的使用一维数组通过下标符访问自己的元素,如boy[0],boy[1]等。需要注意的是下标从0开始,因此,数组假设是7个元素,下标到6为止,如果你将来使用下标超过6将会发生异常〔数组下标越界〕。二维数组也通过下标符访问自己的元素,如a[0][1],a[1][2]等。下标也是从0开始。2.5数组4.数组的初始化创立数组后,系统会给每个数组元素一个默认的值,如,float型是0.0。我们在声明数组时同时也还可以给数组的元素一个初始值,如:floatboy[]={21.3f,23.89f,2.0f,23f,778.98f};

数组属于引用型变量,因此两个相同类型的数组如果具有相同的引用,它们就有完全相同的元素。例如,对于

int[]a={1,2,3},b={4,5};

数组变量a和b分别存放着不同的引用。但是,如果使用了赋值语句:a=b;那么,a中存放的引用就和b的相同,这时系统将释放最初分配给数组a的元素,使得a的元素和b的元素相同,即a[0],a[1]就是b[0],b[1],而最初分配给数组a的三个元素已不复存在.2.5数组下面让我们结合这个例子来看怎样使用数组。2.5数组返回ab123a[0]a[1]a[2]45b[0]b[1]0xB96710xB83210xB9671a=b;Unicode标准字符集Java语言使用;可识别65536个字符;前128个字符为ASCII码;包含了世界上几乎所有语言中的“字母〞;返回第3章运算符、表达式与语句

本章导读1.算术运算符和算术表达式2.关系运算符与关系表达式3.逻辑运算符与逻辑表达式4.赋值运算符与赋值表达式5.移位运算符6.位运算符7.条件运算符8.instanceof运算符9.一般表达式10.语句概述11.分支语句12.循环语句13.跳转语句3.1算术运算符和算术表达式〔1〕加减运算符加减运算的结合性是从左到右。加减运算的操作元是整型或浮点型数据,加减运算符的优先级是4级。〔2〕乘、除和求余运算符乘、除和求余运算的运算符号为*、/、%,都是双目运算符。*、/、%运算符的结合性是从左到右,例如:2*3/8,先计算2*3,然后再将得到的结果除以8。乘、除和求余运算的操作元是整型或浮点型数据。*、/、%运算符的优先级是3级。〔3〕自增、自减运算符自增、自减运算的运算符号为:++、--,都是单目运算符,运算符的优先级是2级。运算符可以放在操作元之前,也可以放在操作元之后,但操作元必须是一个整型或浮点型变量〔不能是常量或表达式〕。运算符的作用是使变量的值增1或减1,如:++x,--x表示在使用x之前,先使x的值加〔减〕1。x++,x--表示在使用x之后,使x的值加〔减〕1。粗略地看,++x和x++的作用相当于x=x+1。但++x和x++的不同之处在于,++x是先执行x=x+1再使用x的值,而x++是先使用x的值再执行x=x+1。如果x的原值是5,那么:对于y=++x;y的值为6。对于y=x++;y的值为5,然后x的值变为6。〔4〕算术表达式用算术符号和操作元连接起来的符合Java语法规那么的式子,称为算术表达式。如x+2*y-30+3*(y+5)-12+n+(--n)。〔5〕算术混合运算的精度精度从“低〞到“高〞排列的顺序是:byteshortintlongfloatdoubleJava将按运算符两边的操作元的最高精度保存结果的精度,例如:5/2的结果是2,要想得到2.5,必须写成5.0/2或5.0f/2。char型数据和整型数据运算结果的精度是int。例如:bytek=18;那么‘H’+k;的结果是int型,因此以下写法是不正确的,charch=’H’+k;应当写成:charch=(char)(’H’+k);返回3.2关系运算符与关系表达式关系运算符用来比较两个值的关系,关系运算符的运算结果是boolean型数据,当运算符对应的关系成立时,运算结果是true,否那么是false。〔1〕大小关系运算符大小关系运算的符号分别是:>、>=、<、<=,都是双目运算符,操作元是数值型的常量、变量或表达式。例如,10<9的结果是false,5>1的结果是true。在书写时要特别注意的是“<=〞是一个完整的符号,在“<〞和“=〞之间不要含有空格。大小关系运算符的级别是6级,例如,10>20-17的结果为true,因为算术运算符的级别高于关系运算符,10>20-17相当于10>〔20-17〕。〔2〕等与不等关系等与不等关系运算的符号分别是:“==〞、“!=〞,都是双目运算符。运算符的级别是7级。“==〞和“!=〞都是由2个字符组成的一个完整的符号,书写时不要含有空格。注意不要将后面讲述的赋值运算符“=〞与等号运算符“==〞混淆。〔3〕关系表达式结果为数值型的变量或表达式可以通过关系运算符形成关系表达式。例如,24>18,(x+y+z)>30+x等。返回3.3逻辑运算符与逻辑表达式逻辑运算用来实现boolean型数据的逻辑“与〞、“或〞和“非〞运算,运算结果是boolean型数据。〔1〕逻辑“与〞和逻辑“或〞逻辑“与〞和逻辑“或〞运算的符号是:&&、||,是双目运算符,操作元是boolean型的变量或求值结果是boolean型数据的表达式。“&&〞的运算法那么是:当2个操作元的值都是true时,运算结果是true,否那么是false。“||〞的运算法那么是:当2个操作元的值都是flase时,运算结果是false,否那么是true。“&&〞和“||〞的级别分别是11和12级,结合性是左到右。例如,1>8&&9>2的结果为false,1>8||6>2的结果为true。由于关系运算符的级别高于&&和||的级别,所以,1>8&&9>2相当于〔1>8〕&&〔9>2〕。逻辑运算符“&&〞和“||〞也称做短路逻辑运算符。进行op1&&op2运算时,如果op1的值是false,“&&〞运算符在运算时不再去计算op2的值,直接就得出op1&&op2的结果是false。当op1的值是true时,“||〞运算符在运算时不再去计算op2的值,直接就得出op1||op2的结果是true。〔2〕逻辑“非〞逻辑“非〞运算的符号是:!,是单目运算符,操作元在左面。当操作元的值是TURE时,运算结果是FALSE;反之为TURE。“!〞的运算级别是2级,结合性从右到左。例如,!!X相当于!(!X)。〔3〕逻辑表达式结果为boolean型的变量或表达式可以通过逻辑运算符形成逻辑表达式。例如,24>18&&4<0,x!=0||y!=0。返回3.4赋值运算符与赋值表达式赋值运算符:=。赋值运算符是双目运算符,左面的操作元必须是变量,不能是常量或表达式。设x是一个整型变量,y是一个boolean型变量,x=120和y=false都是正确的赋值表达式,赋值运算符的优先级较低,是14级,结合方向右到左。赋值表达式的值就是“=〞左面变量的值。注意不要将赋值运算符“=〞与等号运算符“==〞混淆。返回3.5移位运算符

移位运算符用来对二进制位进行移位操作,分为左移位操作和右移位操作。〔1〕左移位运算符左移位运算的符号为:<<,是双目运算符。左移位运算符左面的操作元称作被移位数,右面的操作数称作移位量,操作元必须是整型类型的数据。假设a是一个被移位的整型数据,n是位移量。a<<n运算的结果是通过将a的所有位都左移n位,每左移一个位,左边的高阶位上的0或1被移出丢弃,并用0填充右边的低位。

对于byte或short型数据,a<<n的运算结果是int型精度。当进行a<<2

运算时,计算系统首先将a升级为int型数据,对于正数将高位用0填充;负数用1填充,然后在进行移位运算。例如,对于bytea=-8;11111000在进行a<<1运算时,首先将11111000生级为int型,将高位用1填充:11111111111111111111111111111000然后在进行移位运算得到-16:11111111111111111111111111110000

因此,如果把a<<1的结果赋值给一个byte型变量就必须进行强制转换运算:byteb=(byte)(a<<1);

在进行a<<n运算时,如果a是byte、short或int型数据,系统总是先计算出n%32的结果m,然后进行a<<m运算。例如,a<<33的计算结果与a<<1相同。对于long型数据,系统总是先计算出n%64的结果m,然后进行a<<m运算。〔2〕右移位运算符右移位运算的符号为:>>,是双目运算符。假设a是一个被移位的整型数据,n是位移量。a>>n运算的结果是通过将a的所有位都右移n位,每右移一个位,右边的低阶位被移出丢弃,并用0或1填充左边的高位,a是正数用0填充,负数时用1填充。因此,a每右移一次,如果该数的每一计算有效位都没有从低位移出时,就相当于将a除以2并舍弃了余数。正数不断右移位的最后结果一定是0,而负数不断右移位的最后结果是-1。对于byte或short型数据,a>>n的运算结果是int型精度。

在进行a>>n运算时,如果a是byte、short或int型数据,系统总是先计算出n%32的结果m,然后进行a>>m运算,例如,a>>33的计算结果与a>>1相同。

对于long型数据,系统总是先计算出n%64的结果m,然后进行a>>m运算。在下面的例子1中,用户输入移位运算的两个操作元,程序给出右移和左移后的结果。返回3.6位运算符〔1〕“按位与〞运算符“&〞是双目运算符,对两个整型数据a、b按位进行运算,运算结果是一个整型数据c。运算法那么是:如果a、b两个数据对应位都是1,那么c的该位是1,否那么是0。如果b的精度高于a,那么结果c的精度和b相同。〔2〕“按位或〞运算符“|〞是双目运算符。对两个整型数据a、b按位进行运算,运算结果是一个整型数据c。运算法那么是:如果a、b两个数据对应位都是0,那么c的该位是0,否那么是1。如果b的精度高于a,那么结果c的精度和b相同。〔3〕“按位非〞运算符“~〞是单目运算符。对一个整型数据a按位进行运算,运算结果是一个整型数据c。运算法那么是:如果a对应位是0,那么c的该位是1,否那么是0。〔4〕“按位异或〞运算符“^〞是双目运算符。对两个整型数据a、b按位进行运算,运算结果是一个整型数据c。运算法那么是:如果a、b两个数据对应位相同,那么c的该位是0,否那么是1。如果b的精度高于a,那么结果c的精度和b相同。位运算符在操作逻辑型数据时,与逻辑运算符&&、||、!不同的是:位运算要计算完a和b之后再给出运算的结果。在下面的例子2中,利用“异或〞运算的性质,对几个字符进行加密并输出密文,然后再解密。运行结果见图3-2。图3-2返回3.7条件运算符条件运算符是一个3目运算符,它的符号是:“?:〞,需要连接3个操作元,用法如下:op1?op2:op3

运算法那么是:当op1的值是true时,op1?op2:op3运算的结果是op2的值;当op1的值是false时,op1?op2:op3运算的结果是op3的值。

例如,12>8?100:200的结果是100;

12<8?100:200的结果是200。返回boolean型同一数据类型3.8instanceof运算符该运算符是双目运算符,左面的操作元是一个对象,右面是一个类。当左面的对象是右面的类创立的对象时,该运算的结果是true,否那么是false。该运算符将在第4章以后使用。运算的级别返回3.9一般表达式Java的一般表达式就是用运算符及操作元连接起来的符合Java规那么的式子,简称表达式。一个Java表达式必须能求值,即按着运算符的计算法那么,可以计算出表达式的值。例如,假设intx=1,y=-2,n=10;那么,表达式x+y+(--n)*(x>y&&x>0?(x+1):y)的值是int型数据,结果为17。返回3.10语句概述Java里的语句可分为以下5类:〔1〕方法调用语句在第4章将介绍类、对象等概念,对象可以调用类中的方法产生行为,如:例子1中的reader.nextInt();〔2〕表达式语句一个表达式的最后加上一个分号就构成了一个语句,称作表达式语句。分号是语句不可缺少的局部。例如,赋值语句:x=23;

〔3〕复合语句可以用“{〞和“}〞把一些语句括起来构成复合语句,一个复合语句也称作一个代码块。例如,{z=23+x;System.out.println("hello");}〔4〕控制语句控制语句包括:条件分支语句、循环语句和跳转语句。〔5〕package语句和import语句package语句和import语句与类、对象有关,将在第4章讲解。返回3.11分支语句1.条件分支语句〔1〕if-else语句.if-else语句是Java中的一条语句,由一个“if〞、“else〞和两个复合语句按一定格式构成,if-else语句的格式如下:if(表达式){假设干语句}else{假设干语句}一条if-else语句的作用是根据不同的条件产生不同的操作,执行法那么如下:if后面()内的表达式的值必须是boolean型的。如果表达式的值为true,那么执行紧跟着的复合语句;如果表达式的值为false,那么执行else后面的复合语句。〔2〕多条件if-elseif-else语句程序有时需要根据多条件来选择某一操作,这时就可以使用if-elseif-else语句。if-elseif-else语句是Java中的一条语句,由一个“if〞、假设干个“elseif〞、一个“else〞与假设干个复合语句按一定规那么构成。语句的格式如下:if(表达式1){假设干语句}elseif(表达式2){假设干语句……}elseif(表达式n){假设干语句}else{假设干语句}有时为了编程的需要,复合语句中可以没有任何语句。一条if-elseif-else语句的作用是根据不同的条件产生不同的操作,执行法那么如下:if以及elseif后面()内的表达式的值必须是boolean型的。该语句执行时,首先计算if后括号中的表达式的值,如果该表达式的值为true,那么执行紧跟着的复合语句,然后就结束整个语句的执行;如果if后括号中的表达式的值为false,就依次再计算后面的elseif的表达式的值,直到出现某个表达式的值为true为止,然后执行该elseif后面的复合语句,结束整个语句的执行。如果所有的表达式的值都是false,就执行else后面复合语句,结束整个语句的执行。在下面的例子3中,用户在键盘输入3个数,程序判断这3个数能构成什么形状的三角形。2.switch开关语句switch语句是多分支的开关语句,它的一般格式定义如下:switch(表达式){case常量值1:假设干个语句break;case常量值2:假设干个语句break;………case常量值n:假设干个语句break;default:假设干语句}switch语句中表达式的值必须是整型或字符型;常量值1到常量值n必须也是整型或字符型。switch语句首先计算表达式的值,如果表达式的值和某个case后面的常量值相同,就执行该case里的假设干个语句,直到碰到break语句为止。假设没有任何常量值与表达式的值相同,那么执行default后面的假设干个语句。其中default是可有可无的,如果它不存在,并且所有的常量值都和表达式的值不相同,那么switch语句就不会进行任何处理。需要注意的是,在同一个switch语句中,case后的常量值必须互不相同。下面的例子4使用了switch语句,用户在键盘输入一个代表月份的整数,程序输出是该月是在年度的第几季度。返回3.12循环语句1.while循环while语句的一般格式:while(表达式){假设干语句}while语句由关键字while、括号中的一个求值为boolean型数据的表达式和一个复合语句组成,其中的复合语句称作循环体,循环体只有一条语句时,大括号“{}〞可以省略,但最好不要省略,以便增加程序的可读性。表达式称作循环条件。while语句的执行规那么是:〔1〕计算表达式的值,如果该值是true时,就进行〔2〕,否那么进行〔3〕。〔2〕执行循环体,再进行〔1〕〔3〕结束while语句的执行while语句执行规那么如流程图3.5所示。while语句执行规那么如流程图3.5所示。表达式

循环体truefalse图3.5while循环语句2.do-while循环一般格式:do{假设干语句}while(表达式);do-while循环和while循环的区别是:do-while的循环体至少被执行一次,如图3.6所示。下面的例子5分别用while和do-while循环计算常数e的近似值:e=1+1/1+1/2!+1/3!+……。循环体表达式truefalse图3.6do-while循环语句3.for循环for语句的一般格式:for(表达式1;表达式2;表达式3){循环体}for语句由关键字for、括号中用分号分割的3个表达式,以及一个复合语句组成,其中的“表达式2〞必须是一个求值为boolean型数据的表达式,而复合语句称作循环体。for语句的执行规那么是:〔1〕计算“表达式1〞,完成必要的初始化工作〔2〕判断“表达式2〞的值,假设“表达式2〞的值为true,那么进行〔3〕,否那么进行〔4〕。〔3〕执行循环体,然后计算“表达式3〞,以便改变循环条件,进行〔2〕。〔4〕结束for语句的执行.一个数如果恰好等于它的因子之和,这个数就称为“完数〞。例如,6=1+2+3。下面的例子6使用for循环计算出1000内的全部完数返回3.13跳转语句跳转语句是指用关键字break或continue加上分号构成的语句,例如:break;在循环语句的循环体中使用跳转语句。在一个循环中,比方循环50次的循环语句中,如果在某次循环体的执行中执行了break语句,那么整个循环语句就结束。如果在某次循环体的执行中执行了continue语句,那么本次循环就结束,即不再执行本次循环中循环体中continue语句后面的语句,而转入进行下一次循环。下面的例子7和例子8使用的跳转语句。返回本章导读0.面向对象编程1.类声明和类体2.类体的构成3.构造方法与对象的创立4.对象的引用与实体5.成员变量6.方法第4章

类与对象7.方法重载8.this关键字9.包10.import语句11.访问权限12.对象的组合13.根本类型数据的类包装14.反编译和文档生成器15.JAR文件面向对象编程封装封装是面向对象方法的核心思想之一。它有两个含义:一是指把对象的属性和行为看成为一个密不可分的整体,将这两者“封装〞在一个不可分割的独立单位〔即对象〕中。另一层含义指“信息隐蔽〞,把不需要让外界知道的信息隐藏起来,有些对象的属性及行为允许外界用户知道或使用,但不允许更改,而另一些属性或行为,那么不允许外界知晓;或只允许使用对象的功能,而尽可能隐蔽对象的功能实现细节。继承 子类可以继承父类的属性〔数据〕和功能〔操作〕。继承是面向对象方法中的重要概念,并且是提高软件开发效率的重要手段。多态 多态——程序中允许出现重名现象。Java语言中具有操作名称的多态&和继承有关的多态。返回类Java程序设计的根本单位是类〔class〕,Java的源文件由假设干个书写形式相互独立的类构成。类有两个根本成员:成员变量和(成员)方法。成员变量刻画对象的属性,成员方法表达对象的功能。类是用来定义对象的模板。可以用类创立对象,当使用一个类创立了一个对象时,我们也说给出了这个类的一个实例/创立了该类的一个实例。4.1类声明和类体

在语法上,类由两局部构成:类声明和类体。根本格式为:class类名{类体的内容……}class是关键字,用来定义类。“class类名〞是类的声明局部,类名必须是合法的Java标识符。两个大括号“{〞、“}〞以及之间的内容称作类体。以下是两个类声明的例子。classDog{

…}class机动车{

…}类的名字不能是Java中的关键字,要符合标识符规定,即名字可以由字母、下划线、数字或美元符号组成,并且第一个字符不能是数字。但给类命名时,最好遵守以下习惯:1〕如果类名使用拉丁字母,那么名字的首字母使用大写字母,如Hello、Time、,People等。2〕类名最好容易识别、见名知意。3〕当类名由几个“单词〞复合而成时,每个单词的首字母要大写,如BeijingTime、AmericanGame、HelloChina等。返回4.2类体的构成

类体内容可以有2种类型的成员:1.成员变量:通过变量声明定义的变量,称作成员变量或域,用来刻画类创立的对象的属性。将在后面的第3节详细地讨论成员变量。2.方法:方法是类体的重要成员之一。其中的构造方法是具有特殊地位的方法,供类创立对象时使用,用来给出类所创立的对象的初始状态,另一类方法,可以由类所创立的对象调用,对象调用这些方法操作成员变量形成一定的算法,表达对象具有某种功能。下面是一个类名为“机动车〞的类,类体内容的变量定义局部定义了2个float类型的变量:“weight〞、“height〞和一个int型变量“speed〞;方法定义局部定义了3个方法:“changSpeed〞、“getWeight〞和“getHeight〞。成员变量的类型可以是Java中的任何一种数据类型,包括前面学习过的根本类型:整型、浮点型、字符型、数组以及后面要学习的对象及接口。成员变量在整个类内都有效,与它在类体中书写的先后位置无关,例如,前述的机动车类也可以写成:在定义类的成员变量时可以同时赋予初值,说明类所创立的对象的初始状态。需要注意的是。对成员变量的操作只能放在方法中,方法可以对成员变量进行操作形成算法,如:但是不可以这样做:因为,a=12是赋值语句,不是数据的声明。类的成员类型中可以有数据和方法,即数据的定义和方法的定义,但没有语句,语句必须放在方法中。

返回4.3构造方法与对象的创立类中有一局部方法称作构造方法,类创立对象时需使用构造方法,以便给类所创立的对象一个合理的初始状态。构造方法是一种特殊方法,它的名字必须与它所在的类的名字完全相同,并且不返回任何数据类型,即它是void型,但void必须省略不写。Java允许一个类中有假设干个构造方法,但这些构造方法的参数必须不同,即或者是参数的个数不同,或者是参数的类型不同。下面的Rect类有两个构造方法:当使用一个类创立了一个对象时,我们也说给出了这个类的一个实例。创立一个对象包括对象的声明和为对象分配成员变量两个步骤。1.对象的声明。一般格式为:类的名字对象名字;如:RectrectangleOne;2.为声明的对象分配成员变量使用new运算符和类的构造方法为声明的对象分配成员变量,如果类中没有构造方法,系统会调用默认的构造方法〔默认的构造方法是无参数的,你一定还记得构造方法的名字必须和类名相同这一规定〕,上述的Rect类提供了2个构造方法,下面都是合法的创立对象的语句:rectangleOne=newRect();或rectangleOne=newRect(10,20);如果类里定义了一个或多个构造方法,那么Java不提供默认的构造方法。如果上述Rect只提供一个带参数的构造方法,代码:rectangleOne=newRect();创立对象是非法的。创立对象的代码:rectangleOne=newRect(10,20);会实现下述两件事:〔1〕为成员变量分配内存空间,然后执行构造方法中的语句。〔2〕给出一个信息,已确保这些成员变量是属于对象rectangleOne的。创立对象就是指为它分配成员变量,并获得一个引用,以确保这些成员变量由它来“操作管理〞。为对象分配成员变量后,内存模型由声明对象时的模型图4.1,变成如图4.2所示,箭头示意对象可以操作这些属于自己的成员变量。图4.2分配实体后的对象sideBsideA

20

100xAA11RectangleOne3.创立多个不同的对象一个类通过使用new运算符可以创立多个不同的对象,这些对象将被分配不同的内存空间,因此,改变其中一个对象的状态不会影响其它对象的状态。例如,我们使用前面的Rect类创立两个对象:rectangleOne、rectangleTwo。rectangleOne=newRect(10,20);rectangleTwo=newRect(33,66);当创立对象rectangleOne时,Rect类中的成员变量sizeA、sizeB被分配内存空间,并返回一个引用给ectangleOne;当再创立一个对象rectangleTwo时,Rect类中的成员变量sizeA、sizeB再一次被分配内存空间,并返回一个引用给rectangleTwo。内存模型如图4.3所示。

sideBsideA

20

100xAA11rectangleOne图4.3创立多个对象sideBsideA

66

330xBB42rectangleTwo4.使用对象对象不仅可以操作自己的变量改变状态,而且还拥有了使用创立它的那个类中的方法的能力,对象通过使用这些方法可以产生一定的行为。通过使用运算符“.〞,对象可以实现对自己的变量访问和方法的调用。1〕对象操作自己的变量〔对象的属性〕2〕对象调用类中的方法〔对象的功能〕下面例子1中,“Ladder〞类创立了2个对象:ladderOne,ladderTwo。返回4.4对象的引用与实体

我们已经知道,当用类创立一个对象时,成员变量被分配内存空间,这些内存空间称做该对象的实体或变量,而对象中存放着引用,以确保这些变量由该对象操作使用。因此,如果两个对象有相同的引用,那么就具有同样的实体。假设使用例子1“Ladder〞类的构造方法创立了两个对象t1,t2。t1=newLadder(11,22,33);t2=newLadder(6,12,18);0xAA332211heightbottomabovet10xDD18126heightbottomabovet20xDDJava具有“垃圾收集〞机制,Java的运行环境周期地检测某个实体是否已不再被任何对象所引用,如果发现这样的实体,就释放实体占有的内存。因此,Java编程人员不必象C++程序员那样,要时刻自己检查哪些对象应该释放内存。当把变量t2中存放的引用赋给t1后,最初分配给对象t1的成员变量〔实体〕所占有的内存就会被释放。没有实体的对象称作空对象。空对象不能使用,即不能让一个空对象去调用方法产生行为。假设程序中使用了空对象,程序在运行时会出现异常:NullPointerException。由于对象是动态地分配实体,所以Java的编译器对空对象不做检查。因此,在编写程序时要防止使用空对象。返回4.5成员变量

用关键字static修饰的成员变量称作静态变量或类变量,而没有使用static修饰的成员变量称作实例变量。例如,下述A类中,x是实例变量,而y是类变量。classA{floatx;//实例变量staticinty;//类变量}类变量是与类相关联的数据变量,也就是说,类变量是和该类所创立的所有对象相关联的变量,改变其中一个对象的这个类变量就同时改变了其它对象的这个类变量。因此,类变量不仅可以通过某个对象访问也可以直接通过类名访问。实例变量仅仅是和相应的对象关联的变量,也就是说,不同对象的实例变量互不相同,即分配不同的内存空间,改变其中一个对象的实例变量不会影响其它对象的这个实例变量。实例变量必须通过对象访问。下面例子2中,两个“Lader〞对象共享bottom。效果如图4.7

2.常量

如果一个成员变量修饰为final,就是常量,常量的名字习惯用大写字母,例如:

final

intMAX;

声明常量时必须初始化。对于final修饰的成员变量,对象可以操作使用,但不能做更改操作。下面的例子给出了常量的用法。效果如图4.9

返回4.6方法

我们已经知道,类体内容可以有2种类型的成员:成员变量和方法。其中一局部方法称作构造方法,供类创立对象时使用,用来给出类所创立的对象的初始状态。另一局部方法可分为实例方法和类方法,类所创立的对象可以调用这些方法形成一定的算法,表达对象具有某种功能。当对象调用方法时,方法中出现的成员变量就是指分配给该对象的成员变量。对象不可以调用构造方法,构造方法是专门用来创立对象的。方法的定义包括两局部:方法声明和方法体。一般格式为:方法声明局部{方法体的内容}1.方法声明和方法体最根本的方法声明包括方法名和方法的返回类型,返回类型也简称作方法的类型。如:floatarea(){….}方法的名字必须符合标识符规定。在给方法起名字时应遵守以下习惯:名字如果使用拉丁字母,首写字母使用小写。如果由多个单词组成,从第2个单词开始的其它单词的首写字母使用大写。例如floatgetTrangleArea()voidsetCircleRadius(doubleradius)等。方法声明之后的一对大括号“{〞、“}〞以及之间的内容称作方法的方法体。类中的方法必须要有方法体,如果方法的类型是void类型,方法体中也可以不书写任何语句。2.方法体的构成方法体的内容包括变量的定义和合法的Java语句,在方法体中声明的变量以及方法的参数称作局部变量,局部变量仅仅在该方法内有效。方法的参数在整个方法内有效,方法内定义的局部变量从它定义的位置之后开始有效。写一个方法和C语言中写一个函数完全类似,只不过在这里称作方法。局部变量的名字必须符合标识符规定,遵守习惯:名字如果使用拉丁字母,首写字母使用小写。如果由多个单词组成,从第2个单词开始的其它单词的首写字母使用大写。

3.实例方法与类方法除构造方法外,其他的方法可分为实例方法或类方法。方法声明中用关键字static修饰的称作类方法或静态方法,不用static修饰的称作实例方法。一个类中的方法可以互相调用:实例方法可以调用该类中实例方法或类方法;类方法只能调用该类的类方法,不能调用实例方法;如:A类中的max方法和getMaxSqrt方法是类方法;sum和min方法是实例方法。

实例方法可以操作成员变量,无论是实例变量或类变量;而类方法只能操作类变量不能操作实例变量,也就是说类方法中不能有操作实例变量的语句。二者为何有着这样的区别呢?〔1〕实例方法必须通过对象来调用〔2〕类方法可以通过类名调用无论类方法或实例方法,当被调用执行时,方法中的局部变量才被分配内存空间,方法调用完毕,局部变量即刻释放所占的内存。下面的例子4,通过类名调用类方法。4.参数传值当方法被调用时,如果方法有参数,参数必须要实例化,即参数变量必须有具体的值。在Java中,方法的所有参数都是“传值〞的,也就是说,方法中参数变量的值是调用者指定的值的拷贝。如果向方法的int型参数x传递一个int值,那么参数x得到的值是传递值的拷贝。方法如果改变参数的值,不会影响向参数“传值〞的变量的值。〔1〕根本数据类型参数的传值下面的例子5中,向一个方法的根本型参数传值。效果如图4.11〔2〕引用类型参数的传值Java的引用型数据包括我们以前学习过的对象、数组以及后面将要学习的接口。当参数是引用类型时,“传值〞传递的是变量的引用而不是变量所引用的实体。

图4.10引用类型参数的传值实体引用引用类型变量引用引用类型参数传值

如果改变参数变量所引用的实体,就会导致原变量的实体发生同样的变化,因为,两个引用型变量如果具有同样的引用,就会用同样的实体。但是,改变参数的引用不会影响向其传值的变量的引用。下面的例子6向一个方法的引用型参数传值。效果如图4.13注意在上述例子6中,tom调用方法f把对象jerry的引用“传值〞给参数a后,对象jerry和对象a就具有同样的成员变量,即同样实体。因此,jerry和a就具有同样的功能,也就是说a调用方法产生的行为和jerry调用同一方法产生的行为完全相同。当对象a执行a=null;后,a就不再有任何实体,变成一个空对象,如果再执行:a.setLeg(100);就会引起NullPointerExcetion异常。但是,jerry的引用没有发生任何变化,它依然引用着原来的实体,仍然可以调用方法产生行为。在下面的例子7中,“Cone〞类在创立对象时,将一个“Circle〞对象的引用“传值〞给“Cone〞对象的“bottom〞。效果如图4.14返回4.8方法重载

方法重载是指一个类中可以有多个方法具有相同的名字,但这些方法的参数必须不同,即或者是参数的个数不同,或者是参数的类型不同。方法的返回类型和参数的名字不参与比较,也就是说,如果两个方法的名字相同,即使类型不同,也必须保证参数不同。下面例4-8Area类中getArea方法是一个重载方法。效果如图4.15返回4.9this关键字

this是Java的一个关键字,可以出现在实例方法和构造方法中,但不可以出现在类方法中。1.在构造方法中使用thisthis关键字可以出现在类的构造方法中,代表使用该构造方法所创立的对象。下述例子9中的构造方法中出现了this,表示该对象在构造自己时调用了方法cry()。2.在实例方法中使用thisthis关键字可以出现在类的实例方法中,代表使用该方法的当前对象。我们已经知道,实例方法可以操作成员变量。实际上,当成员变量在实例方法中出现时,默认的格式是:this.成员变量;意思是当前对象的成员变量,如:

classA{intx;

voidf(){

this.x=100;}}在上述A类中的实例方法f中出现了this,this就代表使用f的当前对象。所以,this.x就表示当前对象的变量x,当对象调用方法f时,将100赋给该对象的变量x。因此,当一个对象调用方法时,方法中的成员变量就是指分配给该对象的成员变量。因此,通常情况下,可以省略成员变量名字前面的“this.〞。我们知道类的实例方法可以调用类的其它方法,调用的默认格式是:this.方法;如:在上述B类中的方法f中出现了this,this代表使用方法f的当前对象,所以,方法f的方法体中this.g()就是当前对象调用方法g,也就是说,当某个对象调用方法f过程中,又调用了方法g。由于这种逻辑关系非常明确,一个方法调用另一个方法时可以省略方法名字前面的“this.〞。3.类方法中不可以使用thisthis不能出现在类方法中,这是因为,类方法可以通过类名直接调用,这时,可能还没有任何对象诞生。4.使用this区分成员变量和局部变量我们已经知道,成员变量在整个类内有效,局部变量仅在方法内有效。在方法体中声明的变量以及方法的参数称作局部变量,方法的参数在整个方法内有效,方法内定义的局部变量从它定义的位置之后开始有效。如果局部变量的名字与成员变量的名字相同,那么成员变量被隐藏,即这个成员变量在这个方法内暂时失效。如:这时如果想在该方法内使用成员变量,成员变量前面的“this.〞就不可以省略,如:this.sideA、this.sideB、this.sideC就分别表示当前对象的成员变量sideA、sideB、sideC。返回4.10包

通过关键字package声明包语句。package语句作为Java源文件的第一条语句,指明该源文件定义的类所在的包。package语句的一般格式为:package包名;如果源程序中省略了package语句,源文件中所定义命名的类被隐含地认为是无名包的一局部,即源文件中定义命名的类在同一个包中,但该包没有名字。包名可以是一个合法的标识符,也可以是假设干个标识符加“.〞

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论