类的知识点案例_第1页
类的知识点案例_第2页
类的知识点案例_第3页
类的知识点案例_第4页
类的知识点案例_第5页
已阅读5页,还剩27页未读, 继续免费阅读

付费下载

下载本文档

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

文档简介

类的补充案例

案例1类的定义

一'案例描述

1、考核知识点

类的定义

2、练习目标

>掌握类定义的格式

>掌握如何在类中定义成员变量和成员方法

3、需求分析

在程序中,设计一个表示学生的类,该类具有以下属性和方法:

•该类具有表示姓名的属性name

•该类具有表示年龄的属性age

•该类具有表示说话行为的方法speak,并且用于输出学生的姓名和年龄

4、设计思路(实现原理)

1)使用class关键字定义一个表示学生类型的类,类名为Student。

2)在Student类中定义两个成员变量name和age,分别用来表示姓名和年龄。其中,name的数

据类型为String,变量age的数据类型为into

3)在Student类中定义一个表示说话行为的speak()方法,用于输出学生的姓名和年龄。

二,案例实现

class

Student{Str

ingname;

intage;

voidspeak(){

System.out.printin("我的名字是"+name+"»今年"+age+"岁”);

)

三、案例总结

1、Java语言严格区分大小写,class和Class是不同的,在定义类是只能使用class关键字

2、在例程中,成员变量name是String类型,String表示一个字符串,后面的章节会详细讲解

3、思考一下:自己定义一个手机(Phone)类,在类中定义品牌(brand)和价格(price)属性,定义打电话的

call。方法,代码如下所示

publicclassPhone

{Stringbrand;

doubleprice;

voidcall(){

n

System.out.printIn(hizhowareyoudoing");

}

案例2对象的创建及对象内存图

一、案例描述

1、考核知识点

对象的创建和引用

2、练习目标

>掌握创建对象的方式

>了解对象在内存中的状态

3、需求分析

根据定义的Student类,创建一个学生对象,该学生对象的姓名为张三,年龄为18,然后调用speak

方法输出所创建对象的姓名和年龄。

4、设计思路(实现原理)

1)定义一个类Example。1

2)在ExampleOl类的main()方法中,使用new关键字创建一个学生对象,并定义变量si引用该

对象。

3)为变量si所引用的学生对象赋值,其中,name属性的值为张三,age属性的值为19.

4)通过变量si调用speak方法,输出si对象的姓名和年龄。

二、案例实现

定义ExampleOl类,其代码如下:

publicclassExampleOl{

publicstaticvoidmain(String[]args)

{Studentsi=newStudent();

si.name="张三”;

si・age=19;

si・speak();

}

}

运行程序,结果如下所示:

2

a命令提示符

D:XsanplePackage>jauaExample。!.

我的名字是张三,今年19岁

三、案例总结

1、创建类的实例对象使用new关键字,其格式为:类名变量名=new类名()。

2、在代码Studentsi=newStudent。;中,newStudent。的作用是创建一个Student类的实例对象,虚拟

机会在内存中为这个对象开辟一块空间,并给这块空间分配一个地址,“=”的作用是将Student对象所占

用内存空间的地址赋值给变量si,这样si便持有了Student对象的引用,可以通过si来访问该对象的成

员并进行赋值。为了更加深刻地了解这句代码的含义,下面通过一张内存图来演示,具体如下所示:

内存r

newStudent()、

(对象[出澄namely

/°x3000age=19

Students10x3000

speak()

案例3一个类创建多个对象

一、案例描述

I、考核知识点

对象的创建和引用

2、练习目标

>理解根据同一个类创建的不同实例对象,各自拥有的成员变量和成员方法是独立的,互不影

响的。

3、需求分析

根据定义的Student类,在例程2的基础上,创建第二个学生对象,该学生对象的姓名为李四,

年龄为20,然后通过调用speak方法输出第二个学生对象的姓名和年龄。

4、设计思路(实现原理)

1)在Example类中创建第二个Student对象,并使用变量s2引用该对象

2)为变量s2所引用的学生对象赋值,其中,name的值为李四,age的值为20。

3)通过变量s2调用speak方法,输出s2对象的姓名和年龄。

3

二、案例实现

1、对案例2中的代码进行修改,如下所示:

publicclassExampleOl{

publicstaticvoidmain(String[]args)

{Studentsi=newStudent();

si.name="张三”;

si,age=18;

si.speak();

Students2=newStudent();

si.name="李四

si.age=20;

si,speak();

}

}

运行程序,结果如下所示:

|打命令提示符M回

□

|D:\samplePackage>javaExampleOl

三,今年19岁

四,今年20岁

LrJ

三、案例总结

一个类可以创建多个对象,虚拟机会为每一个对象分配一块内存空间,在各自独立的空间中,每个对

象都拥有各自独立成员变量和成员方法,彼此互不影响。在上面的代码中,创建了两个Student的实例对

象,由于每个对象拥有各自独立的属性,因此在程序中使用="李四”和s2.age=20语句只是修改

了第二个Student对象的属性,对第一个Student对象的属性值没有任何影响。为了更加直观地了解代码的

运行情况,下面我们画出两个Student实例对象在内存中的状态图,如下所示:

if,J

newStudent()f,

name=张三

age=19

speak()

newStjjdent()

name=李四

age=20

speak()

4

案例4不同变量引用同一个对象

一、案例描述

1、考核知识点

对象的引用

2、练习目标

>掌握使用两个或者多个变量引用同一个实例对象。

3、需求分析

在程序中,一个对象可能在多处使用,这样就可能需要有多个变量来引用这个对象。例如,在案

例2的基础上,创建第三个学生对象,该对象使用变量S3引用,请思考,如果将s2对象赋值给S3,S3

对象调用speak。方法后,程序的运行结果是什么?

4、设计思路(实现原理)

1)在ExampleOl类中创建第三个Student对象,并使用变量s3引用该对象

2)将s2的值赋给s3,然后使用s3调用speak。方法。

二、案例实现

1、对案例3中的代码进行修改,如下所示:

publicclassExampleOl{

publicstaticvoidmain(String[]args)

{Studentsi=newStudent();

si.name="张三”;

si,age=18;

si.speak();

Students2=newStudent();

s2.name=”李四,

s2•age=20;

s2.speak();

Students3=newStudent();

s3=s2;

s3.speak();

}

}

运行程序,结果如下所示:

5

友命令提示符

9s驾a□

D:的ep>JEx

是

^amacsre人av^

名

^年19

Z__I

的

是

^览^

名

?年20

w

的

是

我

岁

名

77.年20

三、案例总结

1、StudentS3=s2这句代码的作用是将s2引用的内存地址赋值给s3,换句话说,就是使变量s3和s2

引用了同一个Student对象,因此s3.speak。方法和s2.speak()方法打印的结果相同。为了更加深刻地了解这

句代码的含义,下面通过一张内存图来演示,具体如下所示:

一”~一------

//嘀存newStudent()

name=张三

age=19

S1

speak()

2、可以使用两个或者多个变量引用同一个实例对象,只要通过其中一个变量对该对象的属性进行修

改,使用其它引用变量访问时,访问的都是修改后的属性。

案例5垃圾对象

一、案例描述

1、考核知识点

垃圾对象

2、练习目标

>理解对象不被任何对象引用时,就会变成垃圾对象。

3、需求分析

每个创建的对象都有自己的生命周期,对象只有在有效的生命周期内被使用。请思考,变量si

在指向Student对象和null两种情况下,调用speak()方法有什么不同?

4、设计思路(实现原理)

1)定义测试类ExampleO2,并在main()方法中创建一个Student对象,该对象使用变量si引用。

2)通过变量si调用speak。方法

3)将si的值设置为null。

4)再次通过si调用speak。方法

6

二、案例实现

定义Example02类,代码如下所示:

publicclassExample02{

publicstaticvoidmain(String[]args)

{Studentsi=newStudent();

si,speak();

si=null;

si.speak();

)

}

程序编译时发生了错误,如下所示:

cT命令提示符

D:\samplePackage>javaExample02

我的名字是张三,今年19岁

Exceptioninthread"main"jaua.lang.NullPointerException

atExa(nple02.main<Exanple02.java:6>

三、案例总结

1、null是一种特殊的常量,当一个变量的值为null时,表示该变量不引用任何一个对象。因此,当执

行完si=null语句后,si不再引用Student对象,这时Student对象就变成了垃圾对象,如果再次通过si

变量去调用它的speak()方法就会发生异常。上面程序的运行过程,可以通过一张图例来表示,如下所示:

Students1=newStudent();—>s1-----XStudernx^)

s1=null;—>s1(Student过委>

null

2、思考一下:如果有两个Student类型的变量s2和s3引用同一个Student对象,这时如果把s2置为

null,那么这个Student对象会变成垃圾对象吗?下面通过一张图例对这种情况进行演示,如下所示:

Students2=newStudent();——s2卜Yjjtuden诲至1

从图中可以看出,当将变量s2置为null后,变量S3仍然引用Student对象,因此这个对象不会变成垃

7

圾对象

3、异常简单来说就是在程序执行过程中发生的错误,空指针异常是异常的一种。在本案例中,大家

不需要对异常进行深究,后面的章节会进行详细地讲解。

案例6垃圾回收机制

一、案例描述

1、考核知识点

垃圾回收机制

2、练习目标

>掌握垃圾回收机制的特点

>掌握垃圾回收相关的方法

3、需求分析

垃圾对象会占用一定的内存空间,当垃圾对象积累到一定程度后,Java虚拟机会自动进行垃圾回

收。但是,如果希望程序可以及时通知Java虚拟机回收垃圾对象,可以通过System.gc()方法强制启动垃圾

回收器回收垃圾。需要注意的是,在调用System.gc()方法之前,还会调用finalize。方法。请对Student类

进行修改,编写一个测试类观察System.gc()和finalize。方法的执行情况。

4、设计思路(实现原理)

1)对Sludent类进行修改,该类中对finalize。方法进行重写。

2)编写测试类Example02,创建若干个Student对象,然后调用System.gc()方法通知垃圾回收

期回收垃圾

3)为了延长程序的执行时间,可以编写一个简单的循环语句。

二'案例实现

1>对Studenl类进行修改,代码如下所示:

classStudent{

publicvoidfinalize(){

System,out.printIn("垃圾对象被I可收了“);

)

)

2、对Example02类进行修改,代码如下所示:

publicclassExample02{

publicstaticvoidmain(String[]args){

newStudent();

newStudent();

System.gc();

for(inti=0;i<1000000;i++){

//延长程序结束:时间

}

}

8

运行程序,结果如下所示:

三、案例总结

1、从运行结果可以看到,两个Student对象的finalize。方法都被调用了,这表示两个对象作为垃圾被

回收了。如果把System.gc()这行代码注释,会发现命令行窗口不会打印任何内容,这说明对象在变成垃圾

后不会被立即回收,同时也验证了System.gc()方法的作用。

2、由于System.gc()方法只是通知Java虚拟机尽快进行垃圾回收,这意味着垃圾回收器也可能不会马

上运行,因此,在程序的最后使用了一个for循环来延长程序运行的时间,从而确保能够看到垃圾对象被

回收的过程。

3、Student类中定义的finalize。方法其签名必须是public(protected)voidfinalize()[throwThrowable]{},

这样做的原因会涉及到后面的一些知识,比如类的继承、Object类、方法的重写、异常等等,同学们在学

完这些内容后就会明白其中的道理。

案例7类的封装

一、案例描述

1、考核知识点

类的封装

2、练习目标

>了解为什么要对类进行封装

>了解如何实现类的封装

3、需求分析

在案例2中,si对象的年龄是可以随便赋值的,如果将age的值赋值为-30,显然违背了事实。

请根据需求,对Student类进行修改,通过封装来实现对年龄的限制。

4、设计思路(实现原理)

1)编写测试类Example03,将属性age的值设为-30,演示不合理现象。

2)对Student类进行修改,将name和age属性使用private修饰,然后定义getName()ssetName(String

n)、getAge()和setAge(inta)四个对外访问name和age的方法。

3)在setAge(inta)方法中对传入的参数进行检查,如果输入值为负数,则打印出“设置的年龄不

合法”,如果不为负数,才将其设置为age属性的值。

4)对Example03类进行修改,在main。方法中创建Student类的实例对象,通过调用对象的

setName(Stringn)和setAge(inta)方法来设置的name属性和age属性值,并调用speak。方法。

9

案例实现

1、定义ExampleO3类,代码如下所示:

publicclassExample03{

publicstaticvoidmain(String[]args)

{Studentsl=newStudent();

sl.name="小新”;

si.age=-30;

si.speak();

}

}

运行程序,结果如下所示:

从上图可以看出,当将age的值设置为-30后,程序不会报错,但却违背了现实。

2、对Student类进行封装,其代码如下:

classStudent{

privateStringname="张三”;

privateintage=19;

publicStringgetName(){

returnname;

)

publicvoidsetName(Stringn){

name=n;

}

publicintgetAge(){

returnage;

)

publicvoidsetAge(inta){

//对传入的参数进行检查

if(a<0){System.out.printin("设置的年龄

不合法”);

}else{

age=a;

)

}

voidspeak(){

System.out.printin("我的名字是“+name+">今年"+age+"岁”);

}

10

3、对ExampleO3类进行修改,代码如下所示:

publicclassExample03{

publicstaticvoidmain(String[]args)

{Studentsi=newStudent();

si.setName("小新”);

si・setAge(-30);

si.speak();

}

}

4、运行程序,结果如下图所示:

三、案例总结

1xStudent的name和age属性使用private关键字修饰为私有后,在Example03类中不能再使用

和sl.age的方式访问这两个属性,只能通过public类型的setName(Stringn)和setAge(inta)方法进行访问。

在上面的代码中,调用setAge(inta)方法时的传入参数为・30,由于参数小于0,会打印出“设置的年龄不

合法”,并不会被将负数赋值给age属性。由此可见,只要实现了封装就能对外界的访问进行控制,避免对

私有变量随意修改而引发问题。

2、思考一下:定义一个Division类(除法),类中定义两个ini类型的私有成员变量dividend(被除数)和

divisor(除数),默认值都为1。定义四个公有方法setDividend(inlmDividend)、getDividend()>setDivisor(int

mDivisor)和getDivisor。对这两个私有属性进行访问。在setDivisor(intmDivisor)方法中对传入的参数进行检

查,如果传入值为零则打印“除数不能为零”,如果不为零,才将其设置为divisor属性的值。

定义Example04类,在类的main。方法中创建Division对象,分别调用setDividend(intmDividend)和

setDivisor(intmDivisor)方法给两个私有属性dividend和divisor赋值,然后打印出dividend/divisor的结果。

(1)定义Division类,代码如下所示:

publicclassDivision

{privateintdividend=

1;privateintdivisor=

1;

publicvoidsetDividend(intmDividend){

dividend=mDividend;

}

publicintgetDividend(){

returndividend;

)

publicvoidsetDivisor(intmDivisor){

if(mDivisor==0)

{System.out.println("除数不能为零

n);

}else{

divisor=mDivisor;

11

)

)

publicintgetDivisor(){

returndivisor;

⑵定义Example04类,代码如下所示:

publicclassExample04{

publicstaticvoidmain(String[]args)

{Divisiondivision=newDivision();

division.setDividend(10);

division.setDivisor(0);

intdividend=division.getDividend();

intdivisor=division.getDivisor();

System.out.printIn(dividend/divisor);

}

)

运行程序,结果如下所示:

京命令提示符■回

D:\samplePackage>javaExample04

除数不能为零

10

从运行结果可以看出,由于实现了Division类的封装,在setDivisor(intmDivision)方法中对传入的除

数值进行检查,从而避免了程序中出现除数为0的错误。

案例8定义无参的构造方法

一、案例描述

1、考核知识点

构造方法的定义

2、练习目标

>掌握如何定义构造方法

>掌握构造方法的执行情况

3、需求分析

当通过new关键字创建对象的时候,都会调用类的构造方法。请在Student类中定义一个无参的

构造方法,编写一个测试类,演示创建Student对象时,构造方法的调用情况。

4、设计思路(实现原理)

1)定义一个Student类,并在类中定义一个无参的构造方法

2)编写一个测试类Example05,在main()方法中创建一个对象。

12

二、案例实现

1、对Student类进行修改,代码如下所示:

classStudent{

publicStudent(){

System.out.printin("构造方法被调用了“);

)

)

2>定义Example05类,代码如下所示:

publicclassExample05{

publicstaticvoidmain(String[]args)

{Studentsi=newStudent();

}

)

运行程序,结果如下所示:

京命令提示符

D:\samplePackage>jauaExample05fil

构造方法被调用了

Id

三、案例总结

1、代码newStudent。会创建一个Student的实例对象,同时会调用构造方法Student。,因此程序打印

出了“构造方法被调用了

2、构造方法名的前面没有返回值类型的声明,也不能有void关键字

案例9定义有参的构造方法

一、案例描述

1>考核知识点

构造方法的定义

2、练习目标

>掌握有参构造方法的定义方式

>理解系统自动分配无参的构造方法

3、需求分析

如果希望创建对象的时候,可以为属性赋值,可以定义有参的构造方法•请在Student类中定义

一个有参数的构造方法,编写测试类Example06,并在创建Student对象时,为对象的age属性赋值。

4、设计思路(实现原理)

1)定义一个Student类,并在类中定义一个有参数的构造方法,该参数用于为age属性赋值

2)编写一个测试类Example06,在main()方法中创建一个对象,并为age属性赋值。

13

二、案例实现

1、对Student类进行修改,代码如下所示:

classStudent{

intage;

publicStudent(intmAge){

age=mAge;

}

)

2、定义Example06类,代码如下所示:

publicclassExample06{

publicstaticvoidmain(String[]args)

{Studentsi=newStudent(20);

System.out.printIn("age属性的值为:H+sl.age);

)

}

运行程序,结果如下所示:

I式命令提示符

□

D:\samplePackage>jauaExampleOG

age属性的值加2。

三、案例总结

1、从运行结果可以看出,newStudent(20)语句调用了有参的构造方法Student(intmAge),动态地将20

传递给了age属性。和普通方法一样,构造方法中同样可以接收多个参数,只要在使用new关键字创建对

象时,传入数量相同和类型一致的参数,就可以自动地调用对应的构造方法。

2、思考一下:在Example06的main()方法中是否能够使用newStudent。创建对象呢?答案是否定的,

因为newStudent。会调用无参的构造方法,而本案例的Student类中并没有定义无参的构造方法。

有些同学肯定会问,案例9之前的Student类都没有定义无参的构造方法,却能使用newStudent()

创建对象,本案例为什么不行呢?这是因为一个类中如果没有定义构造方法,系统会默认为其分配一个方

法体为空的无参构造方法,而一旦定义了构造方法,系统就不再提供默认的构造方法。本案例中由于我们

定义了一个有参的构造方法,所以系统不会默认分配无参的构造方法,如果通过newStudent。去调用无参

的构造方法,程序就会发生错误。

案例10构造方法的重载

一\案例描述

1、考核知识点

构造方法的重载

14

2、练习目标

A掌握如何在类中定义重载的构造方法

3、需求分析

和普通方法一样,构造方法也可以重载。通过调用不同的构造方法,可以为不同的属性进行赋值。

请在Student类中定义三个重载的构造方法,编写测试类Example07,通过创建对象的方式演示不同

构造方法的调用情况。

4、设计思路(实现原理)

1)对Student类进行修改,在类中定义三个重载的构造方法,包括无参的构造方法,接收一个String

类型参数的构造方法,接收String类型和int类型两个参数的构造方法。

2)编写测试类ExampleO7,在mian()方法中,分别使用三个重载的构造方法创建三个Student对

象。

二、案例实现

1、对Student类进行修改,代码如下所示:

classStudent{

publicStudent(){

System.out.printIn("无参的构造方法”);

)

publicStudent(Stringname){

System.out.printin("一个参数的构造方法");

}

publicStudent(Stringname,intage){

System.out.printIn("两个参数的构造方法”);

}

)

2、定义Example07类,代码如下所示:

publicclassExample07{

publicstaticvoidmain(String[]args)

{Studentsi=newStudent();

Students2=newStudent("Rose");

Students3=newStudent("Rose",23);

}

运行程序,结果如下所示:

P□

pl构

ep造

ka番

>j称

&:X参S

无

an的

ac方

ge方

__I

数

的

个

方

参

构

一

造

数

的

个

两

参

构

LJ

15

三、案例总结

在一个类中可以定义多个重载的构造方法,在创建对象时,根据传入参数的不同会调用相应的构造方

法。

案例11this关键字访问类的成员

一、案例描述

1、考核知识点

this关键字访问类的成员

2、练习目标

>掌握使用this关键字访问类的成员

3、需求分析

在定义的方法中,难免会出现局部变量和成员变量重名的现象,为了避免这种现象,可以使用this

关键字。例如,在案例7定义的setName(Stringn){name=n}方法中,如果将参数n的名称修改为name,

势必会造成参数名与成员变量名发生冲突。请对案例7中Student类进行修改,使用this关键字将

selName。方法中的成员变量和局部变量加以区分。

4、设计思路(实现原理)

1)对Student类进行修改,将setName。方法中的参数名改为name,使用=name区分成

员变量和局部变量。

2)编写测试类ExampleO8,在main。方法中创建Student对象,并调用setName。方法和getName()

测试程序。

二、案例实现

1、对Student类进行修改,代码如下所示:

classStudent{

privateStringname;

publicvoidsetName(Stringname){

=name;

)

publicStringgetName(){

returnname;

)

)

2^定义Example08类,代码如下所示:

publicclassExample08{

publicstaticvoidmain(String[]args)

{Studentsi=newStudent();

si・setName("Lily");

16

Stringname=si.getName();

System.out.printin("我的名字叫"+name);

}

)

运行程序,结果如下所示:

三、案例总结

1、setName(Stringname)方法中的参数名和成员变量相同,为了区分两者,在方法中使用了this关键

字,this可以理解为是调用这个方法的对象的引用,因此表示这个对象的成员变量name。

2^在getName。方法中,使用return语句返回了一个name变量的值,而在该方法中并没有定义名为

name的局部变量,因此,返回的是成员变量name,即0由于在getName。方法中不存在同名的

成员变量和局部变量的冲突,this关键字是可以省略的。

3、思考一下:在一个方法中如何去访问其它的成员方法呢?这和在方法中访问成员变量是一样的,

也可以使用this关键字。例如在Student类中定义两个方法sleep。和snore(),如果要在sleep。方法中访问

snore。方法,可以通过this.snore。的方式,代码如下所示:

classStudent{

voidsleep(){

this.snore();

)

voidsnore(){

)

}

Java语言中,由于在方法中不能再定义方法,所以不会出现类似成员变量和局部变量冲突的问题,因

此在一个方法中访问其它成员方法,this关键字都可以省略。

案例12this关键字访问构造方法

一、案例描述

1、考核知识点

this关键字访问构造方法

2、练习目标

>掌握如何在构造方法中使用this关键字访问重载的构造方法

3、需求分析

如果一个类中定义了多个重载的构造方法,为了避免在重载的构造方法中书写重复的代码,可以

在一个构造方法中使用this关键字调用其它的构造方法。请在Student类中创建多个重载的构造方法,

编写一个测试类演示如何使用this关键字访问构造方法。

17

4、设计思路(实现原理)

1)在Student类中创建多个重载的构造方法,

2)在重载的构造方法中使用this关键字调用其它的构造方法。

3)编写测试类Example。%在mian()方法中,调用其中的一个构造方法创建对象,演示使用this

关键字访问构造方法的执行顺序。

二,案例实现

1、对Student类进行修改,代码如下所示:

classStudent{

publicStudent(){

System.out.printIn("无参的构造方法”);

}

publicStudent(Stringname){

this();

System.out.printIn("一个参数的构造方法”);

}

publicStudent(Stringname,intage){

this(name);

System.out.printIn("两个参数的构造方法”);

)

)

2、定义Example09类,代码如下所示:

publicclassExample09{

publicstaticvoidmain(String[]args)

{Studentsi=newStudent("Jack",

22);

运行程序,结果如下所示:

aa

ka>j

ac售i

方9e

方

方

构

造

构

三、案例总结

1、从运行结果可以看出,三个构造方法都被调用了,为了更加清楚地了解三个构造方法的执行顺序,

下面通过一张图例进行说明:

18

Student()

温馨提示

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

评论

0/150

提交评论