Java
fred
异常
异常 (Exception)?
– 异常 (Exception)是正常程序流程所不能处理或没有处理的异常情况或异常事件。
– 在有些书中,异常也称作例外。
– 例如除数为 0
异常产生
自动产生 比如,1/0
抛出异常
– throw new ArithmeticException()
– ArithmeticException e=new
ArithmeticException();
– throw e;
为什么需要异常?
强制程序异常 /错误处理
– 同时指定需要异常的种类
异常处理模型提供了一种统一处理异常 /错误的模式
– 传统程序方法,设置标志位,或返回错误码,分别处理各种异常情况。但在编程时常常出现这样的情况:忘了对某些异常情况进行处理,尤其是当存在多个分支或者多个开发人员共同开发程序时。
– 简化对异常情况的处理,减少 if-else语句什么时候会发生异常?
数组的下标越界
打开不存在的文件
网络无法连接
操作数超出所要求的范围
少了所需加载的类,
自定义异常,要求程序处理处理异常的几种常用方法
1,一旦捕获异常,马上进行处理
2,重新抛出异常
3,捕获异常,但并不处理
4,通过语句 System.exit()退出应用程序异常处理
在 try语句块中包含可能会产生异常的语句
紧接着若干个 catch语句块,进行异常处理
catch语句块与 finally语句块至少存在一个
try
{
// 可能会抛出异常的代码
}
catch (ExceptionType ref)
{
// 异常处理代码
}
finally
{
// …
}
finally 语句块
在异常处理过程中,finally语句块总是会被执行到,无论有没有异常发生,也无论有没有异常被捕捉到
– 可选项,finally 语句块,通常位于 catch 语句块的后面
– 可以用来释放 try语句块中获得的资源
例如,关闭在 try语句块中打开的文件
throws 列表
在方法的声明处列出所有的受检异常返回类型 方法名 ( 参数列表 ) throws 异常类型 1,异常类型 2,…
{
// 方法体
}
– 在本方法内就可以不处理这些异常
– 调用该方法的方法就必须处理这些异常
示例,
public static void g( ) throws Exception
{
throw new Exception( );
} // 方法 g结束异常处理,捕捉 -或者 -声明
如果一个方法调用一个抛出受检异常的方法 (含有 throws列表的方法 ),则该方法必须捕捉这些受检异常,或通过 throws
列表声明这些异常重新抛出异常
如果 catch语句块不处理某种异常,可以重新抛出异常
– 抛出异常的方法,
throw e;
– 由其外层的 try- catch 语句块处理文件与数据流文件与数据流简介
包 java.io 含有进行 I/O处理的各种类
两个主要数据类输入,java.io.InputStream
输出,java.io.OutputStream
两个主要的读写器类,
读入,java.io.Reader
写出,java.io.Writer,
什么是数据流?
数据流 是一系列的数据
– 例如,System.in,System.out或 System.err
所处理的对象是数据流
System.in - 标准输入 (从键盘 )
System.out – 标准输出 (到屏幕 )
System.err – 标准错误输出 (到屏幕 )
可以重新定向 (例如,将从键盘改为从数据文件 )
什么是文件?
文件
– 可以用来长期保存大量的数据
– 在程序结束后仍能长期 (永久 )存在
– 文件一般位于副存储设备上
硬盘
光盘
磁带
保存在变量或数组中的数据是临时性数据
– 当程序结束时一般就会丢失
Java文件中的结构
Java?数据流?无其它 结构
程序员根据实际应用的需要指定文件的结构类 InputStream
类 java.io.InputStream 是一个抽象 (abstract)类,声明了从原始字节数据流读入数据的基本方法
类中声明的方法,
public abstract int read( ) throws IOException
public int read(byte[ ] data) throws IOException
public int read(byte[ ] data,int offset,int length) throws IOException
public long skip(long n) throws IOException
public int available( ) throws IOException
public void close( ) throws IOException
public void mark(int readlimit)
public void reset( ) throws IOException
public boolean markSupported( )
以字节为单位读入数据
类 InputStream的成员方法 read( )读入单个无符号字节 (unsigned byte)的数据,并返回一个整数类型 (int)的值 (与读入的无符号字节数据相对应 )
正常返回,介于 0和 255之间的一个数
如果遇到数据流结束,则返回 -1
public abstract int read( ) throws IOException
文件与数据流
包 java.io中含有对文件进行处理的类
– FileInputStream 以字节为单位从文件中输入数据
– FileOutputStream以字节为单位输出数据到文件中
– FileReader 以字符为单位读取文件数据
– FileWriter以字符为单位写数据到文件中
– 随机访问文件
RandomAccessFile
从文件中输入
类 java.io.FileInputStream 表示从文件中输入字节数据的输入流 (InputStream)
类中的成员方法,
public FileInputStream(String name) throws FileNotFoundException
public FileInputStream(File file) throws FileNotFoundException
public FileInputStream(FileDescriptor fdObj)
public native int read( ) throws IOException
public int read(byte[ ] data) throws IOException
public int read(byte[ ] data,int offset,int length) throws IOException
public native long skip(long n) throws IOException
public native int available( ) throws IOException
public native void close( ) throws IOException
public final FileDescriptor getFD( ) throws IOException
写数据到文件中
类 java.io.FileOutputStream表示将字节数据写入到文件中的输出流 (OutputStream)
类中的成员方法,
public FileOutputStream(String name) throws IOException
public FileOutputStream(String name,boolean append) throws IOException
public FileOutputStream(File file) throws IOException
public FileOutputStream(FileDescriptor fdObj)
public native void write(int b) throws IOException
public void write(byte[ ] data) throws IOException
public void write(byte[ ] data,int offset,int length) throws IOException
public native void close( ) throws IOException
public final FileDescriptor getFD() throws IOException