CH3 Java Exception (异常)
3.1 Exception(异常)和 Error(错误)
异常发生的原因有很多,通常包含以下几大类:
- 用户输入了非法数据。
- 要打开的文件不存在。
- 网络通信时连接中断,或者JVM内存溢出。
用操作系统的话来说,异常就是进程发生了中断。(?自己的理解)
3.2 Exception 类的层次
3.3 Java内置异常类(看看就行,了解一下)
3.4 捕获异常
使用 try 和 catch 关键字可以捕获异常。try/catch 代码块放在异常可能发生的地方。
try/catch代码块中的代码称为保护代码。
Catch 语句包含要捕获异常类型的声明。当保护代码块中发生一个异常时,try 后面的 catch 块就会被检查。如果发生的异常包含在 catch 块中,异常会被传递到该 catch 块,这和传递一个参数到方法是一样。
下面举个例子:
小练习:猜一下结果?finally关键字
3.5 多重捕获块
一个try块后面跟了多个catch块:抛出的异常会依次跟catch块中的异常类型进行匹配
like this:
可以在 try 语句后面添加任意数量的 catch 块。
如果保护代码中发生异常,异常被抛给第一个 catch 块。
如果抛出异常的数据类型与 ExceptionType1 匹配,它在这里就会被捕获。
如果不匹配,它会被传递给第二个 catch 块。
如此,直到异常被捕获或者通过所有的 catch 块。
注:
小练习:(多重catch块中,异常的抛出。catch块中只能抛出子异常)d
3.6 throw/throws关键字和finally关键字
(1)throw 关键字用于在当前方法中抛出一个异常。throws 关键字用于在方法声明中指定该方法可能抛出的异常。
throws关键字可以同时抛出多个异常
(2)finally关键字
finally 关键字用来创建在 try 代码块后面执行的代码块。
无论是否发生异常,finally 代码块中的代码总会被执行。
在 finally 代码块中,可以运行清理类型等收尾善后性质的语句。
finally 代码块出现在 catch 代码块最后。在try块中执行return语句时, finally块 中的代码仍然会被执行。
补充:正则表达式(自己了解一下,挺有用的)
CH4 Java I/O
4.1 Java 流(Stream)、文件(File)、I/O
一个流可以理解为一个数据的序列。输入流表示从一个源读取数据,输出流表示向一个目标写数据。
4.2 读取控制台输入
Java 的控制台输入由 System.in 完成。
为了获得一个绑定到控制台的字符流,你可以把 System.in 包装在一个 BufferedReader 对象中来创建一个字符流。这样我们就可以随时随地得到控制台输入(虽然scanner也可以)
补充:BufferedReader 的read()函数是从流中读取一个字符,readline函数是读取一行字符
4.3 在控制台进行输出
这个大家应该都很熟悉了,不就System.out,println()吗。
大家有没有想过这几个字都是什么呢?
System就不多说了,Java.lang中的静态类
out: JAVA .lang 包中的一个 PrintStream变量,继承于OutputStream
println : IO包中的一个函数
4.4 读写文件
(1)先来看一眼 I/O流的主要类
(2)小练习:字节流和字符流的区别
区分下Writer 和OutputStream以及Reader和InputStream
(3)接下来主要区分一下:FileInputStream、BufferedInputStream、DataInputStream。额,这是当初学习时写的代码。把write和OutputStream弄混了
- 创建:仅就创建对象来看,三者之间是前后依赖的,但这并不意味着三者之间是父子类关系
当数据量增大时三者效率,依次增高。但是注意要提前设置JVM的内存较大。否则BufferWriter的效率会因为内存不足受到较大影响。
3.1FileOutputStream
首先我们先来看FileOutputStream,继承于OutputStream,然后写了一堆构造方法。常用的方法也就writer()
3.2BufferedOutputStream
接着是BufferedOutputStream。BufferedOutputStream继承于FilterOutputStream。所以它喊FileOutputStream应该是喊“叔叔”的
新建对象的话,如果去直接new一个“爷爷”对象的话,需要重写“爷爷”的方法。但是借他叔的属性的话就不算继承?就不需要重写方法了???(这一段还不是很懂)
3.3DataOutputStream
最后是DataOutputStream,
这个跟BufferedOutputStream是好兄弟,但是他实现了dataOutout的接口
PrintWriter(继承于Writer)(这个到第十一章再讲)
4.5 Java中的目录
(1)创建目录
(2)读取目录
注意,这里可以直接对 file文件进行排序,使用 Array.sort,比较器使用Collections.Order();
本篇文章参考:(1)菜鸟教程;
(2)课程PPT