收藏 分享(赏)

《Java程序设计教程》课件第六章:Java常用类.pptx

上传人:bubibi 文档编号:22640096 上传时间:2024-06-23 格式:PPTX 页数:79 大小:4.11MB
下载 相关 举报
《Java程序设计教程》课件第六章:Java常用类.pptx_第1页
第1页 / 共79页
《Java程序设计教程》课件第六章:Java常用类.pptx_第2页
第2页 / 共79页
《Java程序设计教程》课件第六章:Java常用类.pptx_第3页
第3页 / 共79页
《Java程序设计教程》课件第六章:Java常用类.pptx_第4页
第4页 / 共79页
《Java程序设计教程》课件第六章:Java常用类.pptx_第5页
第5页 / 共79页
亲,该文档总共79页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

1、本章学习目标:掌握基本类型的封装类的使用 掌握Object类的使用 掌握字符串类的使用 掌握Scanner、Math和日期类的使用 理解格式化处理的应用第六章 Java常用类 本章主要介绍Java系统提供的一些程序员在项目开发中经常用到的类和方法。掌握了这些基本类与常用方法的应用,为以后项目开发和深入学习打好基础。第1节part基本类型的封装类 Java为其8个基本数据类型提供了对应的封装类,通过这些封装类可以把8个基本类型的值封装成对象进行使用。从JDK1.5开始,Java允许将基本类型的值直接赋值给对应的封装类对象。8个基本数据类型对应的封装类如表6-1所示。基本类型的封装类基本类型的封装

2、类 基本类型的封装类除了Integer和Character写法有点特殊例外,其他的基本类型对应的封装类都是将首字母大写即可。从JDK1.5之后,Java提供了自动装箱(Autoboxing)和自动拆箱(AutoUnboxing)功能,因此,基本类型变量和封装类之间可以直接赋值,例如:Integer obj=10;int b=obj;自动装箱和自动拆箱大大简化了基本数据类型和封装类之间的转换过程,但进行自动装箱和拆箱操作时,必须注意类型匹配,例如Integer只能和int匹配,不能跟boolean或char等其他类型匹配基本类型的封装类 除此之外,封装类还可以实现基本类型变量和字符串之间的转换:

3、基本类型的封装类2、将基本类型的值转换成字符串有三种方式:直接使用一个空字符串来连接数值即可。调用封装类提供的toString()静态方法。调用String类提供的valueOf()静态方法。例如,将基本类型的值转换为字符串String s1=+23;String s2=Integer.toString(100);String s3=String.valueOf(66);1、将字符串的值转换为基本类型的值有两种方式:直接利用封装类的构造方法,即Xxx(String s)构造方法 调用封装类提供的parseXxx(String s)静态方法例如:将字符串的值转换为基本类型int num1=new

4、 Integer(10);int num2=Integer.parseInt(123);如图6.1所示演示了基本类型变量和字符串之间的转换。基本类型的封装类下述案例示例了Java基本数据类型变量和封装类之间转换的使用,代码如下所示。【代码6.1】FengZhangExample.javapackage com;public class FengZhangExample public static void main(String args)/直接把一个整数值赋给Integer对象 Integer intObj=5;/直接把一个boolean值赋给一个Boolean对象 Boolean bool

5、Obj=true;/Integer对象与整数进行算数运算 int a=intObj+10;System.out.println(a);System.out.println(boolObj);/字符串与基本类型变量之间的转换 String intStr=123;/把一个特定字符串转换成int变量 int it1=Integer.parseInt(intStr);int it2=new Integer(intStr);System.out.println(it1+,+it2);基本类型的封装类 String floatStr=4.56f;/把一个特定字符串转换成float变量 float ft1=

6、Float.parseFloat(floatStr);float ft2=new Float(floatStr);System.out.println(ft1+,+ft2);/将一个double类型变量转换为字符串 String ds1=+3.14;String ds2=Double.toString(3.15D);String ds3=String.valueOf(3.16d);System.out.println(ds1+,+ds2+,+ds3);/将一个boolean类型变量转换为字符串 String bs1=+true;String bs2=Boolean.toString(true)

7、;String bs3=String.valueOf(true);System.out.println(bs1+,+bs2+,+bs3);基本类型的封装类程序运行结果如下:15true123,1234.56,4.563.14,3.15,3.16true,true,true第2节partObject类 Java基础类库提供了一些常用的核心类,包括Object、String、Math等。其中,Object对象类定义在java.lang包中,是所有类的顶级父类。在Java体系中,所有类都直接或间接地继承了Object类。因此,任何Java对象都可以调用Object类中的方法,而且任何类型的对象都可以

8、赋给Object类型的变量。Object类提供了所有类都需要的一些方法,常用的方法及描述如表6-2所示。O bject 类本节概述6.2.1equals()方 法 两个基本类型的变量比较是否相等时直接使用“=”运算符即可,但两个引用类型的对象比较是否相等时则有两种方式:使用“=”运算符或使用equals()方法。在比较两个对象是否相等时,“=”运算符和equals()方法是有区别的:“=”运算符比较的是两个对象地址是否相同,即引用的是同一个对象。equals()方法通常可以用于比较两个对象的内容是否相同。下述案例分别使用“=”运算符和equals()方法来判断两个对象是否相等,代码如下所示。e

9、qual()方法6.2.1equals方 法【代码6.2】ObjectEqualsExample.javapackage com;public class ObjectEqualsExample public static void main(String args)/定义4个整型类对象 Integer num1=new Integer(8);Integer num2=new Integer(10);Integer num3=new Integer(8);/将num1对象赋值给num4 Integer num4=num1;System.out.println(num1和自身进行比较:);/分别

10、使用=和equals()方法对num1进行自身比较 System.out.println(num1=num1是 +(num1=num1);System.out.println(num1.equals(num1)是+num1.equals(num1);System.out.println();System.out.println(num1和num2两个不同值的对象进行比较:);/num1和num2两个不同值的对象进行比较 System.out.println(num1=num2是 +(num1=num2);System.out.println(num1.equals(num2)是+num1.eq

11、uals(num2);System.out.println();6.2.1equals方 法 System.out.println(num1和num3两个相同值的对象进行比较:);/num1和num3两个相同值的对象进行比较 /num1和num3引用指向的对象的值一样,但对象空间不一样 System.out.println(num1=num3是+(num1=num3);System.out.println(“num1.equals(num3)是”+num1.equals(num3);System.out.println();System.out.println(num1和num4两个同一引用的

12、对象进行比较:);/num2和num4引用指向同一个对象空间 System.out.println(num2=num4是 +(num1=num4);System.out.println(num2.equals(num4)是 +num1.equals(num4);6.2.1equals方 法 上述代码中num1对象分别跟自身num1、不同值num2、相同值num3以及同一引用num4这几个对象进行比较,通过分析运行结果可以得出:使用“=”运算符将严格比较这两个变量引用是否相同,即地址是否相同,是否指向内存同一空间,只有当两个变量指向同一个内存地址即同一个对象时才返回true,否则返回false;

13、Integer的equals()方法则比较两个对象的内容是否相同,只要两个对象的内容值相等,哪怕是两个不同的对象(引用地址不同),依然会返回true。程序运行结果如下:num1和自身进行比较:num1=num1是 truenum1.equals(num1)是truenum1和num2两个不同值的对象进行比较:num1=num2是 falsenum1.equals(num2)是false num1和num3两个相同值的对象进行比较:num1=num3是falsenum1.equals(num3)是 true num1和num4两个同一引用的对象进行比较:num2=num4是 truenum2.e

14、quals(num4)是 true6.2.2toString()方 法 Object类的toString()方法是一个非常特殊的方法,它是一个“自我描述”的方法,该方法返回当前对象的字符串表示。当使用System.out.println(obj)输出语句直接打印对象时,或字符串与对象进行连接操作时,例如:info+obj,系统都会自动调用对象的toString()方法。Object类中的toString()方法返回包含类名和散列码的字符串,具体格式如下:类名哈希代码值 下述案例定义了一个Book.java类,并重写了toString()方法,代码如下所示。toString()方法6.2.2to

15、String()方 法package com;public class Book /属性 private String bookName;/书名 private double price;/价格 private String publisher;/出版社 /默认构造方法 public Book()/重载构造方法 public Book(String bookName,double price,String publisher)this.bookName=bookName;this.price=price;this.publisher=publisher;public String getBoo

16、kName()return bookName;public void setBookName(String bookName)this.bookName=bookName;6.2.2toString()方 法public double getPrice()return price;public void setPrice(double price)this.price=price;public String getPublisher()return publisher;public void setPublisher(String publisher)this.publisher=publis

17、her;/重写toString()方法 public String toString()return this.bookName+,¥+this.price+,+this.publisher;上述代码重写了toString()方法,该方法将3个属性值连成一个字符串并返回。6.2.2toString()方 法 下述案例编写了一个测试类,示例了toString()方法的功能,代码如下所示。【代码6.4】BookExample.javapackage com;public class BookExample public static void main(String args)Book b1=ne

18、w Book(Java面向对象程序设计,38,重庆大学出版社);System.out.println(b1);Book b2=new Book(MySql数据库程序设计,26,清华大学出版社);String s=b1+n+b2;System.out.println(s);上述代码使用System.out.println()直接输出对象b1的信息,以及将b1和b2进行字符串连接,运行出来结果如下所示:Java面向对象程序设计,¥38.0,重庆大学出版社Java面向对象程序设计,¥38.0,重庆大学出版社MySql数据库程序设计,¥26.0,清华大学出版社6.2.2toString()方 法 将B

19、ook类中重写的toString()方法注释掉,使用Object原来默认的toString()方法,则运行结果如下所示:com.Book6fd46259 com.Book6fd46259 com.Book6084fa6a 当类没有重写toString()方法时,系统会自动调用Object默认的toString()方法,显示的字符串格式是“类名哈希代码值”。第3节part字符串类 字符串就是用双引号引起来的一连串的字符序列,Java提供了String、StringBuffer和StringBuilder三个类来封装字符串,并提供了一系列方法来操作字符串对象。String、StringBuffer

20、和StringBuilder三者之间区别如下:String创建的字符串是不可变的,即当使用String创建一个字符串后,该字符串在内存中是一个不可改变的字符序列。如果改变字符串变量的值,其实际是在内存中创建一个新的字符串,字符串变量将引用新创建的字符串地址,而原来的字符串在内存中依然存在且内容不变,直至Java的垃圾回收系统对其进行销毁。StringBuffer创建的字符串是可变的,当使用StringBuffer创建一个字符串后,该字符串的内容可以通过append()、insert()、setCharAt()等方法进行改变,而字符串变量所引用的地址一直不变,如果想获得StringBuffer的

21、最终内容,可以通过调用它的toString()方法转换成一个String对象。StringBuilder是JDK1.5新增的一个类。与StringBuffer类似,也是创建一个可变的字符串,不同的是StringBuffer是线程安全的,而StringBuilder没有实现线程安全,因此性能较好。通常,如果只需要创建一个内容可变的字符串对象,不涉及线程安全、同步方面的问题,应优先考虑使用StringBuilder类。字符串类本节概述6.3.1String类String类6.3.1String类6.3.1String类下述案例示例了String类常用方法的应用,代码如下所示。【代码6.5】Stri

22、ngExample.javapackage com;public class StringExample public static void main(String args)String str=“Im WangFeng,welcome to ChongQing!”;System.out.println(字符串内容:+str);System.out.println(字符串长度:+str.length();System.out.println(截取从下标5开始的子字符串:“+str.substring(5);System.out.println(截取从下标5开始到10结束的子字符串:”+st

23、r.substring(5,10);System.out.println(转换成小写:+str.toLowerCase();System.out.println(转换成大写:+str.toUpperCase();/验证字符串是否全是数字 String numStr=1234567a890;boolean flag=false;6.3.1String类 for(int i=0;i 9|numStr.charAt(i)0)flag=true;break;if(flag)System.out.println(该字符串有非数字存在!);else System.out.println(该字符串全是数字!

24、);6.3.1String类程序运行结果如下:字符串内容:Im WangFeng,welcome to ChongQing!字符串长度:34截取从下标5开始的子字符串:angFeng,welcome to ChongQing!截取从下标5开始到10结束的子字符串:angFe转换成小写:im wangfeng,welcome to chongqing!转换成大写:IM WANGFENG,WELCOME TO CHONGQING!该字符串有非数字存在!在Java程序中,经常会使用“+”运算符连接字符串,但不同情况下字符串连接的结果也是不同的。使用“+”运算符连接字符串时注意以下三点:字符串与字符串

25、进行“+”连接时:第二个字符串会连接到第一个字符串之后。字符串与其他类型进行“+”连接时:因字符串在前面,所以其他类型的数据都将转换成字符串与前面的字符串进行连接。其他类型与字符串进行“+”连接时:因字符串在后面,其他类型按照从左向右进行运算,最后再与字符串进行连接。6.3.2StringB uffer类StringBuffer类StringBuffer字符缓冲区类是一种线程安全的可变字符序列,其常用的方法如表6-4所示。6.3.2S tringB uffer类6.3.2S tringB uffer类下述案例示例了StringBuffer类常用方法的应用,代码如下所示。【代码6.6】Strin

26、gBufferExample.javapackage com;public class StringBufferExample public static void main(String args)StringBuffer sb=new StringBuffer(“My”);System.out.println(初始长度:+sb.length();System.out.println(初始容量是:+sb.capacity();/追加字符串 sb.append(java);System.out.println(追加后:+sb);/插入 sb.insert(0,hello);System.out

27、.println(插入后:+sb);/替换 sb.replace(5,6,);System.out.println(替换后:+sb);/删除 sb.delete(5,6);6.3.2S tringB uffer类 System.out.println(删除后:+sb);/反转 sb.reverse();System.out.println(反转后:+sb);System.out.println(当前字符串长度:+sb.length();System.out.println(当前容量是:+sb.capacity();/改变StringBuilder的长度,将只保留前面部分 sb.setLengt

28、h(5);System.out.println(改变长度后:+sb);程序运行结果如下:初始长度:2初始容量是:18追加后:Myjava插入后:hello Myjava替换后:hello,Myjava删除后:helloMyjava反转后:avajyMolleh当前字符串长度:11当前容量是:18改变长度后:avajy6.3.3StringB uilder类StringBuilder类 StringBuilder字符串生成器类与StringBuffer类类似,也是创建可变的字符串序列,只不过没有线程安全控制,StringBuilder类常用的方法如表6-5所示。6.3.3StringB uild

29、er类6.3.3StringB uilder类下述案例示例了StringBuilder类常用方法的应用,代码如下所示。【代码6.7】StringBuilderExample.javapackage com;public class StringBuilderExample public static void main(String args)StringBuilder sb=new StringBuilder(My);System.out.println(初始长度:+sb.length();System.out.println(初始容量是:+sb.capacity();/追加字符串sb.ap

30、pend(java);System.out.println(追加后:+sb);/插入sb.insert(0,hello);System.out.println(插入后:+sb);/替换sb.replace(5,6,);System.out.println(替换后:+sb);/删除sb.delete(5,6);System.out.println(删除后:+sb);6.3.3StringB uilder类/反转sb.reverse();System.out.println(反转后:+sb);System.out.println(当前字符串长度:+sb.length();System.out.pr

31、intln(当前容量是:+sb.capacity();/改变StringBuilder的长度,将只保留前面部分sb.setLength(5);System.out.println(改变长度后:+sb);6.3.3StringB uilder类程序运行结果如下:初始长度:2初始容量是:18追加后:Myjava插入后:hello Myjava替换后:hello,Myjava删除后:helloMyjava反转后:avajyMolleh当前字符串长度:11当前容量是:18改变长度后:avajy 通过上述代码及运行结果可以看出,StringBuilder类除了在构造方法上与StringBuffer不同,

32、其他方法的使用都一样。StringBuilder和StringBuffer都有两个方法:length()和capacity(),其中length()方法表示字符序列的长度,而capacity()方法表示容量,通常程序无须关心其容量。第4节partScanner类 Scanner扫描器类在java.util包中,可以获取用户从键盘输入的不同数据,以完成数据的输入操作,同时也可以对输入的数据进行验证。Scanner类常用的方法如表6-6所示。Scanner类Scanner类下述案例示例了Scanner类常用方法的应用,代码如下所示。【代码6.8】ScannerExample.javapackage

33、 com;import java.util.Scanner;public class ScannerExample public static void main(String args)/创建Scanner对象,从键盘接收数据Scanner sc=new Scanner(System.in);System.out.print(请输入 一个字符串(不带空格):);/接收字符串String s1=sc.next();System.out.println(s1=+s1);System.out.print(请输入整数:);/接收整数int i=sc.nextInt();System.out.prin

34、tln(i=+i);System.out.print(请输入浮点数:);Scanner类 /接收浮点数float f=sc.nextFloat();System.out.println(f=+f);System.out.print(请输入一个字符串(带空格):);/接收字符串,默认情况下只能取出空格之前的数据String s2=sc.next();System.out.println(s2=+s2);/设置读取的分隔符为回车sc.useDelimiter(n);/接收上次扫描剩下的空格之后的数据String s3=sc.next();System.out.println(s3=+s3);Sys

35、tem.out.print(请输入一个字符串(带空格):);String s4=sc.next();System.out.println(s4=+s4);程序运行结果如下:请输入一个字符串(不带空格):xscs1=xsc请输入整数:34i=34请输入浮点数:5.6f=5.6请输入一个字符串(带空格):csv bgns2=csvs3=bgn请输入一个字符串(带空格):567 879s4=567 879Scanner类 通过运行结果可以看出,默认情况下,next()方法只扫描接收空格之前的内容,如果希望连空格一起接收,则可以使用useDelimiter()方法设置分隔符后再接收。第5节partMa

36、th类 Math类包含常用的执行基本数学运算的方法,如初等指数、对数、平方根和三角函数等。Math类提供的方法都是静态的,可以直接调用,无需实例化。Math类常用的方法如表6-7所示。M ath类Math类 Math类除了提供大量的静态方法之外,还提供了两个静态常量:PI和E,正如其名字所暗示的,分别表示和e的值。下述案例示例了Math类中常用方法的使用,代码如下所示。【代码6.9】MathExample.javapackage com;public class MathExample public static void main(String args)/*-下面是三角运算-*/将弧度转换

37、角度System.out.println(Math.toDegrees(1.57):+Math.toDegrees(1.57);/将角度转换为弧度System.out.println(Math.toRadians(90):+Math.toRadians(90);/计算反余弦,返回的角度范围在 0.0 到 pi 之间。System.out.println(Math.acos(1.2):+Math.acos(1.2);/计算反正弦;返回的角度范围在-pi/2 到 pi/2 之间。System.out.println(Math.asin(0.8):+Math.asin(0.8);/计算反正切;返回的

38、角度范围在-pi/2 到 pi/2 之间。System.out.println(Math.atan(2.3):+Math.atan(2.3);/计算三角余弦。System.out.println(Math.cos(1.57):+Math.cos(1.57);/计算值的双曲余弦。System.out.println(Math.cosh(1.2):+Math.cosh(1.2);M ath类/计算正弦System.out.println(Math.sin(1.57):+Math.sin(1.57);/计算双曲正弦System.out.println(Math.sinh(1.2):+Math.sin

39、h(1.2);/计算三角正切System.out.println(Math.tan(0.8):+Math.tan(0.8);/计算双曲正切System.out.println(Math.tanh(2.1):+Math.tanh(2.1);/*-下面是取整运算-*/取整,返回小于目标数的最大整数。System.out.println(Math.floor(-1.2):+Math.floor(-1.2);/取整,返回大于目标数的最小整数。System.out.println(Math.ceil(1.2):+Math.ceil(1.2);/四舍五入取整System.out.println(Math.

40、round(2.3):+Math.round(2.3);/*-下面是乘方、开方、指数运算-*/计算平方根。System.out.println(Math.sqrt(2.3):+Math.sqrt(2.3);/计算立方根。System.out.println(Math.cbrt(9):+Math.cbrt(9);M ath类/返回欧拉数 e 的n次幂。System.out.println(Math.exp(2):+Math.exp(2);/计算乘方System.out.println(Math.pow(3,2):+Math.pow(3,2);/计算自然对数System.out.println(M

41、ath.log(12):+Math.log(12);/计算底数为 10 的对数。System.out.println(Math.log10(9):+Math.log10(9);/返回参数与 1 之和的自然对数。System.out.println(Math.log1p(9):+Math.log1p(9);/计算绝对值。System.out.println(Math.abs(-4.5):+Math.abs(-4.5);/*-下面是大小相关的运算-*/找出最大值System.out.println(Math.max(2.3,4.5):+Math.max(2.3,4.5);/计算最小值System.

42、out.println(Math.min(1.2,3.4):+Math.min(1.2,3.4);/返回一个伪随机数,该值大于等于 0.0 且小于 1.0。System.out.println(Math.random():+Math.random();M ath类程序运行结果如下:Math.toDegrees(1.57):89.95437383553926Math.toRadians(90):1.5707963267948966Math.acos(1.2):NaNMath.asin(0.8):0.9272952180016123Math.atan(2.3):1.1606689862534056

43、Math.cos(1.57):7.963267107332633E-4Math.cosh(1.2):1.8106555673243747Math.sin(1.57):0.9999996829318346Math.sinh(1.2):1.5094613554121725Math.tan(0.8):1.0296385570503641Math.tanh(2.1):0.9704519366134539Math.floor(-1.2):-2.0M ath类Math.ceil(1.2):2.0Math.round(2.3):2Math.sqrt(2.3):1.51657508881031Math.cbr

44、t(9):2.080083823051904Math.exp(2):7.38905609893065Math.pow(3,2):9.0Math.log(12):2.4849066497880004Math.log10(9):0.9542425094393249Math.log1p(9):2.302585092994046Math.abs(-4.5):4.5Math.max(2.3,4.5):4.5Math.min(1.2,3.4):1.2Math.random():0.4635451159005677第6节partDate与Calendar类6.6.1D ate类 Date类用来表示日期和时间

45、,该时间是一个长整型(long),精确到毫秒。其常用的方法如表6-8所示。Date类6.6.1D ate类下述案例示例了Date类中常用方法的使用,代码如下所示。【代码6.10】DateExample.javapackage com;import java.util.Date;public class DateExample public static void main(String args)/以系统当前时间实例化一个Date对象Date dateNow=new Date();/输出系统当前时间System.out.println(系统当前时间是:+dateNow.toString();/

46、以指定值实例化一个Date对象Date dateOld=new Date(1000000000000L);/输出date1System.out.println(date1是:+dateOld.toString();/两个日期进行比较,并输出System.out.println(after()是:+dateNow.after(dateOld);System.out.println(before()是:+dateNow.before(dateOld);System.out.println(compareTo()是:+dateNpareTo(dateOld);6.6.1D ate类 上述代码中先使用

47、Date类默认的、不带参数的构造方法创建一个dateNow对象,该对象封装系统当前时间;然后调用toString()方法将日期转换为字符串并输出;再使用Date类带参数的构造方法创建一个dateOld对象;然后使用after()、before()和compareTo()这三个方法进行日期比较。程序运行结果如下:系统当前时间是:Wed Jul 18 15:47:10 CST 2018 date1是:Sun Sep 09 09:46:40 CST 2001 after()是:true before()是:false compareTo()是:16.6.2C alendar类 Calendar类是一

48、个抽象类,在java.util包中。使用Calendar类的static方法 getInstance()可以初始化一个日历对象.它为特定瞬间与一组YEAR、MONTH、DAY_OF_MONTH、HOUR 等日历字段之间的转换,和操作日历字段提供了一些方法。瞬间可用毫秒值来表示,它是距历元(即格林威治标准时间 1970 年 1 月 1 日的 00:00:00.000,格里高利历)的偏移量。Calendar类常用方法如表6-9所示。Calendar类6.6.2C alendar类6.6.2C alendar类6.6.2C alendar类下述案例示例了Calendar类常用方法的使用,代码如下所示

49、。【代码6.11】CalendarExample.javapackage com;import java.util.*;public class CalendarExample public static void main(String args)Calendar calendar=Calendar.getInstance();calendar.setTime(new Date();/获取当前时间的具体值int year=calendar.get(Calendar.YEAR);int month=calendar.get(Calendar.MONTH)+1;int day=calendar.

50、get(Calendar.DAY_OF_MONTH);int hour=calendar.get(Calendar.HOUR_OF_DAY);int minute=calendar.get(Calendar.MINUTE);int second=calendar.get(Calendar.SECOND);System.out.print(现在的时间是:);System.out.print(+year+年+month+月+day+日);System.out.println(hour+时+minute+分+second+秒);long time1=calendar.getTimeInMillis(

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 金融行业 > 保险行业

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:文库网官方知乎号:文库网

经营许可证编号: 粤ICP备2021046453号世界地图

文库网官网©版权所有2025营业执照举报