程序的容错机制
又称为例外,是特殊的运行错误对象 java中声明了很多异常类,每个异常类都代表了一种运行错误,类中包含了: 该运行错误的信息 处理错误的方法 每当java运行过程中发生一个可识别的运行错误(即java的类库中有一个与之相对应的异常类)时,即该错误有一个异常类与之相对应时,系统都会产生一个响应的该异常类的对象,即产生一个异常
将错误处理代码从常规代码中分离出来 按错误类型和差别分组 对无法预测的错误的捕获和处理 克服了传统方法的错误信息有限的问题(可以自定义异常类,扩展错误信息) 把错误传播给调用堆栈(让上级的调用者模块处理这个信息)
致命性的,程序无法处理 Error类是所有错误类的超类
非致命性的,可编制程序捕获和处理 Exception类是所有异常类的超类
不期望程序捕获的异常,在方法中不需要声明,编译器也不进行检查 继承自RuntimeException
其他类型的异常 如果被调用的方法抛出一个类型为E的检查型异常,那么调用者必须捕获E或者也声明抛出E(或者E的一个超类),对此编译器进行检查
声明抛出异常 不在当前方法内处理异常,可以使用throws子句声明将异常抛出到调用方法中; 如果所有的方法多选择了抛出此异常,最后JVM将捕获他,输出相关的错误信息,并终止程序的运行 捕获异常 使用try{}catch(){}块,捕获到所发生的异常并进行响应的处理
说明: try语句: 其后跟随可能产生异常的代码块 catch语句: 其后跟随异常处理语句,通常都要用到两个方法: getMessage()–返回一个字符串,对发生的异常进行描述 printStackTrace()–给出方法的调用序列,一直到异常的产生位置 finally语句 不论try代码段是否产生异常,finally后的程序代码都会被执行,通常在这里释放内存以外的其他资源 注意事项: try块中可能产生不同类型的错误,如果并列有多个catch语句捕获多个异常,则一般的异常类型放在后面,特殊的放在前面 首先捕获子类的异常,后捕获超类的异常
三种方式: 由java虚拟机生成 Java类库中的某些类生成 在自己写的程序中生成和抛出异常对象 抛出异常对象都是通过throw语句实现,异常对象必须是Throwable或其子类的实例:
throw new ThrowableObject(); AirthmeticException e = new AirthmeticException(); throw e;自定义的所有异常类都必须是Exception的子类 声明语法如下:
public class MyExceptionName extends SuperclassOfMyException{ public MyExceptionName(){ super("Some string explaining the exception"); } }方向: 输出流: 输入流: 分工: 节点流:访问文件进行输入输出操作的 处理流:在节点流的基础上对数据加工处理的 内容: 面向字符的流:专门用于处理字符数据,Reader,Writer; 面向字节的流:用于一般目的,InputStream,OutputStream 顶层抽象超类 Object类
源或目标通常是文本文件 实现内部格式和文本文件中的外部格式之间转换 内部格式:16-bit char类型 外部格式:UTF格式,包括ASCII码以及非ASCII码字符
java.io包中所有字符流的抽象超类 Reader提供了输入字符的API Writer提供了输出字符的API 他们的子类可以分为两大类: 节点流:从数据源读入数据或往目的地写出数据 处理流:对数据执行某种处理 多数程序使用这两个抽象类的一系列子类来读入/写出文本信息 例如FileReader/FileWriter用来读/写文本文件
二进制 是用来处理字节流的抽象基类,程序使用这两个类的子类来读写字节信息 分为两部分: 节点流 处理流
System类的静态成员变量 包括: System.in:InputStream类型的,代表标准输入流,默认状态对应于键盘输入 System.out:PrintStream类型的,代表标准输出流,默认状态对应于显示器输出 System.err:PrintStream类型的,代表标准错误信息输出流,默认状态对应与显示器输出
printf方法 System.out.printf("%-12s is - long",name,l); System.out.printf(“value = %2.2F”,value); %n是平台无关的换行标志 Scanner Scanner s = new Scanner(System.in);//按照类型读取 int n = s.nextInt(); nextByte(),nextDouble(),nextFloat,nextInt(),nextLine(),nextLong(),nextShort()