IO流:用来处理设备之间的数据传输。
数据在电脑中以文件形式来体现,传输过程中可能会出现一些异常,我们要对这些异常进行处理,所以我们在学习IO流之前,需要先学习 文件(File类)和异常。
异常
异常就是Java程序在运行过程中出现的错误。
异常的分类:
1.骑自行车旅游–车胎没气-,这个问题对于他来说是个小问题-可以选择解决可以不解决(运行期异常)。
2.也有可能骑着骑着,车胎飞了,那这个问题就是一个严重性问题,他无法解决(Error)。
3.还有一种情况,就是在出门前,他检查了一下车闸,发现车闸松了,那这个问题,就必须要解决,不解决不能上路(编译期异常)。
异常的继承体系:
异常的基类- - -Throwable 用来描述各种所有问题,是Java中所有错误或异常的超类。
1.严重问题: Error Throwable的子类,用于指示合理的应用程序不应该试图捕获的严重问题,一般处理不了,不予处理,因为这种问题一般是很严重的问题,比如: 内存溢出。
2.非严重问题: Exception 及其子类是Throwable的一种形式,他指出了合理的应用程序想要捕获的条件,异常 属于一般性。
2.1编译时异常: 非RuntimeException及其子类,必须解决,不解决程序无法运行。
2.2运行时异常: RuntimeException及其子类,可以选择解决,也可以不解决。
1.运行期异常
RuntimeException及其子类,运行期异常我们自己可以解决,也可不不解决。
ArithmeticException 除数为0的异常:
public static void main(String[] args) {
int a=10;
int b=0;
System.out.println(a/b);
System.out.println("下面代码");// 不会执行
System.out.println("下面代码");// 不会执行
}
对于运行期异常,我们自己自己没有处理,就交由JVM去处理,JVM的默认处理方式是,打印详细的异常信息,然后退出虚拟机。
如果你觉得JVM默认处理异常的方式,不够友好,那么我们可以自己去捕获这个异常,自己来处理。
我们可以使用try catch 来进行异常的捕获处理,try 里面放的是你认为有可能会出现异常的代码。
catch(ArithmeticException e) catch 小括号里面定义的是,你将要捕获的何种异常。catch 大括号里面 放的是,一旦发生你捕获的这种异常,你的处理方式是什么。
public static void main(String[] args) {
int a = 10;
int b = 0;
try {
System.out.println(a / 0);
}catch (ArithmeticException e) {
System.out.println("除数为0了");
}
System.out.println("下面代码");
System.out.println("下面代码");
}
注意的有两点:
1.try里面尽可能放的是,有可能出现问题的代码。
2.一旦发生异常,异常的处理,不能空处理,即便你打印一句话提示一下,都行。
public static void main(String[] args) {
int[] arr={
2,3};
int a=1;
int b=0;
arr=null;
// 1.你能明确的异常,尽量明确,不要拿一个最大的异常一捕了之。
// 2.捕获多个异常时,大的异常,放在最后面,平级关系的异常,谁前谁后无所谓。
try{
System.out.println(arr.length);
System.out.println(a / b);
System.out.println(arr