1.IO的概述
1.1IO流概述
IO流用来处理设备之间的数据传输,上传文件和下载文件。
1.2IO流前奏
讲解IO流之前为什么先讲解异常和File类呢?
因为File表示的是IO流将来要操作的文件,所以我们需要学习File类。
而常见操作文件无非就是上传文件和下载文件,在这个操作的过程中可能出现问题,出现问题后,我们需要对对应的代码进行处理。所以我们需要学习异常。
2.异常
处理异常的快捷键 ctrl+alt+T
对于编译期异常,按 alt+enter 自己选一下处理方式
2.1异常的概述和分类
1.异常的概述: 异常就是Java程序在运行过程中出现的错误。
2.异常的分类:
编译期异常:发生在编译期,非RuntimeException及其子类,编译期异常必须处理,不处理程序无法运行。
运行期异常:RuntimeException,不处理可以正常运行。
总结:所有异常都继承Throwable,异常机制并不是只有坏处理,合理利用异常可以提高程序的健壮性。
3.异常的继承体系:
异常的基类: Throwable
严重问题: Error 不予处理,因为这种问题一般是很严重的问题,比如: 内存溢出
非严重问题: Exception
编译时异常: 非RuntimeException
运行时异常: RuntimeException
2.2JVM默认是如何处理异常的
main函数收到这个问题时,有两种处理方式:
a:自己将该问题处理,然后继续运行,即try…catch…finally
b:自己没有针对的处理方式,只有交给调用main的jvm来处理,即throws,jvm有一个默认的异常处理机制,就将该异常进行处理.并将该异常的名称,异常的信息.异常出现的位置打印在了控制台上,同时将程序停止运行。
例如:1/0
public static void main(String[] args) throws IOException {
// 运行期异常: RuntimeException及其子类 运行期异常我们自己可以解决,也可不不解决
int a=10;
int b=0;
//ArithmeticException 除数为0的异常
System.out.println(a/b);
//Exception in thread "main" java.lang.ArithmeticException: / by zero
// 对于运行期异常,我们自己自己没有处理,就交由JVM去处理,JVM的默认处理方式是
//打印详细的异常信息,然后退出虚拟机。
// 如果你觉得JVM默认处理异常的方式,不够友好,那么我们可以自己去捕获这个异常,自己来处理
System.out.println("下面代码");//没有运行
}
2.21try…catch的方式处理异常1
try…catch处理异常的基本格式:
try {
可能出现问题的代码 ;
}catch(异常名 变量名){
针对问题的处理 ;
//可以输入自己需要的信息,或者调用printStackTrace打印异常信息。
}finally{
释放资源;
}
变形格式:
try {
可能出现问题的代码 ;
}catch(异常名 变量名){
针对问题的处理 ;
}
//后面的程序继续运行
注意事项:
a: try中的代码越少越好
b: catch中要做处理,哪怕是一条输出语句也可以.(不能将异常信息隐藏)
例如:
public static void main(String[] args) {
// 运行期异常: RuntimeException及其子类 运行期异常我们自己可以解决,也可不不解决
int a = 10;
int b = 0;
try {
System.out.println(a / 0);
}catch (ArithmeticException e) {
System.out.println("除数为0了");//除数为0了
}
System.out.println("下面代码");//下面代码
System.out.println("下面代码");//下面代码
}
public static void main(String[] args) {
int a = 1;
int b = 0;
try {
System.out.println(a / b);
} catch (ArithmeticException e) {
//System.err.println("数学异常");
e.printStackTrace(); //打印异常的详细信息。
//System.out.println(e.toString());
//System.out.println(e.getMessage());
}
System.out.println("下面代码");
System.out.println("下面代码");
System.out.println("下面代码");
}
例如:
public static void