异常处理
提高程序的容错性 : 解决运行时错误
避免异常: 尽可能使异常不出现, 不发生
处理异常: 当异常发生时, 应对这种异常 有部分代码,正常情况不执行,异常发生时才执行
异常的分类
Throwable 所有异常的父类
|- Error 错误 严重的底层错误 不可避免 无法处理 不用处理
|- Exception 异常 可以处理
|- RuntimeException 子类 运行时异常 未检查异常 可以避免 可以处理,可以不处理
|- 非RuntimeException子类 已检查异常 不可避免 必须处理
异常对象的产生和传递
异常对象的产生:
throw 异常对象;
抛出一个异常
抛出异常: 方法以异常对象作为返回值,返回 等同于return语句
异常对象的传递:
沿着方法调用链, 以返回值的形式, 逐级回传,直至JVM. JVM就会中止运行
异常的处理
1.声明抛出
throws 异常类名1 , 异常类名2 , … 异常类名n
方法覆盖时 , 子类方法不能比父类抛出更多的异常
2.捕获异常:
try { 语句1 语句2 ... 语句n } catch(异常类型A e){ } catch(异常类型B e){ } finally{ 无论如何都会执行 通常用来释放资源 } ...
可以同时捕获父类异常和子类异常, 但必须先捕获子类异常, 再捕获父类异常
try{} catch(){} try{} catch(){} finally{} try{} finally{} //无法捕获异常, 利用finally必须执行的特点, 完成特定操作
I/O编程
Java程序的输入和输出
流的概念和分类
流对象: 用来传输数据的对象
流的分类:
流的方向: 输入流 / 输出流 输入流: 读数据 输出流: 写数据
数据单位: 字节流 / 字符流 字节流: 以字节为单位 处理一切数据
字符流: 以字符为单位 处理文本数据 (.txt .html .java .xml)
流的功能: 节点流 / 过滤流
节点流: 实际负责数据传输
过滤流: 为节点流增强功能
字节流:
InputStream/OutputStream 抽象类 字节流的父类
FileInputStream/FileOutputStream 文件字节流 节点流
OutputStream os = null; try { os = new FileOutputStream("a.txt") ; os.write('D'); } catch (IOException e) { e.printStackTrace(); } finally{ try { if (os!= null) os.close(); //关闭流 } catch (IOException e) { e.printStackTrace(); } }
try - with - resource try (定义资源 实现了AutoCloseable接口){ 代码 } catch(Exception e){} try (OutputStream os = new FileOutputStream("a.txt")) { os.write('D'); } catch(IOException e){ e.printStackTrace(); }
BufferedInputStream/BufferedOutputStream 过滤流 缓冲功能, 提高I/O效率
flush() 清空缓冲区 对于缓冲输出流 BuffedOutputStream
PrintStream : 取代BufferedOutputStream 带缓冲的字节输出流
FileOutputStream fos = new FileOutputStream("a.txt"); BufferedOutputStream out = new BufferedOutputStream(fos); out.write('A'); out.close();
I/O编程基本顺序:
- 创建节点流
- 封装过滤流
- 读/写数据
- 关闭外层流
学得有点慢了,需要加快速度