欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > PPT文档下载  

    四章类和对象常用类.ppt

    • 资源ID:5390234       资源大小:893.01KB        全文页数:67页
    • 资源格式: PPT        下载积分:10金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要10金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    四章类和对象常用类.ppt

    第四章 类和对象-2 常用类和接口,Company Logo,主要内容,学习目标 重点、难点,Company Logo,回顾,类的定义属性方法(访问控制权限4个,static、final)构造方法方法重载对象创建对象使用对象对象的生命周期,本章背景,本章将学习Java中有很多常用的类和接口,非常实用要求学生掌握String和StringBuffer类的区别和使用掌握Math类和数据包装类的使用掌握java.lang中其他常用的类掌握java.util中常用的类掌握Date,Calendar,Vector类的使用会查看API文档掌握常用类的使用,任务学习,Company Logo,任务描述任务一:会使用java.lang中常用的类,任务学习,Company Logo,支撑知识介绍Java.lang包类Object,System类String,StringBuffer类Math,Class基本数据类型包装类,8,Java类库,Java的类库系统提供的已实现的标准类的集合是Java编程的API(Application Program Interface),它可以帮助开发者方便、快捷地开发Java程序。系统定义好的类根据实现的功能不同,可以划分成不同的集合,每个集合是一个包,合称为类库。API 应用程序编程接口面向过程语言 函数库(子程序包)面向对象语言 类库,9,Java类库结构,类库的结构java.lang 语言基础类库(System、Math、Thread、基本数据类型类)java.util Java的工具类库(向量、栈、日期)java.io Java的标准输入输出类库java.applet 用于实现Java Applet小程序的类库java.awt 用于构建图形用户界面的类库java.awt.event 界面用户交互控制和事件响应类库 Java的用于实现网络功能的类库使用JDK API查看类库,10,语言基础类库Object类,Object类Java程序中所有类的直接或间接父类,也是类库中所有类的的父类构造方法Object()一般方法:Object clone()生成当前对象的一个拷贝。boolean equals(Object obj)比较两个对象是否相等。Class getClass()获取当前对象所属的类信息。String toString()用来返回当前对象本身的有关信息。protected void finalize()当垃圾收集器确定对象上没有其他的引用时,调用对象上的垃圾收集器。Object类上的此方法不执行任何特定行为,仅简单返回,其子类会覆盖此方法。,11,关于toString()方法,public String toString()方法其返回值是String类型,描述当前对象的有关信息在进行String与其它类型数据的连接操作时(如:System.out.println(“info”+Person),将自动调用该对象类的toString()方法可以根据需要在用户自定义类型中重写toString()方法,12,equals()方法,public boolean equals(Object obj)方法判断对象是否“相等”x.equals(y),当x和y是同一个对象的应用时返回true,否则返回false有些类,如String、Date等,重写了equals()方法,当使用x.equals(y)时表示x和y所引用的对象是同一类对象且属性内容相等(并不一定是相同对象)返回true,否则返回false可以根据需要在用户自已定义的类中重写equals()方法,13,语言基础类库System类,System类系统功能类,提供了标准输入输出、运行时的系统信息等工具不能创建System类的对象所有的属性和方法都是静态(static)的,引用时应以System为前缀属性 获取系统标准输入/输出/错误输出System.in(对应于键盘输入或用户指定输入源)System.out(对应于显示屏或用户指定的输出源)System.err(对应于显示屏或用户指定的输出源)方法 获取系统信息、完成系统操作的方法public static long currentTimeMillis();/获取自1970年1月1日零时至当前系统时刻的微秒数public static void exit(int status);/强制Java虚拟机退出运行状态,System.exit(n);n非0描述非正常中断.public static void gc();/强制调用Java虚拟机的垃圾回收功能。,14,示例:System类,System.in输入char c=System.in.read();System.out.println(c);Scanner in=new Scanner(System.in);,15,JAVA中的字符串,Java把字符串(常量或变量)可以使用String类和StringBuffer类的对象来处理。由于使用频繁,有时也被视为基本类型遇到双引号自动创建String类的对象提供字符串运算符,字符串的连接:+定长字符串:String类(效率较高)不能更改,可用于比较、搜索之类的操作可变字符串:StringBuffer类(使用灵活)可追加、插入、修改,但内存管理复杂,String类,在Java中,字符串被当作对象来处理。分为两大类:String字符串中每个字符是16位,2字节的unicode码创建之后不会再做修改和变动String类是final的,不可被继承 String类对象有个特殊的创建的方式,就是直接指定,比如String x=abc String对象可以通过“+”串联。StringBuffer对字符串做大量修改时使用创建之后允许再做更改和变化,17,字符串类-String,StringJava语言将字符串作为对象来处理,每一个字符串常量是字符串类的一个实例。构造方法String()、String(String)、String(char chars)创建字符串,三种方式使用new关键字创建字符串 比如String s1=new String(abc);char a=X,M,J;String s=new String(a);char a=S,C,E,M,I,X,M,J;String s=new String(a,5,3);直接指定。由于字符串经常使用,可以直接使用字符串常量生成一个String类的对象 比如String s2=abc;使用串联生成新的字符串 比如String s3=ab+c;Object 的方法 toString()实现其他对象向字符串的转换,18,字符串类-String,方法int length()/返回字符串长度 例:“Java与面向对象程序设计”.length()的值为13char charAt(int index)/返回指定位置的字符 例:Java与面向对象程序设计.charAt(2)int compareTo(String s2)/按字母序进行字符串比较 boolean equals(Object obj)/判断字符串相等(区分大小写)boolean equalsIgnoreCase(String s2)/(不区分大小写)String toLowerCase()/将字符串所有大写字母转换为小写String toUpperCase()/将字符串所有小写字母转换为大写valueOf(Object obj)/将某个对象的实例转换成字符串,19,字符串类-String,String substring(int beginIndex)/取子串 String substring(int beginIndex,int endIndex)int indexOf(String str)/返回str在当前串中开始位置 int indexOf(String str,int fromIndex)int lastIndexOf(String str,int fromIndex)/.boolean startsWith(String prefix)/判断该字符串是 否以prefix为前缀。boolean endsWith(String suffix)/判断该字符串是 否以suffix为后缀。char toCharArray()/将字符串转为字符数组String concat(String str);/连接字符串replace(char oldChar,char newChar)/字符替换,20,字符串类StringBuffer,String类是不可变的字符串,如果需要修改String对象所表示的内容,必须重新创建一个对象:String str=Peter;str=str+当修改操作频繁,或字符串的值很大时,会额外分配大量内存可变字符串-StringBuffer类用来表示内容可以扩充和修改字符串对象,StringBuffer类,StringBuffer类可变的字符串,有改变字符串内容和长度的若干方法,StringBuffer在多线程中使用是安全的StringBuffer对象的构造StringBuffer sb1=new StringBuffer();构造一个空的对象StringBuffer sb2=new StringBuffer(10);构造一个没有字符,容量为length的对象StringBuffer sb3=new StringBuffer(“string”);构造一个内容与参数相同的对象注意,下面语句不能创建StringBuffer对象:StringBuffer ms=my Stringbuffer;,22,字符串类StringBuffer方法,String toString()将可变串变为不可变字符串int length()得到当前StringBuffer的长度(字符数)int capacity()得到当前StringBuffer的容量int indexOf(String str)获取str在字串中的位置StringBuffer append(String str)将str添加到StringBuffer中StringBuffer delete(int start,int end)删除start和end间的字符StringBuffer insert(String str,int index)向StringBuffer插入字串StringBuffer replace(int start,int end,String str)用str代替start和end之间的字符void setCharAt(int index,char ch)设置位置index的字符为ch/这些方法一般都有重载,参数可以是单个字符(char),23,字符串的赋值和加法,Java的字符串连接运算符+,例如:String str=Hello,;str=str+Tom!;编译器自动将该语句解释为:String str=new StringBuffer().append(Hello,).toString();str=str=new StringBuffer().append(Tom!).toString();,24,语言基础类库-Class类,Class类封装了对一个对象的描述。Class类的实例代表一个正在运行的Java应用程序的类或接口Class类没有公共的构造器,用户无法自己生成Class类的对象,由JVM自动构造Object是“万类之源”,Class是类的运行时表示,可以把每个Class类的对象当做众多类的代理,25,语言基础类库-Class类,Java运行时系统会对所有的对象进行类型识别public final Class extends Object 一般方法:String getName()返回类名。Field getFields()返回类的域名。Method getMethods()返回类的public方法对象。Package getPackage()返回该类的包。,26,语言基础类库:Math类,Math类用来完成常用的数学运算数学常量:E,PI数学运算:(一般运算都以double进行)Math.abs(-8.09);Math.exp(5.7);Math.random();Math.sqrt(9.08);Math.pow(2,3);/乘方Math.round(99.6);均为static,使用时无需创建实例 Math.method(variable);,27,数学运算的Math类,属性public final static double E;/数学常量epublic final static double PI;/圆周率常量方法(均为静态方法 public static),28,数学运算的Math类,29,示例:Math类,public class MathMethodpublic static void main(String args)System.out.println(Math.abs(-23.7)=+Math.abs(-23.7);System.out.println(Math.abs(-1059)=+Math.abs(-1059);System.out.println(Math.ceil(23.7)=+Math.ceil(23.7);System.out.println(Math.floor(23.7)=+Math.floor(23.7);System.out.println(Math.exp(2)=+Math.exp(2);System.out.println(Math.log(Math.E)=+Math.log(Math.E);System.out.println(Math.pow(2,15)=+Math.pow(2,15);System.out.println(Math.sqrt(625)=+Math.sqrt(625);System.out.println(Math.max(6.25,10.35)=+Math.max(6.25,10.35);System.out.println(Math.mix(6.25,10.35)=+Math.min(6.25,10.35);,30,语言基础类库:数据类型包装类,基本数据类型不是类,定义变量没有创建对象的过程,提高了性能。基本数据类型 vs.数据类型包装类boolean vs Boolean,char vs Character,int vs Integer等数据类型包装类规定了数据类型的最大值MAX_VALUE、最小值MIN_VALUE构造函数:如new Integer(10);完成不同数据类型间转换,注意不同的数据类使用的方法会有不同。Double.toString(0.08)、Integer.parseInt(“123”)、Double.ValueOf(“0.08”).intValue()等,详细见JDK Doc,31,自动包装和自动解包,包装把基本数据类型(如int)转换成基础类型封装类的对象(如new Integer()Integer a=new Integer(3);/手工包装Integer a=3;/自动包装Java1.5之后解包把基础类型封装类的对象转换为基础数据类型 a.intValue/获取int形式的值 a=a+3;/自动解包,a.intValue()+3,32,Wrapper(包装)类,33,Integer类,整数类中包含了对整形数据(int)的各种常用操作属性 staticint MAX_VALUE 返回int型数据的最大值staticint MIN_VALUE 返回int型数据的最小值构造方法Integer a=new Integer();Integer(int value)Integer(String s)方法int intValue()double doubleValue()long longValue()String toString()static String toString(int i)static int parseInt(String s)static int parseInt(String s,int radix)throws NumberFormatException static Integer valueOf(String s)valueOf(int i)valueOf(String s,int radix)static int parseInt(String s),34,Character类,在处理字符串时,用Character类中的一些方法进行字符分类常用方法Public static boolean isDigit(char ch)ch是否是数字字符Public static boolean isLetter(char ch)ch是否是字母Public static boolean isLetterofDigit(char ch)ch是否是数字或字母Public static boolean isSpace(char ch)ch是否是空格Public static boolean toLowerCase(char ch)返回ch的小写形式,35,类型转换利用类/对象方法,利用类方法(静态方法)Integer.parseInt(“23”)Integer.parseInt(23,16)Integer.parseInt(110,2)Integer.parseInt(110,8)Integer.toString(23)Double.parseDouble(“12.3”)Double.toString(12.3)利用对象方法 Double d;String s;/声明 d=new Double(12.3);/创建 s=d.toString();Double.valueOf(“12.3”).doubleValue();/返回double d1=3;Double d2=4;=Double d2=new Double(4);,思考:字符串和基本数据类型的转换,Company Logo,如何将字串 String 转换成整数 int?有两个方法:1).使用Integer类的parseInt方法转换成int型 int i=Integer.parseInt(“123”);short s=Short.parseShore(“123”);float f=Float.parseFloat(“1.3”);2).int i=Integer.valueOf(my_str).intValue();boolean b1=Boolean.valueOf(s1).booleanValue();注:字串转成 Double,Float,Long 的方法大同小异.如何将整数 int 转换成字串 String?A.有叁种方法:1.)String s=String.valueOf(i);2.)String s=Integer.toString(i);3.)String s=+i;注:Double,Float,Long 转成字串的方法大同小异.,思考:字符串“+”运算符,多个字符串通过连接运算(+)生成新字符串对象“two string”+“concatenate into one”字符串可以和基本类型做连接运算。String s=“0 xF=”+0 xF;/“0 xF=15”字符串可以和任何对象做连接运算。String s=“s=”+anObject;/“s=”任何一个对象都有toString()方法,字符串对象的比较,基本数据类型比较,用“=”判断,可判断变量值是否相等字符串中用“=”比较两个是否是同一个对象String s3=new String(“abc”);String s4=new String(“abc”);String s5=s3;boolean b2=(s3=s4);结果为falseboolean b3=(s3=s5);结果为true String s1=“abc”;String s2=“abc”;boolean b1=(s1=s2);结果为true,注意:“”比较的是两个对象是不是同一个对象,字符串内容的比较,方法一:boolean equals(String str)当Str不为空并且是一个与原字符串有相同内容的String对象时,返回true,否则返回false。String s1=“abc”;String s2=“abc”;boolean b1=s1.equals(s2);结果为trueString s3=new String(“abc”);String s4=new String(“abc”);boolean b2=s3.equals(s4);结果为true boolean b3=s1.equals(s1);结果为true,注意:equals比较的是字符串的内容是否相等,字符串的大小比较,方法二int compareTo(String str)将目标串与源串按字典序比较,如果相等,则返回0,若源串大于目标串,则返回正整数,若源串小于目标串,则返回负整数。String s1=“abc”;String s2=“abc”;String s3=“hello”;int c1=pareTo(s2);int c2=pareTo(s3);int c3=pareTo(s1);,字符串的大小比较,方法三:int compareToIngoreCase(String str)忽略大小的比较方式,例:String s1=“abc”;String s2=“ABc”;int c1=pareTo(s2);结果为32int c2=pareToIngoreCase(s2);结果为0,附加:StringTokenizer类,分解字符串成可被独立使用的单词创建StringTokenizer对象 StringTokenizer(String s)StringTokenizer(String s,String delim)StringTokenizer类常用方法 countTokens()单词计数变量hasMoreTokens()countTokens0 truenextToken()逐个获取单词,Company Logo,43,练习,使用String类的方法将两个字符串连接为一个新串,并得到新串的第一个和最后一个字符。定义Person类,包括姓名、身高、体重属性,重写其equals()方法,用来判断两个人是否为同一个人,重写toString()方法,输出每个人的相关信息,任务学习,Company Logo,总结数据包装器类了解xxxValue(),parseXxx(),valueOf()和toString()的方法要注意哪些是静态方法,哪些会跑出数据格式异常Mah类,要了解方法名字符串中长度和数组长度区别String和StringBuffer区别字符串比较对象和内容字符串”+”运算符字符串和基本数据类型转换,任务学习,Company Logo,任务描述任务二:会使用java.util中常用的类,任务学习,Company Logo,支撑知识介绍Java.util包(Date)类、日历(Calendar)类(Random)类数组辅助类ArraysJava中的数据结构(以后学)线性表、堆栈(Stack)、向量(Vector)、位集合(Bitset)以及哈希表(Hashtable),47,实用工具类库java.util,java.util 包提供了一些实用的方法和数据结构提供日期(Date)类、日历(Calendar)类来产生和获取日期及时间提供随机数(Random)类产生各种类型的随机数提供了数组辅助类Arrays提供了处理数据结构的类和接口堆栈(Stack)、向量(Vector)、位集合(Bitset)以及哈希表(Hashtable)等类,48,java.util包Random类,Random类能产生int、long、float或double类型的随机数构造方法Random()和Random(seed)常用方法:nextInt()返回一个int类型的随机数nextInt(int limit)返回一个大于等于0小于limit的int型的伪随机数nextFloat()返回一个float类型伪随机数nextBytes(byte bytes)使用伪随机值填充数组bytessetSeed(long seed)重置随机数发生器,49,java.util包Date类,日期类Date封装了有关日期和时间的信息,用户还可以通过调用相应的方法来获取系统时间或设置日期和时间Date类定义一个精确到毫秒的瞬间时刻,是从1970年1月1日的00:00:00GMT开始计时的时刻值构造方法public Date()public Date(long date)/date以毫秒为单位,从1970.1.1 0:0开始参数说明year值:需设定的年份-1900month(0-11)date(1-31)hrs(0-23)min,sec(0-59),50,java.util包-Date类,Date类的常用方法boolean after(Date when)测试此日期是否在指定日期之前boolean before(Date when)测试此日期是否在指定日期之后boolean equals(Object obj)比较两个日期是否是同一个日期int compareTo(Date another)比较两个日期的大小,当前对象大于、等于或小于实参返回正整数、零或负整数public long getTime()返回自 1970 年 1 月 1 日 00:00:00 GMT 以来此 Date 对象表示的毫秒数。void setTime(long time)设置此 Date 对象,以表示 1970 年 1 月 1 日 00:00:00 GMT 以后 time 毫秒的时间点。string toString()将日期值转换为String:dow mon dd hh:mm:ss zzz yyyy 形式SimpleDateFormat类,指定日期的格式SimpleDateFormat sdf=new SimpleDateFormat(“yyyy年MM月dd日 北京时间”);,51,示例:Date类,import java.util.Date;public class DateTestpublic static void main(String args)Date curDate=new Date();System.out.println(Current Date=+curDate);Date newDate=new Date(10000);System.out.println(New date=+newDate);System.out.println(curDate.after(newDate);System.out.println(curDate.before(newDate);System.out.println(MS since 1970-1-1:+curDate.getTime();,52,java.util包Calendar类,Calendar描述一个特定日期内的某一特定的时刻,Calendar是抽象类,不能创建对象Calendar的常用方法getInstance()得到表示当前时间的实例Calendar cal=Calendar.getInstance();get(int)获取相应信息,如get(Calendar.YEAR)set(int,int)如 set(Calendar.YEAR,1999)set(year,month,date)set用来设置信息Calendar.getTime()得到当前时间的Date对象,53,java.util包-GregorianCalendar,GregorianCalendar是Calendar的子类它实现了世界上普遍使用的公历系统(阳历),它就像是一本台历,只显示一个日期,可以翻过几天、几个月或几年显示另一个日期GregorianCalendar对象封装了时区信息及日期和时间数据构造方法(共七个)GregorianCalendar()GregorianCalendar(int year,int month,int date)GregorianCalendar(int year,int month,int date,int hour,int minute)GregorianCalendar(int year,int month,int date,int hour,int minute,int second)用给定的日期和时间创建一个GregorianCalendar对象常用方法,见API文档public boolean isLeapYear(int year)确定给定的年份是否为闰年。,54,java.util包-GregorianCalendar,设置日期和时间可以用Date对象设置 GregorianCalendar calendar=new GregorianCalendar();calendar.setTime(Date);用显式的值为设置日期或时间Calendar.set(2008,9,30);Calendar.set(int field,int value);/对字段进行设置获取日期和时间信息使用get()方法并指定所需信息为实参,可获取日、月和年的信息,返回值是整数。int day=calendar.get(calendar.DAY_OF_WEEK);修改日期和时间使用add()方法可以修改日历中的当前实例calendar.add(calendar.YEAR,14);/在当前的年份上加14使用roll()方法可以对一个日历的某个字段增一或减一Calendar.roll(calendar.MONTH,false);/月份减1,55,示例:Calendar,GregorianCalendar,import java.util.*;public class CalendarTestpublic static void main(String args)String arrW=日,一,二,三,四,五,六;System.out.println(当前时间:+Calendar.getInstance().getTime();Date d1=new GregorianCalendar(2005,8,1,1,1,00).getTime();Date d2=new Date();long diff=d2.getTime()-d1.getTime();System.out.println(d1+与+d2+差距天数=+diff/(1000L*60*60*24);Calendar c=Calendar.getInstance();System.out.println(-当前时间-);System.out.println(年:月:日+c.get(Calendar.YEAR)+:+(c.get(Calendar.MONTH)+1)+:+c.get(Calendar.DATE);System.out.println(时:分:秒+c.get(Calendar.HOUR)+:+c.get(Calendar.MINUTE)+:+c.get(Calendar.SECOND)+(c.get(Calendar.AM_PM)=1?PM:AM);System.out.println(星期+arrWc.get(Calendar.DAY_OF_WEEK)-1);,DateFormat类,提供了将日期/时间信息进行格式化处理的功能主要方法:public static final DateFormat getDateInstance()获得日期 formatter,该 formatter 具有默认语言环境的默认格式化风格。public static final DateFormat getDateTimeInstance()获得日期/时间 formatter,该 formatter 具有默认语言环境的默认格式化风格。public final String format(Date date)将一个 Date 格式化为日期/时间字符串。,SimpleDateFormat类,void applyPattern(String pattern)将给定模式字符串应用于此日期格式。指定日期的格式SimpleDateFormat sdf=new SimpleDateFormat(“yyyy年MM月dd日 北京时间”);,58,练习,以下图格式输出2008年10月的日历页,数组实用类:Arrays,操纵数组的实用类Arrays。它提供一系列静态方法 equals():比较两个数组是否相同。只有当两个数组元素数目相同,并且对应位置的元素也都相同时,才表明数组相同。fill():向数组填充数据。sort():把数组的元素按升序排列。binarySearch():按照二叉查找算法,查找数组中值与给定数据相同的元素。toString():返回包含数组中所有元素信息的字符串。,集合容器,后面学,Company Logo,任务学习,Company Logo,总结日期Date类大多数方法都不赞成使用存储为long,从1970年1月1日起的毫秒数Date对象是Calendar类和Locale类之间的媒介Calendar类提供一组用于操作日期的强大方法,可以执行获取如星期几或者添加月数或者年数等到日期之类的任务。使用静态方法getInstance()方法创建Calendar实例理解Calendar方法:add,添加或减去多个日期成分使用DateFormat的静态方法getInstance()和geiDateInstance()方法创建对象DateFormat.format(日期对象)创建指定格式的日期字符串随机数Random类区分Math.random()方法区别数组辅助类Arrays提供很多静态方法,操作数组,任务学习,Company Logo,支撑知识介绍API,API,查看包类接口异常具体内容概述 继承关系 修饰符 构造方法属性方法,Company Logo,任务学习,Company Logo,完成任务步骤分析一是如何通过类定义描述一个具体的点一个类Point表示抽象的点,定义两个成员变量x,y表示点对应的具体位置二是如何计算点到原点的距离Math中已经实现了求平方根的方法sqrt()三是如何计算点与点之间的距离同上编写主类,测试调用,课堂实训,课堂实践4-4-见文档常用类解决简单问题,Company Logo,要求,类和对象多练习作业4-3-见文档,Thank You!,

    注意事项

    本文(四章类和对象常用类.ppt)为本站会员(sccc)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开