(2011年java基础)异常和IO

异常和IO:在学习的过程中通过IO这一章会加深自己对异常的认识,因为在IO中,常常要抛异常啊或者是最后要关闭管道啊。


--------------------------------------------------------------------------------------------------------------------------------------------


异常:


异常体系:
Throwable
|--Error
|--Exception
|--RuntimeException


异常有两种:
编译时被检测异常
该异常在编译时,如果没有处理(没有抛也没有try),编译失败。
该异常被标识,代表这可以被处理。
运行时异常(编译时不检测)
在编译时,不需要处理,编译器不检查。
该异常的发生,建议不处理,让程序停止。需要对代码进行修正。

-----------------------------------------------------------------------------------------------------------------------------------------------

对于异常的体系其实很简单,Error是jvm处理的,Exception才是我们要处理的异常,

他们都是继承了Throwable,具有可抛的能力,也就是说可以被throw和throws关键字所操作。


其实对于异常我们理解几个问题就可以解决一大片了,

1,为什么问题是类?

因为用类来描述比较符合面向对象原理,取到异常对象后,对异常进行处理,异常里面对问题进行了详细的描述,可以更容易安全的编写程序

2,Exception和RuntimeException的区别

Exception是必须要处理的异常,这个是我们可以处理的异常,而且一般建议每个都要处理。

而RuntimeException是不建议处理的,为什么呢?因为出现RuntimeException的时刻一般都是程序已经进行不下去了,所以编译器不检测这类内容,等程序员修改代码

3,那么我们可以用面向对象原理来自定义类生成自己的异常吗?

这个是完全可以的,但是有一个问题就是,子类必须继承Exception或者RuntimeException 才具有可抛性,这应该是jvm对异常的一种识别吧,所以必须加上,而且可以使用父类的构造函数和功能,继承就显得更方便了,有了自定义的名字,自定义的异常类型描述,所以非常合适的应用在自己编写的程序中。

4,那么异常的好处是?

* 将问题进行封装。
* 将正常流程代码和问题处理代码相分离,方便于阅读。

-----------------------------------------------------------------------------------------------------------------------------------------------




IO:

异常的体系很庞大,要说把视频看完就全部记得是肯定不可能的,但是在IO的教程重要的其实是其理论。

-------------------------------------------------------------------


流操作的基本规律

1,明确源和母的
源:输入流。InputStream Reader

目的:输出流。OutputStream Writer

 2,操作的数据是否为纯文本

是,字符流

否则:字节流

3,当体系明确后,在明确要使用哪个具体的对象

通过设备来进行区分

源设备:内存,硬盘,键盘

目的设备:内存,硬盘,控制台
 

这个基本的规律让人在寻找IO流的时候就定下了一个套路,可以很顺利的找到自己想要找的流和处理的方式


二,体系

流的分类

输入/输出流

例如InputStream,OutputStream

字节/字符流

InputStream,Reader

节点流/处理流

举例:

FileInputStream,FileoutStream(硬盘文件)

ByteArrayInputStream , ByteArrayOutputStream (操纵内存)

PipedInputStream , PipedOutputStream(各自为对象)



教程类总结

InputStream(抽象类),OutputStream(抽象类)(基类)

FileInputStream,FileOutputStream,(对文件进行操作)

 BufferedInputStream ,BufferedOutputStream(字节缓冲流,增加byte[]进行缓冲)

Reader(抽象类),Writer(抽象类)(基类)

FileReader,FileWriter,(对文件进行操作)

BufferedReader,BufferedWriter,(字符缓冲流)

InputStreamReader , OutputStreamWriter :转换流

PrintStream ,PrintWriter打印流 (利用PrintWriter打印会更加高效的操作数据流)

ObjectInputStream , ObjectOutputStream对象的序列化流--- 必须实现Serializable(接口)才可以序列化

ByteArrayInputStream , ByteArrayOutputStream  内存操作流

PipedInputStream , PipedOutputStream 管道流(输入输出一一对应)

DataInputStream , DataOutputSteam 基本数据类型操作流(写基本数据类型)

RandomAccessFile 随机读写流(具备读写,而且可以移动指针操作数据)


3,找流在API中的方法

体系中名称书写是很讲究的,Stream为后的是字节流,Reader和writer为后的是字符流,而且名称的前缀也显示了是操作什么数据的流

而且其构造方式可以知道那些流或者对象是和自己有关系的,有助于理解流操作的对象。

看流的方法的时候一般是从基类然后向下继承那样查阅,这样就有助于理解子类间共有的关系和区别,从而理解各个类的作用。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值