Java复习二—CH3-Exception 、CH4-I/O

发布时间:2023年12月23日

CH3 Java Exception (异常)

3.1?Exception(异常)和 Error(错误)

异常能被程序本身可以处理,错误是无法处理
大多数错误与代码编写者执行的操作无关,而表示代码运行时 JVM 出现的问题

异常发生的原因有很多,通常包含以下几大类:

  • 用户输入了非法数据。
  • 要打开的文件不存在。
  • 网络通信时连接中断,或者JVM内存溢出。

    用操作系统的话来说,异常就是进程发生了中断。(?自己的理解)

3.2 Exception 类的层次

? ? ? 所有的异常类是从 java.lang.Exception 类继承的子类。??
? ? ??Error 用来指示运行时环境发生的错误。
? ? ? 例如,JVM 内存溢出。一般地,程序不会从错误中恢复。

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 块。

注:

? ? ? ?重写方法一定不能抛出新的检査异常或者比被重写方法声明更加宽泛的检査型异常。 (子类异常不能抛出父类异常)Exception是所有异常类的父类,所有catch块中都不能抛出Exception异常。 例如,父类
的一个方法声明了一个检査异常 IOException ,在重写这个方法时就不能抛出 Exception ,只能拋
IOException 的子类异常,可以抛出非检査异常。

小练习:(多重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

文章来源:https://blog.csdn.net/lyhizjj/article/details/135171843
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。