Throwable:
Java之中所有错误以及异常的父类。
错误:
表示非常严重的问题,并且程序员无法解决 例如:内存溢出,或JVM内部错误,这些问题程序员不需要关心。
异常:
什么是异常,指我们写代码的过程中,或程序运行的过程中发生了一些问题,这些问题如果不去处理我们的代码无法正常执行。这些问题是我们程序员通过代码可以解决或避免的。
Exception(JDK1.0)分类:
一:运行期异常
在代码编译的时候,不会出现问题,但是在代码执行的时候可能出现一些异常信息所有的运行期异常都继承与RuntimeException。
二:编译期异常
在代码编译期间出现的问题,如果不去处理的话则无法编译成功所有的编译其异常都直接或间接继承与Exception。
try catch finally的组合语法(都不能单独使用):
1:try catch
2:try finally
3:try catch finally
4:try catch catch catch… finally
5: 嵌套 try catch finally支持嵌套。
异常的处理流程:
1:当程序运行的期间出现异常之后,那么就会由JVM虚拟机自动根据异常的类型实例化了一个异常对象(这个过程由系统自动完成与我们无关)
2:当对象产生之后,系统会检查我们的代码判断我们的代码中是否存在异常处理,如果不存在则交给JVM虚拟机去进行处理,JVM处理异常的方式为:打印异常信息到控制台,然后关闭虚拟机。
3:如果存在异常处理代码,则会由try语句去捕获异常的实例对象,然后交给try后面的每一个catch去进行匹配,如果匹配成功则执行对应catch中的代码,如果没有匹配成功则继续向下进行匹配。
4:不管最后catch是否匹配成功,都会继续执行finally之中的代码,当finally执行完成之后会根据之前catch匹配的结果继续执行,如果catch匹配成功则继续执行finally之后的所有代码,如果匹配不成功则将捕获到的异常交给JVM虚拟机处理。
异常的捕获总结:
1:虽然一个try可以配合多个catch,但是多个catch需要先写小的,然后写大的(从小到大)
2:虽然直接捕获Exception可以捕获到我们所有的异常,但是如果这样去做了我们所有的异常都会走统一的处理流程,而在一些要求严格的项目中是禁止这样操作的,所以我们在项目中尽量去分开处理异常信息。
3:RuntimeException类及其所有子类都是运行期异常,编译器不会强制要求我们去处理,我们可以根据需求选择处理,如果没有处理异常的话,出现异常后会自动交给JVM进行处理()
throws: 将异常抛出,谁调用这个方法,谁来处理这个异常,如果中途method2()方法 try catch处理了异常那么接下来调用
method2() 方法就不需要在继续处理异常了。 如果一直没有方法去处理异常,就会异常就会抛到JVM虚拟机去处理。
throw: 在方法体内new 出一个异常对象,主要的作用是制定方法的使用规则。
throws与throw的区别:
1:throw在方法体内使用,并且用于创建异常的实例对象。
throws在方法名()后面使用将异常对象抛给方法的调用者处理。 如果使用throw创建的是运行期异常那么不需要配合throws使用,反之如果在方法之内创建的是编译期异常必须要配合throws一起使用。
自定义异常:
如果需要自定义异常的话,只需要让我们自己的类继承与RuntimeException或Exception,然后通过super调用父类的构造方法
将提示信息传递给父类即可。
File---- 文件操作类(不涉及文件里面的内容),包含了很多文件的基本操作。
OutputStream---- 字节输出流
InputStream ---- 字节输入流
Writer----- 字符输出流
Reader----- 字符输入流