异常
要点提示: :异常处理使得程序可以处理非预期的情景,并且继续正常的处理。
概述: 在程序编译和运行的过程中出现的一些错误问题,对于这些错误和问题而言,能否通过面向对象的思想 将这些错误和问题进行类的封装。
异常描述
- 异常名称 (可以自定义)
- 异常产生的原因 (可以自定义)
- 异常产生的位置(代码中的某一行) (由JVM决定)
- 异常产生的线程 (由JVM决定)
异常发生原因: 基本上是由JVM自动检测的 但是也可以人为手工抛出 throw 后面跟一个异常对象。(throw只能在函数内部 属于执行语句)
异常体系结构
Throwable(所有异常的最终父类)
- Exception(是由虚拟机或Java throw抛出的一般性错误(能够有解决方案——程序不一定终止!)
1.Exception及其其他子类(编译时异常)
1)是指在程序编译的期间发现的一些可能出错的问题 可以被提前预知 做好解决方案
2.RuntimeException(运行时异常)
1)是指在程序运行的期间发现的一些可能出错的问题 但是不能被提前预知 没有解决方案(也不是绝对的) - Error(是由虚拟机直接抛出的JAVA严重性错误(绝对没有解决方案——程序终止!))
定义异常(类)
按照项目实际需求 定义出所需的异常类
- 继承自Throwable
- 继承自Exception
- 一般不推荐继承自Error
异常错误性质: Error>RuntimeException>Exception
对于Exception的两种解决方案
- throws关键字 声明
1)通过声明提前告诉调用者该函数可能会存在问题
2)如果问题发生,首先会反馈给函数自身,函数自身再将该问题反馈给调用者,由调用者自行解决
3)对于该函数而言 确实是一种解决方案 但是并没有在函数内部实质解决(实际上就是甩锅)
4)throws 只能在函数定义之后 函数体之前
5)throws 后面只能跟异常类 可以多个类名 类名之间,分隔 - try-catch-finally 捕获
1)先尝试运行某段代码try
2)如果该段代码出现问题,则立马解决catch
3)无论代码是否出错 将都会执行的代码放入finally
try-catch-finally有return运行可能出现的情况
- 没有异常的情况下 try里有return try->finally
- 没有异常的情况下 catch里有return try->finally->之后
- 没有异常的情况下 finally里有return try->finally 一旦有 之后则不执行
- 有异常的情况下 try里有return try-catch-finally->之后
- 有异常的情况下 catch里有return try->catch->finally
- 有异常的情况下 finally里有return try-catch-finally 一旦有 之后则不执有
- 没异常的情况下 try catch里有return try->finally之后不执行
- 有异常的情况下 try->catch->finally
- (不推荐try->catch->finally里面写return)
I/O流
I/O流就是输入输出流,即(Input、Output)
输入输出仅针对于内存而言
分类
- 按流向分
1)输入流
2)输出流 - 按类型分
1)字节流
2)字符流(字节流+码表)
IO流四大基类(IO体系中的四个父类)
- InputStream(字节输入流)
1)FileInputStream
2)BufferedInputStream - OutputStream(字节输出流)
1)FileOutputStream
2)BufferedOutputStream - Reader(字符输入流)
1)InputStreamReader(转换流==字节进来–>字符进来)
2)BufferedReader - Writer(字符输出流)
1)OutputStreamWriter(转换流==字符出去–>字节出去)
2)BufferedWriter
玩转IO流 考虑事项
- 1.数据源 目的地
- 2.字节流 字符流
- 3.是否需要转换流
- 4.是否需要高效(Buffered)