IO流 输入输出流 上传下载用流进行数据传输
文件File–数据载体
在使用流进行数据传输过程中可能会出现一些异常,需要对这些异常进行处理,java提供了一套异常的处理机制
在正式学习IO流前需要了解异常和文件的相关知识
异常
Throwable 异常或错误的父类
子类 Error 错误 严重性问题 解决不了
子类 Exception 异常 一般性问题 可以解决
Exception 异常 分为两种
RuntimeException (运行期异常)可以解决,也可以不解决
非RuntimeException 编译期异常 必须解决
运行期异常RuntimeException
发生在程序运行期间 解不解决都行 不解决 交由jvm处理
交由JVM处理后 JVM会打印该异常信息,然后退出虚拟机 之后的程序就不再执行
我们也可以自己处理
try{
//可能会有异常的代码
}catch(异常类型 异常名称){//出现异常catch就会捕获该异常
//处理方式
}catch(异常类型 异常名称){//出现异常catch就会捕获该异常
//处理方式
}
一旦try出现异常,相应的catch就会捕获异常
能明确的异常尽量明确
多个异常类 如果是平级关系 在前在后无所谓; 存在继承关系 父类异常放在最后
JDK1.7之后 一个catch可以捕获的多个并列关系异常 异常间用|隔开 但处理方式只有一种 不推荐
catch里不能做空处理,否则无从获知异常类型 即便最简单一条输出语句提醒自己都行
ctrl+alt+T 对选中代码进行异常处理
Exception e
e.printStackTrace();//打印异常堆栈信息
编译期异常
发生在编译期间,非RuntimeException及其子类
编译期异常必须处理 有两种处理方式
1.将异常抛给调用者 谁调用谁处理 throws 关键字 在方法上抛出 抛给调用者
一般在main方法里就不要抛出了 自己捕获处理
2.自己捕获处理 try(){}catch(){}
//finally
try(){
}catch(){
}finally{//最终的 不管try里有没有遇到异常 finally里的代码都会执行 一般在此处做善后工作 如释放资源
}
//throw 在方法内部抛出异常对象(不是异常类)
throw new ArithmeticException();
//throw和throws区别
throws
用在方法声明后面,跟的是异常类名
可以根多个异常类名,用逗号隔开
表示抛出异常,交由该方法的调用者处理
表示异常可能出现,并非一定
throw
用在方法内部,跟的是异常对象名
只能抛出一个异常对象名
这个异常对象可以时编译期异常对象,也可以是运行期异常对象
表示抛出异常,交由方法体内语句处理
表示抛出了异常,执行throw表示一定抛出了某种异常
自定义异常
当java给我们提供的这些异常类,无法描述我们所遇到的异常,那么可以自定义异常类
public class scoreException entends RuntimeException{
public scoreException(String s){
supper.s;
}
}
子类在重写父类方法时,父类方法没有抛出异常,子类不能抛出 只能自己捕获
子类不能抛出父类没有抛出过的异常
子类方法上抛出的异常不能比父类大(子类抛出异常是父类抛出异常的子类或其本身),只能比父类小或根父类一样