JAVA 编 程 技 术 主编 贾振华 2010年1月
第8章 JAVA的异常处理
运行时发生的错误称为异常。处理这些异常就称为异常处理。 发生异常后此前分配的所有资源都将保留在相同的状态,这将导致资源漏洞。 JAVA 异 常 处 理 运行时发生的错误称为异常。处理这些异常就称为异常处理。 发生异常后此前分配的所有资源都将保留在相同的状态,这将导致资源漏洞。 Java程序中错误有不同的性质,按照错误的性质可以将程序错误分为三类:1)语法错 (编译的时候发现)2)语义错(运行时候发现) 3)逻辑错(很难确定和排除) 运行时出现的错误成为“异常”或“例外”。 Public class ExceptionDemo1{ public static void main(String args[]){ int a=0; System.out.println(8/a); }
JAVA 异 常 处 理 机 制 异常处理的执行过程 出现异常事件时,Java系统自动产生一个异常对象,并将这个对象传递给Java运行时系统,这个例外产生和提交的过程被称为 抛出异常(throw);当Java运行时系统得到例外对象以后它将会寻找处理这一例外的代码,找到能处理这一例外的方法以后,运行时系统把当前例外对象交给这个方法进行处理,这一过程称为捕获异常(catch)。
JAVA 异 常 类 的 层 次 和 主 要 子 类
1. 在“异常”类层次上的最上层有一个单独的类 叫Throwable,它是java.lang包中的类。 异常类的层次和主要子类 1. 在“异常”类层次上的最上层有一个单独的类 叫Throwable,它是java.lang包中的类。 2. java.lang.Error:由系统保留,通常Java程序不对这种错误进行直接处理,必须交由操作系统处理。 3. java.lang.Exception:供应用程序使用的,它是用户程序能够捕捉到的异常情况。 异常类的方法和属性 详见p140-144。
程序对错误与异常的处理方式有三种: 程序不能处理的错误,交操作系统处理; JAVA 异 常 处 理 类 程序对错误与异常的处理方式有三种: 程序不能处理的错误,交操作系统处理; 程序应避免而可以不去捕获的运行时异常(RuntimeException); 必须捕获(使用try-catch-final)的非运行时异常
(2)使用try~catch~finally语句。 (3)使用throw语句直接抛出异常或使用throws语句间接抛出异常。 JAVA 异 常 处 理 (1)由系统自动处理。 (2)使用try~catch~finally语句。 (3)使用throw语句直接抛出异常或使用throws语句间接抛出异常。
语法结构: JAVA try { 可能产生异常的代码段; } catch(异常类名1 对象名1) { 处理语句组1; } try - catch - finally语句 语法结构: try { 可能产生异常的代码段; } catch(异常类名1 对象名1) { 处理语句组1; } catch(异常类名2 对象名2) { 处理语句组2; } …… finally { 最终处理语句; }
try { …… } 这样catch会有什么结果? JAVA throw语句和throws子句 try { …… } 这样catch会有什么结果? catch(Exception ex){ …… } catch(ClassCastException ex){ …… } catch(NumberFormatException ex){ …… }
(1)throw语句 (2)throws语句 用来明确地抛出一个异常, throw 异常; JAVA throw语句和throws子句 (1)throw语句 用来明确地抛出一个异常, throw 异常; 然后在包含它的所有try块中从内向外寻找与其匹配的catch语句块。 (2)throws语句 如果一个方法可能导致异常但不处理它,此时可在 方法声明中包含 throws 子句,发生了异常,由调用者处理。throws列举方法可能引发的所有异常。 这对于除Error或RuntimeException及它们子类以外类型的所有异常是必要的。 <方法名>(<参数行>)[throws<异常类1>,<异常类2>…] {if (异常条件1成立) throw new 异常类1(); if (异常条件2成立) throw new 异常类2(); … }
内置异常不可能始终足以捕获所有错误,因此需要用户自定义的异常类 JAVA 创 建 自 己 的 异 常 内置异常不可能始终足以捕获所有错误,因此需要用户自定义的异常类 用户自定义的异常类应为 Exception 类(或者Exception 类的子类)的子类 创建的任何用户自定义的异常类都可以获得 Throwable类定义的方法 class ArraySizeException extends NegativeArraySizeException{ ArraySizeException() { super(“您传递的是非法的数组大小”); } 该类是Exception的子类
第9章 输入/输出处理 (Java.IO )
数据流:是指在计算机的输入输出之间运动的数据序列。 输入输出是相对程序来说的,程序扮演两个角色:源和目的。 JAVA 输 入 / 输 出 流 的 概 念 数据流:是指在计算机的输入输出之间运动的数据序列。 输入输出是相对程序来说的,程序扮演两个角色:源和目的。 输入流:代表从外设流入程序的数据序列; 输出流:代表从程序流向外设的数据序列。 字节流:在输入输出过程中以字节为单位。 byte 8bit 字符流:在输入输出过程中以字符为单位。 char Java 采用Unicode 16bit
JAVA 输 入 输 出 类 的 层 次
JAVA 输 入 输 出 类 的 层 次
public static final InputStream in 使用read()和skip(long n)方法读取。 2.标准输出 JAVA 标 准 输 入 输 出 1.标准输入 public static final InputStream in 使用read()和skip(long n)方法读取。 2.标准输出 public static final PrintStream out 使用print()和println()来输出。 3.标准错误输出 public static final PrintStream err
(1)创建FileInputStream类对象; (2)读取文件信息; (3)创建FileOutputStream类对象; JAVA 文 件 输 入 输 出 字 节 流 (1)创建FileInputStream类对象; (2)读取文件信息; (3)创建FileOutputStream类对象; (4)向输出流写信息: void write(int b); void write(byte b[ ]); void write( byte b[],int off,int len); (5)关闭FileInputStream流。
1、DataInputStream类,DataOutputStream类 1> 使用数据流方法: JAVA 过 滤 字 节 流 1、DataInputStream类,DataOutputStream类 1> 使用数据流方法: (1) 用前面的方法建立字节文件流对象; (2) 基于字节文件流对象建立数据文件流对象; (3) 用此对象方法对基本类型的数据进行输入/输出。 2> 创建数据流的构造方法。 2、BufferedInputStream类,BufferedOutputStream类 (1)创建流对象BufferedOutputStream;(2)用flush()方法更新流;(3)创建BufferedInputStream对象; (4)缓冲流类的应用。 3、PrintStream类
JAVA 输 入 输 出 字 符 流 常用的是InputStreamReader类 和OutputStreamWriter类 1.其构造方法: InputStreamReader(InputStream in); InputStreamReader(InputStream in,String enc); OutputStreamWriter(OutputStream out); OutputStreamWriter(OutputStream out,String enc); 2.读写方法 3.其他方法 String getEncoding() public void colse()
FileReader和FileWriter类是InputStreamReader和OutputStreamWriter的子类。 JAVA 文 件 输 入 输 出 字 符 流 FileReader和FileWriter类是InputStreamReader和OutputStreamWriter的子类。 构造方法各有两种: FileReader(File f) FileReader(String fn) FileWriter(File f) FileWriter(String fn) 常用方法: read(); read(char[] buffer); write(String str); write(char[] buffer);
BufferedReader类和BufferedWriter类 构造方法: BufferedReader(Reader in) JAVA 缓 冲 字 符 流 BufferedReader类和BufferedWriter类 构造方法: BufferedReader(Reader in) BufferedReader(Reader in,int size) BufferedWriter(Writer out) BufferedWriter(Writer out,int size) 常用方法:readLine( ); newLine( );