第5讲 异常.ppt

上传人:s****8 文档编号:67219033 上传时间:2022-12-24 格式:PPT 页数:40 大小:404KB
返回 下载 相关 举报
第5讲 异常.ppt_第1页
第1页 / 共40页
第5讲 异常.ppt_第2页
第2页 / 共40页
点击查看更多>>
资源描述

《第5讲 异常.ppt》由会员分享,可在线阅读,更多相关《第5讲 异常.ppt(40页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、第第5讲讲 Java异常处理异常处理主要目标:主要目标:1.1.了解异常的产生原理了解异常的产生原理2.2.掌握异常处理语句的基本格式掌握异常处理语句的基本格式3.3.掌握掌握throwthrow和和throwsthrows关键字的作用关键字的作用4.4.自定义异常自定义异常5.5.了解了解ExceptionException和和RuntimeExceptionRuntimeException的区别的区别6.6.了解断言的作用了解断言的作用主要内容主要内容5.1 5.1 异常的基本概念异常的基本概念异常的基本概念异常的基本概念5.25.2异常处理机制异常处理机制异常处理机制异常处理机制5.35

2、.3异常的处理异常的处理异常的处理异常的处理5.4 5.4 创建用户异常类创建用户异常类创建用户异常类创建用户异常类n异常异常-?运行时错误运行时错误编译时错误编译时错误n异常是导致程序中断运行的一种指令流,如果不对异常是导致程序中断运行的一种指令流,如果不对异常进行正确处理,则可能导致程序的中断执行,异常进行正确处理,则可能导致程序的中断执行,造成不必要的损失。造成不必要的损失。nJava中异常都是以类和对象的形式存在的。中异常都是以类和对象的形式存在的。5.1 异常的基本概念异常的基本概念5.1 异常的基本概念异常的基本概念n n在在JavaJava编程语言中,异常就是程序在运行过程中由编

3、程语言中,异常就是程序在运行过程中由于硬件设备问题、软件设计错误、缺陷等导致的程于硬件设备问题、软件设计错误、缺陷等导致的程序错误。在软件开发过程中,很多情况都将导致异序错误。在软件开发过程中,很多情况都将导致异常的产生,例如:常的产生,例如:(1)(1)想打开的文件不存在;想打开的文件不存在;(2)(2)网络连接中断;网络连接中断;(3)(3)操作数超出预定范围;操作数超出预定范围;(4)(4)正在装载的类文件丢失;正在装载的类文件丢失;(5)(5)访问的数据库打不开;访问的数据库打不开;5.1 什么是异常什么是异常【例例例例5-15-1】文件操作将产生异常文件操作将产生异常/Excepti

4、on1.java/Exception1.javaimport import java.iojava.io.*;.*;class Exception1 class Exception1 public static void public static void main(Stringmain(String argsargs)FileInputStreamFileInputStream fisfis=new =new FileInputStream(text.txtFileInputStream(text.txt););intint b;b;while(bwhile(b=fis.readfis.r

5、ead()!=-1)()!=-1)System.out.print(bSystem.out.print(b););fis.closefis.close();();5.1 什么是异常什么是异常当编译这个程序时,屏幕上会输出下面的信息:当编译这个程序时,屏幕上会输出下面的信息:D:userchap08D:userchap08javacjavac Exception1.java Exception1.javaException1.java:5:unreported exception Exception1.java:5:unreported exception java.io.FileNotFoun

6、dExceptionjava.io.FileNotFoundException;must be caught or declared to be thrownmust be caught or declared to be thrown FileInputStreamFileInputStream fisfis=new =new FileInputStream(text.txtFileInputStream(text.txt););Exception1.java:7:unreported exception Exception1.java:7:unreported exception java

7、.io.IOExceptionjava.io.IOException;must be;must be caught or declared to be throwncaught or declared to be thrown while(bwhile(b=fis.readfis.read()!=-1)()!=-1)Exception1.java:10:unreported exception Exception1.java:10:unreported exception java.io.IOExceptionjava.io.IOException;must be;must be caught

8、 caught ordeclaredordeclared to be thrown to be thrown fis.closefis.close();();3 errors3 errors5.1 什么是异常什么是异常【例例例例 5-25-2】数组下标超界的例子数组下标超界的例子/Exception2.java/Exception2.javapublic class Exception2public class Exception2 public static void main(String public static void main(String argsargs)String Str

9、ing langslangs =Java,VisaulJava,Visaul Basic,CBasic,C+;+;intint i=0;i=0;while(i 4)while(i D:userchap08javacjavac Exception2.java Exception2.java D:userchap08java Exception2D:userchap08java Exception2JavaJavaVisaulVisaul Basic BasicC+C+Exception in thread main Exception in thread main java.lang.Array

10、IndexOutOfBoundsExceptionjava.lang.ArrayIndexOutOfBoundsException:3:3at Exception2.main(Exception2.java:8)at Exception2.main(Exception2.java:8)上面的例子编译可以通过,但运行时出现异常信息被抛出。在上面的例子编译可以通过,但运行时出现异常信息被抛出。在其循环被执行四次之后,数组下标溢出,程序终止,并带有其循环被执行四次之后,数组下标溢出,程序终止,并带有错误信息,就象前面所示的程序那样。错误信息,就象前面所示的程序那样。5.1 什么是异常什么是异常【例例

11、例例 5-35-3】被被0 0除的例子除的例子/Exception3.java/Exception3.javaclass Exception3class Exception3 public static void public static void main(Stringmain(String argsargs)intint a=0;a=0;System.out.println(5/a);System.out.println(5/a);我们编译这个程序得到其字节码文件,然后运行它,屏幕上的显示如下:我们编译这个程序得到其字节码文件,然后运行它,屏幕上的显示如下:D:userchap08D:u

12、serchap08javacjavac Exception3.java Exception3.javaD:userchap08java Exception3D:userchap08java Exception3Exception in thread main Exception in thread main java.lang.ArithmeticExceptionjava.lang.ArithmeticException:/by zero:/by zero at Exception3.main(Exception3.java:5)at Exception3.main(Exception3.j

13、ava:5)因为除数不能为因为除数不能为0 0,所以在程序运行的时候出现了除以,所以在程序运行的时候出现了除以0 0溢出的异常事件。溢出的异常事件。5.1 什么是异常什么是异常 在上面的三个例子中,我们都遇到了异常。屏幕上所显示在上面的三个例子中,我们都遇到了异常。屏幕上所显示的信息的信息 java.io.java.io.IOExceptionIOException、java.io.java.io.FileNotFoundExceptioFileNotFoundException n、java.lang.java.lang.ArrayIndexOutOfBoundsExceptionArray

14、IndexOutOfBoundsException 以及以及java.lang.java.lang.ArithmeticExceptionArithmeticException 分别指明了异常的类型以及分别指明了异常的类型以及异常所在的包异常所在的包异常所在的包异常所在的包。同时我们也。同时我们也可以看到,对于某些异常,在程序中必须对它进行处理,否可以看到,对于某些异常,在程序中必须对它进行处理,否则编译程序会指出错误则编译程序会指出错误(如例如例8-1)8-1)。但对另一些异常,在程序。但对另一些异常,在程序中可以不做处理,而直接由运行时系统来处理中可以不做处理,而直接由运行时系统来处理(如

15、例如例8-3)8-3)。在。在下节中,我们将详细了解这两类异常,以及在程序中如何处下节中,我们将详细了解这两类异常,以及在程序中如何处理这两类异常。理这两类异常。5.1.1 异常类的继承结构异常类的继承结构在在javajava类库的每个包中都定义了自己的异常类,所有这些类都直接或间接地类库的每个包中都定义了自己的异常类,所有这些类都直接或间接地继承于类继承于类ThrowableThrowable。JavaJava中的异常事件分为两大类。一类继承于类中的异常事件分为两大类。一类继承于类ErrorError,它的继承关系如下:,它的继承关系如下:java.lang.Objectjava.lang.

16、Object java.lang.Throwablejava.lang.Throwable java.lang.Errorjava.lang.Error常见的错误类常见的错误类(Error)(Error)有有:AnnotationFormatErrorAnnotationFormatError,AssertionErrorAssertionError,AWTErrorAWTError,LinkageErrorLinkageError,CoderMalfunctionErrorCoderMalfunctionError,FactoryConfigurationErrorFactoryConfig

17、urationError,ThreadDeathThreadDeath,VirtualMachineErrorVirtualMachineError,TransformerFactoryConfigurationErrorTransformerFactoryConfigurationError等,等,包括包括动态链接失败、线程死锁、图形界面错误、虚拟机错误动态链接失败、线程死锁、图形界面错误、虚拟机错误动态链接失败、线程死锁、图形界面错误、虚拟机错误动态链接失败、线程死锁、图形界面错误、虚拟机错误等,通常等,通常JavaJava程序不应该捕获这类异常,就算发生了这类异常,程序也无法处理的程序不

18、应该捕获这类异常,就算发生了这类异常,程序也无法处理的。5.1.1 异常类的继承结构异常类的继承结构另外一类异常则继承于类另外一类异常则继承于类ExceptionException,这是,这是JavaJava程序中所大量处理的异常。它的继承程序中所大量处理的异常。它的继承关系如下:关系如下:java.lang.Objectjava.lang.Object java.lang.Throwablejava.lang.Throwable java.lang.Exceptionjava.lang.Exception常见的异常类有:常见的异常类有:AclNotFoundException,Applica

19、tionException,AWTException,AclNotFoundException,ApplicationException,AWTException,BackingStoreException,ClassNotFoundException,CloneNotSupportedException,BackingStoreException,ClassNotFoundException,CloneNotSupportedException,DataFormatException,DestroyFailedException,ExecutionException,PrintExcepti

20、on,DataFormatException,DestroyFailedException,ExecutionException,PrintException,GeneralSecurityException,InterruptedException,InvalidPreferencesFormatException,GeneralSecurityException,InterruptedException,InvalidPreferencesFormatException,RuntimeException,SAXException,SQLException,TimeoutException,

21、RuntimeException,SAXException,SQLException,TimeoutException,TransformerException,UnsupportedCallbackException,TransformerException,UnsupportedCallbackException,UnsupportedLookAndFeelException,URISyntaxException,UserException,UnsupportedLookAndFeelException,URISyntaxException,UserException,XAExceptio

22、n,XMLParseException,XPathExceptionXAException,XMLParseException,XPathException 等等等等 其中包括了其中包括了运行时异常运行时异常运行时异常运行时异常和和非运行时异常。非运行时异常。非运行时异常。非运行时异常。5.1.1 异常类的继承结构异常类的继承结构 5.1.1 异常类的继承结构异常类的继承结构 常见的运行时异常如下:常见的运行时异常如下:(1)类型转换异常ClassCastExceptionString strName=new string(“123”);int nNumber=(int)strName;(2)

23、数组超界异常ArrayIndexOutBoundsExceptionint b=new int10;b10=1000;(3)指定数组维数为负值异常NegativeArraySizeExceptionb-1=1001;(4)算术异常ArithmeticExceptionint b=0;a=500/b;(5)Java系统内部异常InternalExceptionJVM抛出的异常。(6)类型不符合异常IncompatibleTypeExceptionint n=12345;String s=(String)n;(7)内存溢出异常OutOfMemeoryException(8)没有找到类定义异常NoC

24、lassDefFoundExceptionaClass aa=new aClas();/但aClass类未定义。(9)空指针异常 NullPointerExceptionint b;b0=99;/没有实例化,就访问,将产生空指针。5.1.1 异常类的继承结构异常类的继承结构 常见的非运行时异常如下:(1)ClassNotFoundException:找不到类或接口所产生的异常(2)CloneNotSupportedException:使用对象的 clone 方法但无法执行 Cloneable 所产生的异常(3)IllegalAccessException:类定义不明确所产生的异常。例如:类不为

25、 public,或是包含一个类定义在另一个类库内(4)IOException:在一般情况下不能完成I/O操作所产生的异常(5)EOFException:打开文件没有数据可以读取所产生的异常(6)FileNotFoundException:在文件系统中,找不到文件名称或路径所产生(7)InterruptedIOException:目前线程等待执行,另一线程中断目前线程I/O运行所产生的异常 在Sun公司提供的各种API包中,如java.io,java.awt等,都提供不同情况下可能产生的异常。由于异常的种类非常多,需要读者实际运用中逐渐掌握。5.1.1 异常类的继承结构异常类的继承结构5.1.2

26、 Throwable类的常用方法类的常用方法 java.lng.Throwable类是所有Error类和Exception类的父类,常用的方法有 fillInStackTrace()、getLocalizedMessage()、getMessage()、printStackTrace()、printStackTrace(PrintStream)、printStackTrace(PrintWriter)、toString()。(1)public native Throwable fillInStackTrace()填写执行堆栈跟踪信息。该方法在应用程序重新抛出错误或异常时有用。例如:try a=

27、b/c;catch(ArithmeticThrowable e)a=Number.MAX_VALUE;throw e.fillInStackTrace();(2)public String getLocalizedMessage()生成该 Throwable 的本地化描述。子类可能会覆盖该方法以便产生一个特定于本地的消息。对于未覆盖该方法的子类,缺省地返回调用 getMessage()的结果。5.1.2 Throwable类的常用方法类的常用方法 (3)public String getMessage()返回该 throwable 对象的详细信息。如果该对象没有详细信息则返回null。(4)p

28、ublic void printStackTrace()把该把该 Throwable 和它的跟踪情况打印到标准错误流。和它的跟踪情况打印到标准错误流。(5)public void printStackTrace(PrintStream s)把该把该 Throwable 和它的跟踪情况打印到指定打印流。和它的跟踪情况打印到指定打印流。(6)public void printStackTrace(PrintWriter s)把该把该 Throwable 和它的跟踪情况打印到指定打印流。和它的跟踪情况打印到指定打印流。(7)public String toString()返回该 throwable

29、对象的简短字符串描述。第第5章章 Java异常处理异常处理5.1 5.1 什么是异常什么是异常什么是异常什么是异常5.25.2异常处理机制异常处理机制异常处理机制异常处理机制5.35.3异常的处理异常的处理异常的处理异常的处理5.4 5.4 创建用户异常类创建用户异常类创建用户异常类创建用户异常类5.2 Java的异常处理机制的异常处理机制 在Java程序的执行过程中,如果出现了异常事件,就会生成一个异常对象。这个对象可能是由正在运行的方法生成,也可能由Java虚拟机生成,其中包含一些信息指明异常事件的类型以及当异常发生时程序的运行状态等。Java语言提供两种处理异常的机制:(1)捕获异常 在

30、Java程序运行过程中系统得到一个异常对象时,它将会沿着方法的调用栈逐层回溯,寻找处理这一异常的代码。找到能够处理这种类型异常的方法后,运行时系统把当前异常对象交给这个方法进行处理,这一过程称为捕获(catch)异常。这是一种积极的异常处理机制。如果Java运行时系统找不到可以捕获异常的方法,则运行时系统将终止,相应的Java程序也将退出。(2)声明抛出异常当Java程序运行时系统得到一个异常对象时,如果一个方法并不知道如何处理所出现的异常,则可在方法声明时,声明抛出(throws)异常,但不需要作任何处理。第第5章章 Java异常处理异常处理5.1 5.1 什么是异常什么是异常什么是异常什么

31、是异常5.25.2异常处理机制异常处理机制异常处理机制异常处理机制5.35.3异常的处理异常的处理异常的处理异常的处理5.4 5.4 创建用户异常类创建用户异常类创建用户异常类创建用户异常类5.3 异常的处理异常的处理5.3.1 5.3.1 捕获异常捕获异常捕获异常捕获异常try-catch-finallytry-catch-finally5.3.2 5.3.2 声明抛出异常声明抛出异常声明抛出异常声明抛出异常5.3.3 5.3.3 主动抛出异常主动抛出异常主动抛出异常主动抛出异常5.3.1 5.3.1 捕获异常捕获异常捕获异常捕获异常try-catch-finallytry-catch-fi

32、nally 一个方法中如果对某种类型的异常对象提供了相应的处理代码,则这个一个方法中如果对某种类型的异常对象提供了相应的处理代码,则这个方法可捕获该种异常。捕获异常是通过方法可捕获该种异常。捕获异常是通过try-catch-finally语句实现的。其语语句实现的。其语法为:法为:try .catch(ExceptionName1 e).catch(ExceptionName2 e).finally.1、try捕获异常的第一步是用try选定捕获异常的范围,由try所限定的代码块中的语句在执行过程中可能会生成异常对象并抛弃。5.3.1 5.3.1 捕获异常捕获异常捕获异常捕获异常try-catc

33、h-finallytry-catch-finally 2、catch每个try代码块可以伴随一个或多个catch语句,用于处理try代码块中所生成的异常事件。catch语句只需要一个形式参数来指明它所能够捕获的异常类型,这个类必须是Throwable的子类,运行时系统通过参数值把被抛弃的异常对象传递给catch块。catch块中的代码用来对异常对象进行处理,与访问其它对象一样,可以访问一个异常对象的变量或调用它的方法。getMessage()是类Throwable所提供的方法,用来得到有关异常事件的信息,类Throwable还提供了方法printStackTrace()用来跟踪异常事件发生时执

34、行堆栈的内容。例如:try.catch(FileNotFoundException e)System.out.println(e);System.out.println(message:+e.getMessage();e.printStackTrace(System.out);catch(IOException e)System.out.println(e);5.3.1 5.3.1 捕获异常捕获异常捕获异常捕获异常try-catch-finallytry-catch-finally 3、catch 语句的顺序语句的顺序捕获异常的顺序和catch语句的顺序有关,当捕获到一个异常时,剩下的catc

35、h语句就不再进行匹配。因此,在安排catch语句的顺序时,首先应该捕获最特殊的异常,然后再逐渐一般化。也就是一般先安排子类,再安排父类。例如上面的程序如果安排成如下的形式:try.catch(IOException e)System.out.println(e);System.out.println(message:+e.getMessage();e.printStackTrace(System.out);catch(FileNotFoundException e)System.out.println(e);由于第一个catch语句首先得到匹配,第二个catch语句将不会被执行。编译时将出现“

36、catch not reached”的错误。5.3.1 5.3.1 捕获异常捕获异常捕获异常捕获异常try-catch-finallytry-catch-finally 4、finally捕获异常的最后一步是通过finally语句为异常处理提供一个统一的出口,使得在控制流转到程序的其它部分以前,能够对程序的状态作统一的管理。一般是用来关闭文件或释放其他的系统资源。虽然finally作为try-catch-finally结构的一部分,但在程序是可选的,也就是说可以没有 finally语句。如果存在finally语句,不论try块中是否发生了异常,是否执行过catch 语句,都要执行finally

37、语句。另外,try-catch-finally可以嵌套。5.3.2 声明抛出异常声明抛出异常 如果在一个方法中生成了一个异常,但是这一方法并不确切地知道该如何对这一异常事件进行处理,这时,该方法就应该声明抛出异常,使得异常对象可以从调用栈向后传播,直到有合适的方法捕获它为止。声明抛弃异常是在一个方法声明中的throws子句中指明的。例如:public int read()throws IOException throws子句中同时可以指明多个异常,之间由逗号隔开。例如:public static void main(String args)throws IOException,IndexOut

38、OfBoundsException 最后,我们再次强调,对于非运行时异常,如前例中的IOException等,程序中必须要作出处理,或者捕获,或者声明抛弃。而对于运行时异常,如前例中的ArithmeticException,IndexOutOfBoundsException,则可以不做处理。5.3.2 声明抛出异常声明抛出异常 【例例5-4】抛出异常的例子(对例8-1进行改进)/Exception4.javaimport java.io.*;public class Exception4public static void main(String args)throws FileNotFoun

39、dException,IOException FileInputStream fis=new FileInputStream(“text.txt”);int b;while(b=fis.read()!=-1)System.out.print(b);fis.close();5.3.2 声明抛出异常声明抛出异常 【例例5-5】捕获异常的例子(对例8-1进行改进)import java.io.*;public class Exception5public static void main(String args)try FileInputStream fis=new FileInputStream(

40、“text.txt”);int b;while(b=fis.read()!=-1)System.out.print(b);fis.close();catch(FileNotFoundException e)System.out.println(e);System.out.println(message:+e.getMessage();e.printStackTrace(System.out);catch(IOException e)System.out.println(e);5.3.3 主动抛出异常主动抛出异常 主动抛出异常就是产生异常对象的过程,首先要生成异常对象,异常或者由虚拟机生成,或者

41、由某些类的实例生成,也可以在程序中生成。在方法中,抛出异常对象是通过throw语句实现的。例如:IOException e=new IOException();throw e;可以抛出的异常必须是Throwable或其子类的实例。下面的语句在编译时将会产生语法错误:throw new String(throw anything);自定义异常类必须是Throwable的直接或间接子类。5.3.3 主动抛出异常主动抛出异常【例例5-6】显示主动抛出异常详细情况的例子/Exception6.javapublicclassException6 publicstaticvoidmain(Stringar

42、gs)try thrownewException(MyException);catch(Exceptione)System.err.println(CaughtException);System.err.println(getMessage():+e.getMessage();System.err.println(getLocalizedMessage():+e.getLocalizedMessage();System.err.println(toString():+e);System.err.println(printStackTrace():);e.printStackTrace();程序

43、运行结果如下:d:userchap08java Exception6Caught ExceptiongetMessage():My ExceptiongetLocalizedMessage():My ExceptiontoString():java.lang.Exception:My ExceptionprintStackTrace():java.lang.Exception:My Exceptionat Exception6.main(Exception6.java:5)5.3.3 主动抛出异常主动抛出异常 例例5-7】try-catch-finally嵌套的例子嵌套的例子class Myo

44、neException extends Exception public class TryInbed public static void main(String args)System.out.println(Entering first try block);try System.out.println(Entering second try block);try throw new MyoneException();finally System.out.println(finally in 2nd try block);/try-catch-finally嵌套在嵌套在try限定的范围内

45、限定的范围内。catch(MyoneException e)System.err.println(Caught MyoneException in 1st try block);finally System.err.println(finally in 1st try block);5.3.3 主动抛出异常主动抛出异常 程序运行结果如下:Entering first try blockEntering second try blockfinally in 2nd try blockCaught MyoneException in 1st try blockfinally in 1st try

46、block5.3.3 主动抛出异常主动抛出异常第第5章章 Java异常处理异常处理5.1 5.1 什么是异常什么是异常什么是异常什么是异常5.25.2异常处理机制异常处理机制异常处理机制异常处理机制5.35.3异常的处理异常的处理异常的处理异常的处理5.4 5.4 创建用户异常类创建用户异常类创建用户异常类创建用户异常类5.4 创建用户异常类创建用户异常类 如果 Java 提供的系统异常类型不能满足程序设计的需求,我们可以设计自己的异常类型。从 Java 异常类的结构层次可以看出,Java 异常的公共父类为 Throwable。在程序运行中可能出现两种问题:一种是由硬件系统或JVM导致的故障,

47、Java 定义该故障为 Error。这类问题用户程序不能够处理的。另外一种问题是程序运行错误,Java 定义为 Exception。这种情况下,可以通过程序设计的调整来实现异常处理。因此,用户定义的异常类型必须是 Throwable 的直接或间接子类。Java 推荐用户的异常类型以 Exception 为直接父类。创建用户异常的方法如下:class UserException extends Exception UserException()super();/其它语句 5.4 创建用户异常类创建用户异常类 我们在使用异常时,有以下几点建议需要注意:(1)对于运行时例外,如果不能预测它何时发生,

48、程序可以不做处理,而是让Java虚机去处理它。(2)如果程序可以预知运行时例外可能发生的地点和时间,则应该在程序中进行处理,而不应简单地把它交给运行时系统。(3)在自定义异常类时,如果它所对应的异常事件通常总是在运行时产生的,而且不容易预测它将在何时、何处发生,则可以把它定义为运行时例外,否则应定义为非运行时例外。5.4 创建用户异常类创建用户异常类 。【例例5-8】用户定义的异常类的使用/Exception8.javaclass MyotherException extends Exception /用户定义的异常 public MyotherException()public Myothe

49、rException(String msg)super(msg);5.4 创建用户异常类创建用户异常类public class Exception8 public static void f()throws MyotherException System.out.println(Throwing MyotherException from f();throw new MyotherException();public static void g()throws MyotherException System.out.println(Throwing MyotherException from g();throw new MyotherException(Originated in g();public static void main(String args)try f();catch(MyotherException e)e.printStackTrace();try g();catch(MyotherException e)e.printStackTrace();5.4 创建用户异常类创建用户异常类n n程序的运行结果如下:程序的运行结果如下:n nThrowing Throwing MyotherExceptionMyotherException from f()from

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

当前位置:首页 > 生活休闲 > 生活常识

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com