【Day13】异常处理与输入输出—Java—翁恺老师慕课—面向对象程序设计

一、异常

1.捕捉异常

2.异常捕捉机制

try{

  //可能产生异常的代码

}catch(Type idl) {

  //处理Type异常的代码

}

 

3.捕捉到的异常

二、异常机制

1.异常

2.抛出异常

如果你的函数可能抛出异常,就必须在函数头部加以声明

 

void f() throws TooBig,TooSmall,DivZero {//...
void f() {...

 

你的声明并不会真的抛出异常

什么能扔:任何继承了Throwable类的对象

Exception类继承了Throwable, throw new Exception();  throw new Exception("HELP");

3.异常捕捉时的匹配

catch怎么匹配异常的:Is-A的关系,就是说,抛出子类异常会被捕捉父类异常的catch给捉到

捕捉任何异常:

catch(Exception e){
    System.err.println("Caught an exception");
}

运行时刻异常:像ArrayIndexOutOfBoundsException这样的异常是不需要声明的,但如果没有适当的机制来捕捉,就会最终导致程序终止

4.异常遇到继承

如果你调用一个声明会抛出异常的函数,那么你必须:把函数的调用放在try中,并设置catch来捕捉所有可能抛出的异常,或声明自己会抛出无法处理的异常

当覆盖一个函数时,子类不能声明抛出比父类版本更多的异常。在子类的构造函数中,必须声明父类可能抛出的全部异常

三、流

1.流

流是输入输出的方式,流是一维单向的

流的基础类:InputStream, OutputStream

2.文件流

FileInputStream, FileOutputStream , 对文件作读写操作。实际工程中已经较少使用,更常用的是以在内存数据和通信数据上建立的流,如数据库的二进制数据读写或网络端口通信,具体的文件读写往往有更专业的类,比如配置文件和日志文件

3.流过滤器

以一个介质流对象为基础层层构建过滤器流,最终形成的流对象能在数据的输入输出过程中,逐层使用过滤器流的方法来读写数据

DataInputStream , DataOutputStream , 用以读写二进制的方式表达基本数据类型的数据

四、文本的输入输出

1.文本流

二进制数据采用 InputStream/OutputStream

文本数据采用Reader/Writer

在流上建立文本处理:

PrintWriter pw = new PrintWriter(
    new BefferedWriter(
        new OutputStreamWriter(
            new FileOutputStream("abc.txt")));

最常用的是BufferedReader , readLine()

可得到行号,之后用 getLineNumeber()

 

 2.汉字编码

 

 3.格式化输入输出

 

 五、流的应用

 1.流的应用

read()函数是阻塞的,在读到所需内容之前会停下来等,使用read()这样的更“高级”的函数,如nextInt()、readLine()都是这样的,所以常用单独的线程来做socket读的等待,或使用nio的channel选择机制

对于socket,可以设置SO时间,setSoTimeout(int timeOut)

2.对象串行化

 

 

 

posted on 2022-01-30 16:03  冬马和纱  阅读(124)  评论(0)    收藏  举报