【ppt文档资料】【精品课件】 精品ppt课件--java语言程序设计(第三版,清华)第4章-java2实用教程4.1..._第1页
【ppt文档资料】【精品课件】 精品ppt课件--java语言程序设计(第三版,清华)第4章-java2实用教程4.1..._第2页
【ppt文档资料】【精品课件】 精品ppt课件--java语言程序设计(第三版,清华)第4章-java2实用教程4.1..._第3页
【ppt文档资料】【精品课件】 精品ppt课件--java语言程序设计(第三版,清华)第4章-java2实用教程4.1..._第4页
【ppt文档资料】【精品课件】 精品ppt课件--java语言程序设计(第三版,清华)第4章-java2实用教程4.1..._第5页
已阅读5页,还剩161页未读 继续免费阅读

下载本文档

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

文档简介

1,第二章类与对象的基本概念,Java2实用教程-4.2-4.7,JAVA语言程序设计,2,目录,2.1 面向对象的程序设计方法概述2.2 类与对象 2.3 对象初始化和回收 2.4 应用举例 2.6 本章小节,3,2.1 面向对象的程序设计方法概述,面向对象的程序设计与结构化程序设计方法相比,更符合人类认识现实世界的思维方式 已成为程序设计的主流方向涉及的主要概念抽象封装继承多态,4,2.1 面向对象的程序设计方法概述,面向对象的程序设计结构化程序设计结构化方法的本质是功能分解,从代表目标系统整体功能的单个处理着手,自顶向下不断把复杂的处理分解为子处理 结构化方法是围绕实现处理功能的“过程”来构造系统用户的需求往往基于功能面向对象的方法学认为世界由各种对象(数据和对数据操作)组成,任何事物都是对象,是某个类的实例,复杂的对象可由较简单的对象的某种方式组成 对象具有与现实世界的某种对应关系,正是利用这种关系对问题进行分解,与结构化程序设计方法相比,更符合人类认识现实世界的思维方式,5,对象现实世界中万物皆对象都具有各自的属性,对外界都呈现各自的行为 程序中一切都是对象都具有标识 (identity), 属性和行为(方法)通过一个或多个变量来保存其状态通过方法(method) 实现他的行为,2.1 面向对象的程序设计方法概述(续),6,类将属性及行为相同或相似的对象归为一类类可以看成是对象的抽象,代表了此类对象所具有的共有属性和行为在面向对象的程序设计中,每一个对象都属于某个特定的类类是面向对象程序设计的基本单位,程序运行时由类生产对象,对象之间通过发送消息进行通信类的四大特点:抽象、封装、继承、多态,2.1 面向对象的程序设计方法概述(续),7,2.1.1 抽象,抽象忽略问题中与当前目标无关的方面,以便更充分地注意与当前目标有关的方面如:驾驶员更关心汽车的属性、行为,而汽车的内部构造则不用去关心计算机软件开发中所使用的抽象有过程抽象:将系统的功能划分为若干部分,按照“自顶向下方式逐步求精”,强调功能完成的过程和步骤,隐藏具体实现数据抽象:将系统中需要处理的数据和对数据的操作结合在一起,抽象成不同数据类型。面向对象程序设计主要特点就是采用了数据抽象的方法来构建程序的类及对象,class XiyoujiRenwu float height,weight; String head, ear,hand,foot, mouth; void speak(String s) System.out.println(s); ,public class Clock int hour, minute, second; public void setTime(int newH, int newM, int newS) hour = newH; minute = newM; second = newS; public showTime() System.out.print(hour, minute, second); ,8,例:钟表数据(属性)int Hour; int Minute; int Second;方法(行为)SetTime(); ShowTime();,2.1.1 抽象(续),9,例:人数据(属性)char *name; char *gender; int age; int id;方法(行为)生物行为Eat(), Step(),社会行为Work(), Study(),2.1.1 抽象(续),10,2.1.2 封装,封装是一种信息隐蔽技术,与数据抽象密切相关利用抽象数据类型将数据和基于数据的操作封装在一起用户只能看到对象的封装界面信息,对象的内部细节对用户是隐蔽的外界需要访问类里的数据需要通过接口进行封装的目的在于将对象的使用者和设计者分开,使用者不必知道行为实现的细节,只需使用设计者提供的消息来访问对象,11,封装的定义清楚的边界所有对象的内部信息被限定在某个边界内接口对象向外界提供的方法,外界可以通过这些方法与对象进行交互受保护的内部实现功能的实现细节不能从类外访问。,2.1.2 封装(续),12,封装的意义在面向对象的程序设计中,类封装了数据及对数据的操作,是程序中的最小模块禁止了外界直接操作类中的数据,模块与模块之间只能通过严格控制的接口进行交互,这使得模块之间的偶合度大大降低,保证了模块具有较好的独立性防止程序员接触不该接触的内容-设计思想允许设计人员对库内部结构进行修改,而不会对用户程序造成影响程序维护和修改较为容易,2.1.2 封装(续),13,2.1.3 继承,继承是指新的类可以获得已有类(称为超类、基类或父类)的属性和行为,称新类为已有类的派生类(也称为子类),体现了面向对象设计方法的共享机制 在继承过程中派生类继承了基类的特性,包括方法和实例变量派生类也可修改继承的方法或增加新的方法,使之更适合特殊的需要有助于解决软件的可重用性问题,使程序结构清晰,降低了编码和维护的工作量,14,单继承任何一个派生类都只有单一的直接父类类层次结构为树状结构多继承一个类可以有一个以上的直接父类类层次结构为网状结构,设计及实现比较复杂Java语言仅支持单继承,2.1.3 继承(续),15,2.1.4 多态,多态相同的操作可作用于多种类型的对象上,并获得不同的结果 操作名的多态:即多个操作具有相同的名字,但接收消息的类型不同(如:对字符和数值型数据的排序;不同形状面积的计算)与继承有关的多态:同一操作被不同对象调用时可能产生不同的行为(如:drivecar 、motorcycle )很好地解决了应用程序方法同名问题,具有行为共享、代码共享的优势,17,2.2 类,类与对象在程序中,对象是通过一种抽象数据类型来描述的,这种抽象数据类型称为类(Class)一个类是对一类对象的描述, 封装了一类对象的状态和方法。类是组成Java程序的基本要素,是用来定义对象的模板。对象是类的具体实例。如:篮球是球类的一个实例、计科学生是学生的一个实例总结:类向用户提供的是一种服务,18,对象是类的具体实例,是类的属性和功能的封装体 对象数据作用于数据的操作对象有两个层次的含义现实世界中对象是客观世界的实体程序设计中对象是一组变量和相关方法的集合。其中变量表示对象的特征,方法表示对象的行为,19,2.2.1 类声明,类的实现包括两部分:类声明和类体。class People “class People”叫做类声明;“People” 是类名。习惯上类名的第一个字母大写,但这不是必须的。,20,2.2.2. 类体,写类的目的是为了描述一类事物共有的属性和功能,描述过程由类体来实现。类声明之后的一对大括号“”,“”以及它们之间的内容称做类体,大括号之间的内容称做类体的内容。类体的内容由两部分构:一部分是变量的定义,用来刻画属性;另一部分是方法的定义,用来刻画功能。,21,class Lander float upper, lower, hight, laderArea; /变量定义部分 float CompArea() /方法定义 laderArea=(upper+lower)*hight/2.0; return laderArea; void ModifyHight(float h) /方法定义 hight=h; ,22,2.3 对象,类是创建对象的模板。当使用一个类创建了一个对象时,我们给出了这个类的一个实例。,类,对象或实例,属性和行为,23,2.3.1.创建对象,创建一个对象包括对象的声明和为对象分配内存两个步骤。 (1)对象的声明。一般格式为: 类的名字 对象名字;如: People zhangSang;,24,(2)为声明的对象分配内存 使用new运算符和类的构造方法为声明的对象分配内存,如果类中没有构造方法,系统会调用默认的构造方法(默认的构造方法是无参数的),构造方法的名字必须和类名相同。如: zhangSang=new People();,25,class XiyoujiRenwu /类 XiyoujiRenwu蓝图 float height,weight; String head, ear,hand,foot, mouth; /属性 void speak(String s) /方法 System.out.println(s); class A /测试类中创造实例对象 public static void main(String args) XiyoujiRenwu zhubajie; /声明对象 zhubajie=new XiyoujiRenwu(); /为对象分配内存, /使用new 运算符和默认的构造方法 ,26,声明对象时的内存模型,当用XiyoujiRenwu类声明一个变量,即对象zhubajie时,如例子1中的对象zhubajie:XiyoujiRenwu zhubajie;内存模型如左图所示,此时的对象称为空对象,27,对象分配内存后的内存模型,当系统见到: zhubajie=new XiyoujiRenwu(); 时,就会做两件事: 为height,weight,head,ear,mouth,hand,foot各个变量分配内存,即XiyoujiRenwu类的成员变量被分配内存空间,然后执行构造方法中的语句,确定成员变量的初始值。 new运算符在为变量height,weight,head,ear,mouth,hand,foot分配内存后,将返回一个引用给对象变量zhubajie。 因此,这些被分配了内存的变量便由对象zhubajie进行管理。,28,2.3.2.使用对象,对象不仅可以操作自己的变量改变状态,而且还拥有了使用创建它的那个类中的方法的能力,对象通过使用这些方法可以产生一定的行为;对象可以创建多个;通过使用运算符“.”,对象可以实现对自己的变量访问和方法的调用;当对象调用方法时,方法中出现的成员变量就是指该对象的成员变量。,29,class People int height; String ear; String eye; void speak(String s) System.out.println(s); ,class A public static void main(String args) People zhubajie; zhubajie=new People(); zhubajie.height=170; zhubajie.ear=两只大耳朵; System.out.println(“身 高:+zhubajie.height); System.out.println(zhubajie.ear); zhubajie.speak(“师傅,咱们别去西天 了,改去月宫吧); ,30,class B public static void main(String args) People zhoujielun; zhoujielun =new People(); zhoujielun .height=175; zhoujielun .eye=“眼睛不太大; System.out.println(身高:+ zhoujielun.height); System.out.println(zhoujielun .eye); zhoujielun.speak(“嗨,大家好!); 例子1:f:/workspace/People例子2:f:/workspace/Area,31,2.3.3.对象的引用和实体,当用类创建一个对象时,类中的成员变量被分配内存空间,这些内存空间称做该对象的实体,而对象中存放着引用,以确保实体由该对象操作使用。(如前图所示) 一个类创建的两个对象,如果具有相同的引用,那么就具有完全相同的实体。,People A=new People(170, “黑色”);People B=new People(175, “棕色”);,AB;,32,没有实体的对象称作空对象,空对象不能使用,即不能让一个空对象去调用方法产生行为。内存回收技术Java的垃圾收集器自动扫描对象的动态内存区,对不使用的做上标记以进行垃圾回收垃圾回收器作为一个线程运行,当系统内存耗尽或程序调用System.gc()进行垃圾收集时,线程与系统同步运行Java的每一个类都有一个finalize()方法用于释放资源,33,2.3.4.参数传值基本数据类型参数的传值,对于基本数据类型的参数,向该参数传递的值的级别不可以高于该参数的级别,比如,不可以向int型参数传递一个float值,但可以向double型参数传递一个float值。在Java中,方法的所有参数都是“传值”的,也就是说,方法中参数变量的值是调用者指定的值的拷贝。例如,如果向方法的int型参数x传递一个int值,那么参数x得到的值是传递值的拷贝。方法如果改变参数的值,不会影响向参数“传值”的变量的值。(参见1.5.4 passArray.java),34,引用类型参数的传值,Java的引用型数据包括对象、数组和接口。当参数是引用类型时,“传值”传递的是变量的引用。如果改变参数变量所引用的实体,就会导致原变量的实体发生同样的变化。但是,改变参数的引用不会影响向其传值的变量的引用。,35,总结基本数据类型参数传值不会修改原参数值引用类型参数传值(对象、数组、接口)会修改原参数值例子:f:/workspace/Example4_5,36,public class People int money; void setMoney(int n) money=n; ,public class Comp void f(double y, People p) y=y+1; p.setMoney(100); System.out.println(参数y的值是: + y); System.out.println(参数对象p的money 是:+ p.money); ,37,public class Example4_5public static void main(String args) double y=0.8; People zhang = new People(); zhang.setMoney(8888); System.out.println(在方法f被调用之前对象zhang的 +money是: + zhang.money+ y的值是:+ y); Comp a = new Comp(); a.f(y,zhang); System.out.println(在方法f被调用之后main方法中y的值是: + y); /传值 System.out.println(在方法f被调用之后main方法中对象zhang的 +money是:+zhang.money); /传引用 ,在方法f被调用之前对象zhang的money是:8888 y的值是:0.8参数y的值是:1.8参数对象p的money是:100在方法f被调用之后main方法中y的值是:0.8在方法f被调用之后main方法中对象zhang的money 是:100,例,例,38,2.2.3 数据成员,数据成员表示Java类的状态声明数据成员必须给出变量名及其所属的类型,同时还可以指定其他特性在一个类中成员变量名是唯一的数据成员的类型可以是Java中任意的数据类型(简单类型,类,接口,数组)分为实例变量(实例成员变量)和类变量(静态变量),类与对象,39,声明格式public | protected | private static finaltransient volatile变量数据类型 变量名1=变量初值, 变量名2=变量初值, ;格式说明public、protected、private 为访问控制符static指明这是一个静态成员变量final指明变量的值不能被修改transient指明变量是临时状态volatile指明变量是一个共享变量,2.2.3 数据成员(续),类 与 对 象,40,1.成员变量和局部变量,类体分为两部分。变量定义部分所定义的变量被称为类的成员变量。在方法体中定义的变量和方法的参数被称为局部变量。 class People int boy; float a; void f () int girl; 成员变量与局部变量的区别成员变量在整个类内都有效,局部变量只在定义它的方法内有效。,41,如果局部变量的名字与成员变量的名字相同,则成员变量被隐藏,即这个成员变量在这个方法内暂时失效 . class A int x = 9, y; y=x; void f() int x=3; y=x; ,42,如果局部变量的名字与成员变量的名字相同,则成员变量被隐藏。这时如果想在该方法内使用成员变量,必须使用关键字this。,class A int x = 9, y; y=x void f() int y = 3; y= this.x; ,43,成员变量又分为实例成员变量(简称实例变量) 和类变量(也称静态变量).如果成员变量的类型前面加上关键字static,这样的成员变量称做是类变量或静态变量。 class People float x; /instance member variable static int y; /class variable ,44,2.实例变量与类变量的区别,Java执行时,类的字节码被加载到内存,如果该类未创建对象,实例变量则不会被分配内存;但类中的类变量被加载到内存时,就已经被分配相应内存空间。不同对象的实例变量分配不同的内存空间所有对象的类变量分配相同的内存空间改变其中一个对象的这个类变量将会影响其它对象的这个类变量,即对象共享类变量什么变量可声明为类变量?类中所有对象都具有相同的属性,可声明为类变量例子:StaticTest.java,问题:A1.x=18则A2.x=?,45,类变量是和该类创建的所有对象相关联的变量,改变其中一个对象的这个类变量就同时改变了其它对象的这个类变量。因此,类变量不仅可以通过某个对象访问也可以直接通过类名访问。实例变量仅仅是和相应的对象关联的变量,也就是说,不同对象的实例变量互不相同,即分配不同的内存空间,改变其中一个对象的实例变量不会影响其它对象的这个实例变量。实例变量可以通过对象访问,不能使用类名访问。,当类中的类变量被加载到内存时,就被分配了相应的入口地址,即使没有创建对象也可以通过类名来进行访问,46,实例变量和类变量都可被声明为finalfinal实例变量必须在每个构造方法结束之前赋初值,以保证使用之前会被初始化,一旦初始化便不可改变不可改变的意思:对基本类型来说是其值不可变,而对于对象变量来说其引用不可再变。其初始化可以在两个地方,一是在final变量定义时直接给其赋值,二是在构造方法中。这两个地方只能选其一。,4. 数据成员(续)final修饰符,类与对象,47,2.2.4 方法成员,方法成员定义类的行为一个对象能够做的事情我们能够从一个对象取得的信息可以没有,也可以有多个;一旦在类中声明了方法,它就成为了类声明的一部分分为实例方法和类方法,类与对象,48,声明格式public | protected | private static finalabstract native synchronized返回类型 方法名(参数列表) throws exceptionList方法体,2.2.4 方法成员(续)声明格式,类与对象,49,格式说明方法修饰public、protected、private 为存取控制符static指明方法是一个类方法final指明方法是一个终结方法abstract指明方法是一个抽象方法native用来集成java代码和其它语言的代码synchronized用来控制多个并发线程对共享数据的访问,2.2.4 方法成员(续)格式说明,类与对象,50,格式说明(续)返回类型方法返回值的类型,可以是任意的Java数据类型当不需要返回值时,返回类型为void参数类型简单数据类型,引用类型(数组、类或接口)可以有多个参数,也可以没有参数,方法声明时的参数称为形式参数方法体方法的实现包括局部变量的声明以及所有合法的Java指令局部变量的作用域只在该方法内部throws exceptionList用来处理异常,2.2.4 方法成员(续)格式说明,类与对象,51,方法调用给对象发消息意味着调用对象的某个方法从对象中取得信息 修改对象的状态或进行某种操作 进行计算及取得结果等调用格式.(参数列表)称点操作符“.”前面的为消息的接收者(receiver)参数传递值传递:参数类型为基本数据类型时引用传递:参数类型为对象类型或数组时,2.2.4 方法成员(续)方法调用,类与对象,52,实例方法表示特定对象的行为声明时前面不加static修饰符使用时需要发送给一个类实例,2.2.4 方法成员(续)实例方法,类与对象,53,在Circle类中声明计算周长的方法 public class Circle static double PI = 3.14159265; int radius; public double circumference() return 2 * PI * radius; 由于radius是实例变量,在程序运行时,Java会自动取其接收者对象的属性值,2.2.4 方法成员(续)例2_6,类与对象,54,方法调用测试public class CircumferenceTester public static void main(String args) Circle c1 = new Circle(); c1.radius = 50; Circle c2 = new Circle(); c2.radius = 10; double circum1 = c1.circumference(); double circum2 = c2.circumference(); System.out.println(Circle 1 has circumference + circum1); System.out.println(Circle 2 has circumference + circum2); ,2.2.4 方法成员(续)例2_6,类与对象,55,运行结果Circle 1 has circumference 314.159265Circle 2 has circumference 62.831853说明在使用实例方法时,需要将其发送给一个实例对象(也称给对象发送一条消息),radius的值即是接收者对象的值在执行c1.circumference()时,radius的值为c1的radius属性值;在执行c2.circumference()时,radius的值为c2的radius属性值,类与对象,2.2.4 方法成员(续)例2_6运行结果,56,在Circle类及Rectangle类中声明计算面积的方法area(),2.2.4 方法成员(续)例2_7,public class Circle static double PI = 3.14159265; int radius; public double circumference() return 2 * PI * radius; public double area() return PI * radius * radius; ,public class Rectangle double width; double height; public double area() return width * height; ,类与对象,57,声明测试类,对Circle类及Rectangle类的area()方法进行测试 public class AreaTester public static void main(String args) Circle c = new Circle(); c.radius = 50; Rectangle r = new Rectangle(); r.width = 20; r.height = 30; System.out.println(Circle has area + c.area(); System.out.println(Rectangle has area + r.area(); ,类与对象,2.2.4 方法成员(续)例2_7,58,运行结果Circle has area 7853.981625Rectangle has area 600.0说明不同的类中可以声明相同方法名的方法使用时,系统会根据接收者对象的类型找到相应类的方法,2.2.4 方法成员(续)例2_7运行结果,类与对象,59,带参数的方法举例:在Circle类中增加方法改变圆的半径public class Circle static double PI = 3.14159265; int radius; public double circumference() return 2 * PI * radius; public double area() return PI * radius * radius; public void enlarge(int factor) radius = radius * factor; ,2.2.4 方法成员(续)例2_8,类与对象,60,测试类public class EnlargeTester public static void main(String args) Circle c1 = new Circle(); c1.radius = 50; Circle c2 = new Circle(); c2.radius = 10; System.out.println(Circle 1 的周长: + c1.circumference(); System.out.println(Circle 2 的周长: + c2.circumference(); c2.enlarge(4); System.out.println(Circle 2 扩大后的周长: + c2.circumference(); ,2.2.4 方法成员(续)例2_8,类与对象,61,运行结果Circle 1 的周长: 314.159265Circle 2 的周长: 62.831853Circle 2 扩大后的周长: 251.327412,2.2.4 方法成员(续)例2_8运行结果,类与对象,62,以对象作为参数的方法举例:在Circle类中增加fitsInside方法判断一个圆是否在一个长方形内,需要以Rectangle类的对象作为参数public class Circle static double PI = 3.14159265; int radius; public double circumference() return 2 * PI * radius; public void enlarge(int factor) radius = radius * factor; public boolean fitsInside (Rectangle r) return (2 * radius y?x:y; static float min(float x, float y) float d=setA(x,y); return d; ,69,包(package)是一组类的集合一个包可以包含若干个类文件,还可包含若干个包包的作用将相关的源代码文件组织在一起类名的空间管理,利用包来划分名字空间,便可以避免类名冲突提供包一级的封装及存取权限,2.2.5 类的组织包的概念,70,包的命名每个包的名称必须是“独一无二”的Java中包名使用小写字母表示命名方式建议将机构的Internet域名反序,作为包名的前导,71,编译单元与类空间一个Java源代码文件称为一个编译单元,由三部分组成所属包的声明(省略,则属于默认包)Import (引入)包的声明,用于导入外部的类类和接口的声明一个编译单元中只能有一个public类,该类名与文件名相同,编译单元中的其他类往往是public类的辅助类,经过编译,每个类都会产一个class文件利用包来划分名字空间,便可以避免类名冲突,class XiyoujiRenwu float height, weight; String head, ear, hand, foot, mouth; void speak(String s) System.out.print(s); class A public static void main(String args) XiyoujiRenwu zhubajie; zhubajie=new XiyoujiRenwu(); ,class Point int x, y; Point(int a, int b) x=a; y=b; Public class A public static void main(String args) Point p1, p2; p1=new Point(10,10); p2=new Point(23, 35); ,73,包与目录Java使用文件系统来存储包和类包名就是文件夹名,即目录名目录名并不一定是包名,74,包的声明:package 语句作为Java源文件的第一条语句,指明该源文件定义的类所在的包。命名的包(Named Packages)例如: package mypackage;如果源程序中省略了package语句,源文件中定义命名的类被隐含地认为是无名包的一部分,即源文件中定义命名的类在同一个包中,但该包没有名字。包名可以是一个合法的标识符,也可以是若干个标识符加“.”分割而成 。,75,语法: spack/PrimNumber.java spack.PrimNumbet.java将类打包 package package_name,76,引入包 为了使用其它包中所提供的类,需要使用import语句引入所需要的类Java编译器为所有程序自动引入包java.langimport语句的格式 import package1.package2. (classname |*);其中package1.package2表明包的层次,它对应于文件目录classname则指明所要引入的类名如果要引入一个包中的所有类,则可以使用星号(*)来代替类名,77,import sPack.*;public class callPrimNumber public static void main(String args) PrimNumber p=new PrimNumber(); p.getPrimnumber(5); 注:callPrimNumber通过import sPack包调用PrimNumber类,package sPack;public class PrimNumber public void getPrimnumber(int n) int sum=0, i, j;for(i=1; ii/2) System.out.println(Number : + i); 注:该类单独放于sPack包中,78,Eclipse中包的创建与使用,79,80,包创建好后,在该包中创建class类例子:workspacebasicsPackPrimNumber.java workspacebasiccallPrimNumber.java,81,Java包,Total 130 packages8 packages for APIjava.applet: for creating applet, interaction of applets with the browserjava.awt: for creating GUIjava.awt.event: handle event for GUI components,82,java.io: enable program to input and outputjava.lang: basic language, imported by : enable program to communicate via internetjava.text: manipulate numbers, dates, characters, and stringjava.util: contains utility

温馨提示

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

评论

0/150

提交评论