第6章Java的可重用类_第1页
第6章Java的可重用类_第2页
第6章Java的可重用类_第3页
第6章Java的可重用类_第4页
第6章Java的可重用类_第5页
已阅读5页,还剩52页未读 继续免费阅读

下载本文档

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

文档简介

封面Java网络编程基础JAVA网络编程基础第1章

Java语言概述第2章Java的开发环境基本知识

第3章Java语言基础

第4章Java面向对象程序设计第5章异常处理第6章Java的基本可重用类第7章

图形用户界面第8章多线程程序设计

第9章网络基础与URL编程

第10章Java小应用程序Applet第11章Java文件存档第六章Java的基本可重用类

6.1Java主要的可重用包6.2Java语言包6.3Java.util包6.4输入与输出流的运用6.5综合应用示例小结

习题

面向对象技术是迄今为止提高软件可重用性的最有效的途径之一,其中类和类的继承机制为提高程序的可重用性提供了强有力的支持。6.1Java主要的可重用包

Java有一系列功能强大的可重用类,异常类也是Java可重用类。功能相关的可重用类组织成包。可重用类的继承层次和包的组织呈树型结构。Java可重用类按功能划分为:

语言包java.lang(lang意为language)

输入/输出包java.io

实用程序包java.util(util意为utility)

小应用程序包java.applet

图形用户接口包java.awt、java.swing

网络包

前三种包称为基础包,后三种包称为应用包。图6-1

给出了Jave资源的层次结构。其中,矩形框表示包,椭圆框表示包中的类,本章其余的图均如此表示。JavaJava.langJJava.ioJava.utilJava.appletJava.swing…..…..…..…..…..图6-1Java工具包层次图Java.lang.MathJava.lang.SystemJava.io.FileJava常用包简介:(1)java.lang包

主要含有与语言相关的类。java.lang包由解释程序自动加载,不需显式说明。(2)jave.io包

主要含有与输入输出相关的类,这些类提供了对不同的输入输出设备读写数据的支持,这些输入和输出设备包括键盘、显示器、打印机、磁盘文件和网络等。(3)java.util包

包括许多具有特定功能的类,有日期、向量、哈希表、锁和堆栈等,其中Date类支持与时间有关的操作。(4)java.awt包和java.swing包

提供了创建图形用户界面元素的类。通过这些元素,编程者可以控制所写Applet或用户程序的外观界面。该包中包含定义窗口、对话框、按钮、复选框、列表、菜单、滚动条及文本域的类。(5)包

含有与网络操作相关性的类,如URL、TCPsockets以及二进制向ASCII码转换的工具。(6)java.applet包

含有控制Hotjava浏览器的类,这些可以控制HTML文档格式、应用程序中的声音资源等,其中Applet类是用来创建包含于HTML页内的applet必不少的类。(7)java.text包为国际化的应用程序提供类,包括:日期格式、数字、货币格式以及排序的顺序等。(8)java.beans包JavaBeans定义了应用程序编程接口(API);JavaBeans是Java应用程序环境的中性平台组件结构。6.2Java语言包(Java.lang)

Java语言包简介6.2.1字符串类6.2.2Math类

java.lang包含了Object类,java.lang.Object类是Java中整个类层次结构的根节点,这个软件包还定义了基本数据类型的类:String、Boolean、Character、Byte、Integer、Short、Long、Float、Double。这些类支持数字型的转换和字符串操作。Java语言包(Java.lang)简介Java语言的核心部分是java.lang,它定义了Java中的大多数基本的类。java.lang包由解释程序自动加载,不需显式说明(即不需用import引入)。下面是java.lang中的其他类:

Class——为运行时搜集信息,如对instanceof操作符提供支持。

Math——提供像pi和e这样的数学常数及各种函数。

System——提供对操作系统的访问,包括默认的I/O流环境变量、自动垃圾收集、系统时间和系统属性;许多System方法可访问Runtime类的方法。

Runtime——提供对操作系统的访问:使用java.lang.System可以更容易地访问大多数Runtime方法;唯一的例外是exec方法,它开始一个新进程。

Thread——和java.lang.Runnable接口协同作用提供Java中的多线程的支持。

Throwable——它是Java中所有异常(Exception)的基类,是java.lang.Exception、java.lang.Error和java.lang.RuntimeException的父类。应用程序运行时发生意外时,异常和错误类就发出信号。它在第5章作了介绍。Java语言包(Java.lang)简介6.2.1

字符串类

1.

String类

2.

StringBuffer类

java.lang提供了两种字符串类:

String类StringBuffer类另外两种构造方法:publicString(char

value[]);利用一个字符数组构造一个字符串public

String(char

value[],int

offset,int

count);

利用字符数组的offset下标开始的count个字符赋构造一个字符串1.String类String类提供的几种常用的字符串创建方法:

String类可创建一个对象,用于代表一个字符串(不变的字符串),并定义了多种方法以实现对字符串的各种操作。例:Strings=”Hello!”;使用字符串常量创建String实例sStringss=

new

String(s);利用字符串s构造String对象ss(可以使用直接赋值方法,更简单:

Stringss=s;)1.String类publicclass

string{

publicstaticvoid

main(Stringargs[]){Strings="Hello";Strings1=

new

String(s);Strings2=

new

String("World!");Strings3=s1+s2;System.out.println(s3);

char

str[]={'a','b','c','d','e'};System.out.println(str);Strings4=new

String(str);System.out.println(s4);s4=new

String(str,2,2);System.out.println(s4);System.out.println(new

String(str,1,3));}}运行结果:HelloWorld!abcdeabcdecdbcd例.创建字符串publicintlength()返回字符串的长度publiccharcharAt(intindex)返回字符串位置index处的字符

publicbooleanequals(Strings)

与字符串s比较相等否,相等返回true;反之,返回false

publicintcompareTo(Strings)

与字符串s比较字典顺序,相等返回0;

当前串大于s返回1;当前串小于s返回-11.String类

String类提供了丰富的字符串操作方法,主要有:例:Strings="Hello!";

System.out.println(s.length());

//将输出7

System.out.println(s.charAt(1));

//将输出e

System.out.println(s.equals("Hello!"));

//将输出falseSystem.out.println(pareTo(“Hello!"));

//将输出-1publicbooleanregionMatches(inttoffset,StringOther,intoffset,intlen)

从当前串中位置toffset起寻找串Other中起始位置为offset、长度为len的子串.如发现匹配,返回true;否则,返回falsepublicbooleanstartsWith(Stringprefix)

如当前串以串prefix开始则返回true;否则返回falsepublicbooleanendsWith(Stringsuffix)

如当前串以串suffix结尾则返回true;否则返回false1.String类例:Strings="HelloWorld!";

System.out.println(s.startsWith(“He”));

//将输出true

System.out.println(s.startsWith(“ello”));

//将输出false

System.out.println(s.endsWith(“World!”));

//将输出true

System.out.println(s.endsWith(“World”));

//将输出falsepublicintindexOf(Stringstr)

在当前字符串中寻找与str匹配的子串,返回首次匹配的起始下标值,无匹配返回-1。publicStringsubstring(intbeginIndex,intendIndex)

在当前字符串中,求从起始位置beginIndex到结束位置

endIndex的子串publicStringconcat(Stringstr)

将当前字符串与str连接,返回连接后的字符串

(注:使用“+”运算符更方便)publicStringtoLowertCase()

返回当前字符串全转换为小写后的字符串publicStringtoUpperCase()

返回当前字符串全转换为大写后的字符串1.String类publicChartoCharArray()返回当前字符串转换成的字符数组publicstaticStringvalueOf(typevariable)

返回由variable转换成的字符串.注意:这是个静态方法1.String类注意:String类的所有方法都不会改变String类对象本身的值!例如有如下语句:

s1="abc";s2=s1.trim();则执行后,s1、s2中存放的字符串分别为

“abc”和“abc”

String类实现一种不能改变的静态字符串,StringBuffer类实现一种动态可变的字符串。StringBuffer类可以用于创建String类,StringBuffer一旦建好,用toString()方法将其转换为String类。以后,就可以使用String类方法来操作。

2.StringBuffer类StringBuffer类提供三种创建方法:

publicStringBuffer();创建一个空的StringBuffer类

publicStringBuffer(intlength);

创建一个大小为length的StringBuffer类

publicStringBuffer(Stringstr);

按str创建一个动态可变的StringBuffer类

StringBuffer类提供的方法主要用于把输入数据转换为String类。输入数据可来自键盘或其它数据源。类型可以是字符、字符数组、整数、浮点数、和Object类型等。2.StringBuffer类StringBuffer的主要方法:publicintlength()

返回缓冲区的字符数。publicintcapacity()返回缓冲区剩余空间。publicsynchronizedStringBufferappend(typevariable)

把variable转换为字符串,然后与当前串相连publicsynchronizedStringBuffer

append(Char(charch))

把字符ch连接到当前串尾publicsynchronizedStringBufferinsert(intoffset,typevariable)

把variable转换为字符串,然后插入到当前串由offset指定的位置

例6.1利用StringBuffer类将键盘输入的数据建立一个字符串。importjava.io.*;publicclassStringBufferToString{publicstaticvoid

main(Stringargs[]){charch;try2.StringBuffer类publicsynchronizedStringBufferinsert(intoffset,charch)

把字符ch插入到当前串由offset指定的位置

publicsynchronizedStringtoString()

把StringBuffer转换为字符串String

{intlength=20;

//置StringBuffer的大小为20

StringBufferstrb=newStringBuffer(length);

while((ch=System.in.read())!=’\n’){strb.append(ch)}

Stringstr=strb.toString();System.out.println(str);}catch(IOExceptione){}}}2.StringBuffer类1.三角函数

2.乘方

3.舍入4.其他

java.lang.Math类是标准的数学类,封装了一些数学函数和常量。在这个类中,数的大小范围跟具体的操作平台有关。与System类相似,java.lang.Math类也不能被子类化或实例化,因为它的所有方法和变量也都是静态的。

6.2.2Math类

下面的三个方法接受一个double类型的且以弧度为单位的角度值,并返回相应的运算结果,返回类型均为double型。(1)sin(double

a)返回弧度a的sin值

(2)cos(double

a)返回弧度a的cos值

(3)tan(double

a)返回弧度a的tan值1.三角函数下面的三个方法是反三角函数,返回类型均为double型。

(1)asin(double

r)返回sin值为r的弧度

(2)acos(double

r)返回cos值为r的弧度

(3)atan(double

r)返回tan值为r的弧度

例:Math.sin(3.1416/6)将返回0.5000010603626028

例:Math.cos(3.1416/4)将返回0.7071054825112363

例:Math.asin(0.5)将返回0.5235987755982989(即π/6)(1)pow(doublex,double

y)返回xy次方。(2)exp(double

x)返回ex(3)log(double

x)返回x的自然对数。(4)sqrt(double

x)返回x的平方根。

(返回类型均为double型)2.乘方(1)ceil(doublea)返回大于或等于a的最小整数值。(2)floor(doublea)返回小于或等于a的最大整数值。(3)rint(doublea)返回四舍五入后的整数值。

(上面三个方法的返回类型均为double型)(4)round(floata)

返回四舍五入后的整数值,返回类型为int型。(5)round(doublea)

返回四舍五入后的整数值,返回类型为long型。3.舍入(1)abs(a)返回a的绝对值

a可以是

int、long、float、double型,返回类型与a的类型相同。(2)max(a,b)返回a和b的最大值(3)min(a,b)返回a和b的最小值

(2)、(3)中的a、b类型相同,可以是

int、long、float、double型,返回类型与a、b的类型相同。(4)random()返回一个double型的随机实数,范围是[0.0,1.0)4.其它6.3.1Java.util包的构成6.3.2日期时间类6.3.3向量类及其使用6.3.4哈希表类及其应用

java.util包提供了许多实用的类,如:日期、向量、哈希表、锁和堆栈等。6.3java.util包

java.util包由一些实用类组成的,有些类还是Java语言所不可缺少的。java.util包的大致层次结构如下页图6-4所示。6.3.1java.util包的构成java.util.*图6-4java.util

包层次结构说明:

Dictionary是抽象类,Enumeration和Observer是接口,其余属于普通类;

Hashtable除继承Dictionary类外,还是java.lang类库中Cloneable的一个实现;

BitSet和Vector除继承了类Object外,同时也是java.lang.Cloneable的实现;BitSet是最终类,不能用以创建子类。日期时间类的实例可通过如下几种方法予以创建:

1)publicDate()

这个构造方法将把当前日期和时间保存于所创建的Date实例。

2)publicDate(intyear,intmonth,intdate)

这个构造方法将根据所给定的year、month、date参数创建一个Date实例。也就是说,利用此构造方法,所创建的Date实例表示的日期与年、月、日参数表示的日期等同。6.3.2日期时间类(Date)

日期时间类是一个相对简单、但使用频繁的类,它提供了独立于具体系统的日期/时间的表示形式。3)publicDate(intyear,intmonth,intdate,inthours,intminutes)

这个构造方法类似于第(2)个方法,只不过这里还提供了具体的小时(hours)和分钟(minutes)参数,因而时间要更为精确。4)publicDate(intyear,intmonth,intdate,inthours,intminutes,intseconds)

这个构造方法类似于第(3)个方法,所不同的是这里还提供了具体的(seconds)参数,时间又精确了一些。

一旦创建了日期时间类的一个实例,就可以用它的方法来检索有关日期和时间的信息。

下面是日期时间类的一些方法:

publicintgetYear();

返回当前日期中的年份

publicintgetMonth();

返回当前日期中的月份

publicintgetDate();

返回当前日期中的日(0-31)

publicintgetDay();

确认某天是星期几

publicintgetHours();返回当前日期中的小时数

publicintgetMinutes();返回当前日期中的分钟数

publicintgetSeconds();返回当前日期中的秒数

publicbooleanbefore(Datewhen);对日期实例所代表的时间和when进行比较.若比when早,返回true;否则返回false

publicbooleanafter(Datewhen);对日期实例所代表的时间和when进行比较。若比when晚,返回true;否则返回false

publicbooleanequal(Objectobj);

比较两个日期对象,若相等则返回true;否则返回falsepublicStringtoString();返回当前日期参数的字符串表示形式。注意:不同主机系统的日期表示形式不尽相同

日期时间类的使用非常简单,只需要创建一个类实例不带任何参数,即可以生成一代表当前日期的类。如下所示:

Datetoday=

new

Date();

System.out.println(today.toString());

或者也可用一更为简单的方式:

System.out.println(today);

后一种方式中,println将自动调用toString方法,因而无需显式调用。6.3.3向量类(Vector)及其使用

1.向量和数组的异同2.向量类的构造方法、属性和方法3.建立向量实例4.向量的使用5.对象查找

向量(Vector)和数组存在许多相似之处,它们都是类,均可用以保存列表。数组只能保存固定大小的列表,列表中元素的类型必须一致,必须一次申请所有的存储单元。如果事先无法确定列表内究竟要存放多少对象,Java的数组就无能为力了。向量却提供了一种与“动态数组”相近的概念,它可以动态地增加它的列表长度,列表中元素的类型还可以不一致,但必须都是对象。另外,向量提供了比数组更多的方法。

尽管向量与数组相比有许多重要的优点,但它也有一些不足之处,其中之一是它不能直接存储简单数据类型。1.向量和数组的异同下列场合较适合于使用向量:

1)如果需要频繁进行对象的插入和删除工作,或者需要处理的对象数目不定;

2)列表成员全部都是对象(类型可不一致),或者可以用对象方便地表示;

3)需要很快确定列表内是否存在某一特定对象,并且希望很快了解到对象的存放位置。下列场合较适合于使用数组:

1)所需处理的对象类型一致,数目固定或大致可以确定,尽管具体对象经常发生变化;

2)所需处理的是简单数据类型。

由于向量只能存储对象,故如果需要把简单数据类型保存到向量,必须使用Java的数据类型类,因此,有些场合下使用数组要比使用向量方便一些。1.向量和数组的异同向量类共有3种形式的构造方法,如下所示:

Vector(int

capacity,intcapacityIncrement);

用指定的向量容量及其增量参数,创建一个空向量

Vector(int

capacity);

用给定的向量容量参数,创建一空向量

Vector();创建一空向量2.向量类的构造方法、属性和方法

要使用向量,首先必须创建一个Vector类实例,这通过向量的构造方法创建。

为优化存储管理,Java的每个向量均可以使用一个“向量容量”参数和一个“容量增量”参数。向量容量——向量中可存放的元素个数

容量增量——规定了每当向量元素个数达到极限时,需一次性扩充的向量容量大小向量容量、容量增量

“容量增量”参数说明,当向向量增加元素时,如果向量内元素个数已经达到了向量的极限大小,向量就要申请扩充容量,但它不是申请一个元素的空间,而是多个元素的空间,数目由容量增量参数确定。如果容量增量参数为0,则每次向量容量都将增加一倍大小。设置这两个参数可提高向量类的使用效率。可以忽略这两个参数,这时Java将自动为维护向量的使用,包括必要时向量的增容等。向量类提供了如下3个属性变量:

protectedintcapacityIncrement;

当向量大小不足时,所用的增量大小

protectedintelementCount;

向量的元素个数

protectedObjectelementData[];

向量成员数据所用的缓冲publicfinalsynchronizedvoidcopyInto(ObjectanArray[]);

把向量元素拷贝到指定数组publicfinalsynchronizedvoidtrimToSize();

把向量容量调整到正好等于向量元素个数以压缩向量的存储空间。这样,随后的插入操作将导致重新申请内存空间publicfinalsynchronizedvoidsetSize(intnewSize);

设置向量大小。如果向量被缩小,多余的元素将被截断;如果被放大,新增的向量元素将置为nullpublicfinalintcapacity()

返回向量容量publicfinalintsize()

返回向量的元素个数,注意和capacity()之间的区别

一旦创建了一个向量类的实例,就可以用它的方法来执行插入、删除及查找对象等操作。向量类提供了极为丰富的方法,下面是其中一些主要的方法:publicfinalBooleanisEmpty()

若向量不包括任何元素,返回true;否则返回falsepublicfinalsynchronizedEnumerationelements()

返回向量元素所对应的枚举值,以便随后用

Enumeration()方法获取该向量元素publicfinalbooleancontains(Objectelem)

若向量中包括了对象elem,返回true;否则返回falsepublicfinalintindexOf(Objectelem)

返回向量下标;若对象不存在,返回-1publicfinalsynchronizedintindexOf(Objectelem,intindex)

从指定位置(index)开始搜索向量,返回对象所对应的向量下标值。若未找到对象,返回-1publicfinalintlastIndexOf(Objectelem)

从向量末尾向前搜索向量,返回对象的下标值publicfinalsynchronizedintlastIndexOf(Objectelem,intindex)

从指定位置开始向前搜索向量,返回给定对象的下标值publicfinalsynchronizedObjectelementAt(intindex)

返回指定下标处的对象。若下标值非法,抛出一

ArrayIndexOutOfBoundsException异常情况publicfinalsynchronizedObjectfistElement()

返回向量的第一个元素。若向量为空,抛出一个

NoSuchElementException异常情况publicfinalsynchronizedObjectlastElement()

返回向量的最后一个元素。若向量为空,抛出一

NoSuchElementException异常情况

publicfinalsynchronizedvoidsetElementAt(Objectobj,intindex)

把给定对象存放到给定下标处,该下标处的原有对象丢失.若下标值非法,抛出异常情况ArrayIndexOutOfBoundsExceptionpublicfinalsynchronizedvoidremoveElementAt(intindex)

删除给定下标处的向量元素,后面元素前移一个位置。若下标值非法,抛出异常情况ArrayIndexOutOfBoundsException

publicfinalsynchronizedvoidinsertElementAt(Objectobj,intindex)

把给定对象插入到指定下标处.该下标之后的元素后移一个位置.若下标值非法,抛出异常ArrayIndexOutOfBoundsExceptionpublicfinalsynchronizedvoidaddElement(Objectobj)

把给定对象增加到向量末尾publicfinalsynchronizedbooleanremoveElement(Objectobj)

从向量中删除指定对象。若给定对象在向量中有多个,则只删除其第一个实例。若向量中没有这个对象,返回falsepublicfinalsynchronizedvoidremoveAllElements()

删除向量中的所有对象。这时向量将变成空向量publicfinalsynchronizedStringtoString()

把向量转换成字符串。请注意:这个方法实际上覆盖了Object类中的toString()方法

和数组一样,向量需要声明并实例化才可使用,其内存空间通过new操作符分配的。例如:

VectortheVector=newVector();一个向量在被创建后,将自行在系统内部维护一个专用数组,并在必要时对数组大小进行动态调整。例如,如果插入一个向量元素时,向量的空间需求超过了这个内部数组的大小,向量将向系统申请一些新的内存空间。3.建立向量实例

例:

VectortheVector=

new

Vector();

for(inti=0;i<10;i++)

{

IntegernewInteger=

new

Integer(i);

theVector.addElement(newInteger);

}

4.向量的使用

创建向量实例之后,就可以把对象插入到向量。这时将用addElement()方法。addElement()方法把对象插入到向量末尾。

向量可用以保存任何类型的对象,同一个向量实例甚至还可以保存多种不同类型的对象。VectortheVector=new

Vector();StringtestString;

testString=“pai”;

theVector.addElement(testString);

FloattestFloat=newFloat(3.14);

theVector.addElement(testFloat);

testString=“Faill”;

theVector.addElement(testString);

testFloat=newFloat(59);//注:书上少此句

theVector.addElement(testFloat);

增加向量元素的另一方式是通过insertElementAt()方法。该方法把对象插入到向量的给定位置。下面的例子是给向量交错插入一些浮点数和字符串。执行这段代码,将建立如下向量:

{“pai”,3.14,“Faill”,59}

另一经常用到的维护操作是从向量中删除一个对象。这时有3个方法可用:

removeElement();删除指定对象

removeElementAt();删除给定位置处的对象

removeAllElement();删除所有向量成员

前两个方法在删除一个元素之后,后面的对象将前移一个位置。

对于前面例子中介绍的向量,下面语句将删除其中的3.14和59,而不是3.14和“Faill”。

FloatdeleteFloat=

new

Float(3.14);

theVector.removeElement(deleteFloat);

theVector.removeElementAt(2);

与数组相比,向量的优势之一在于它提供了丰富的方法,以便能方便快捷地从向量中查找对象。对象查找中最常遇见的情况是给定一个下标值,希望由此确定该下标处的对象。这时可使用elementAt()方法。5.对象查找

对应前面的程序,下面这行程序返回一对象引用,该引用指向向量成员”pai”

ObjecttempObj=theVector.elementAt(0);

当需要确定向量中是否包括了某一确定的对象时,可使用contains()方法。publicfinalBoolean

contains(Objectelem);

这个方法返回一布尔值。若向量包含了对象elem,返回true,否则返回false。

用下标来访问数组元素,这是使用数组的最有效方法。向量成员也可用下标进行访问,

方法有:

elementAt()

返回给定下标处的对象

indexOf()

从给定下标处往后搜索向量中是否包含指定的的对象

lastIndexOf()从给定下标处往前搜索向量中是否包含指定的的对象利用下标进行访问

indexOf()和lastIndexOf()方法的完整声明形式如下:

publicfinalsynchronizedint

indexOf(Objectelem,intstart_index)

public

finalsynchronizedint

lastIndexOf(Objectelem,

int

start_index)

这两个方法均用以从给定下标开始搜索向量,确定向量中是否包含了指定的对象。如果是,则返回该对象的下标值,否则返回-1。1.哈希表类的构造方法和成员方法

2.哈希表的使用

哈希表和向量一样,可用以保存列表,列表中元素也必须都是对象。哈希表是一种支持对表中元素进行快速检索的线性表,该线性表的重要特征在于表中元素的平均检索时间与表中的元素个数无关。哈希表是利用“码值(关键字)—元素”形式的存储列表的元素,其中“码值”表示元素在哈希表中的编码(相当于索引),“元素”是元素的实际值。6.3.4哈希表类(Hashtable)及其应用1)构造方法

哈希表(Hashtable)类共有三种形式的构造方法:

public

Hashtable(int

initialCapacity,floatloadFactor);

参数initialCapacity给定哈希表创建初始可容纳的元素数量,loadFactor为装载因子,取值0.

温馨提示

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

评论

0/150

提交评论