本文已参与「新人创作礼」活动,一起开启掘金创作之路。
9 输入输出
9.1 异常处理
9.1.1 异常的基本概念
- 又称为例外,是特殊的运行错误对象
- java中声明了很多异常类,每个异常类都代表了一种运行错误,类中包含了
- 该运行错误的信息
- 处理错误的方法
- 每当java程序运行过程中发生了一个可识别的运行错误时,即该错误有一个异常类与之相对应时,系统都会产生一个相应的该异常类的对象,即产生一个异常 出现异常时,处理方法有两种:
- 不处理,但是将异常抛出到java虚拟机
- 在自己的程序中捕获异常并处理异常 错误的分类:
- 根据错误的严重程度不同,可以分为两类
- 错误
- 致命性的,程序无法处理
- Error类是所有错误类的父类
- 异常
- 非致命性的,课编制程序捕获和处理
- Exception类是所有异常类的父类 异常的分类:
- 错误
- 非检查型异常
- 检查型异常
9.1.2 异常的处理
检查型异常的处理
- 声明抛出异常
- 不在当前方法内处理异常,可以使用throws字句声明将异常抛出到调用方法中(沿着调用栈)
- 如果所有的方法都选择了抛出词异常,最后JVM将捕获它,输出相关的错误信息,并终止程序的运行
- 捕获异常
- 使用try{}catch(){}块,捕获到所发生的异常,并进行相应的处理 捕获异常的语法
- 说明
- try语句
- 其后跟随可能产生异常的代码块
- catch语句
- 其后跟随异常处理语句,通常都要用到的两个方法:
- getMessage()-返回一个字符串,对发生的异常进行描述。
- printStackTrace()-给出方法的调用序列,一直到异常的产生位置
- finally语句
- 不论在try代码段是否产生异常,finally后的程序代码都会被执行。通常在这里释放内存以外的其他资源
- try语句
- 注意事项
- 如果并列有多个catch语句捕获多个异常,则一般的异常类型放在后面,特殊的放在前面。(子类放在前面,超类放在后面)
try{
statement(s)
}catch(exceptiontype name){
statement(s)
}finally{
statement(s)
}
9.2 输入输出流的概念
Java中预定义的I/O六类
- 从流的方向划分
- 输入流
- 输出流
- 从流的分工划分
- 节点流(真正去访问文件,进行输入输出操作的流)
- 处理流:对数据执行某种处理
- 从流的内容划分
- 面向字符的流(专门用于字符数据)
- 面向字节的流(用于一般目的,图像,声音,视频):二进制格式,可节省空间和时间 面向字符的流:
- 源或目标通常是文本文件
- 能实现内部各式和文本文件中的外部格式之间转换
- 内部各式:16-bit char数据类型
- 外部个事“UTF”
- ASCII码及非ASCII码 面向字符的抽象流类——Reader和Writer 例如用FileReader/FileWriter来读/写文本文件
面向字节的抽象流类——InputStream和OutputStream 标准输入输出流对象:
- System类的静态成员变量
- System.in:InputStream类型的,代表标准输入流,默认状态对应于键盘输入
- System.out:PrintStream类型的,代表标准输出流,默认状态对应于显示器输出
- System.err:InputStream类型的,代表标准错误信息输出流,默认状态对应于显示器输出 按类型输入/输出数据
- printf方法:
- System.out.printf("%-12s is %2d long",name l);
- System.out.printf("value=%2.2F",value);
- %n是平台无关的换行标志
- Scanner(处理流,不直接访问磁盘或者键盘)
- Scanner s=new Scanner(System.in)
10. Java基础类库(API)
10.1. Serializable
“持久化”意味着对象的“生存时间”并不取决于程序是否正在执行——它存在或“生存”于程序的每一次调用之间。通过序列化一个对象,将其写入磁盘,以后在程序再次调用时重新恢复那个对象,就能圆满实现一种“持久”效果。
10.2. StringUtils
StringUtils.isBlank(String str)方法可判断str
- 是否为 null
- 是否为 ""是否为 ""
- 是否为空字符串(引号中间有空格) 如: " "。是否为空字符串(引号中间有空格) 如: " "。