异常(exception)
来源:互联网 发布:交友软件下载 编辑:程序博客网 时间:2024/06/08 07:37
异常exception:
当JAVA程序违反了JAVA的语义规则时,JAVA虚拟机就会将发生的错误表示为一个异常。违反语义规则包括2种情况。一种是JAVA类库内置的语义检查。例如数组下标越界,会引发IndexOutOfBoundsException;访问null的对象时会引发NullPointerException.另一种情况就是JAVA允许程序员扩展这种语义检查,程序员可以创建自己的异常,并自由选择在何时用throw关键字引发异常。
所有的异常都是java.lang.Thowable的子类,它们分为两类:exception和error,而exception又分为RuntimeException和CheckedException. CheckedException必须要求有对应的“异常处理模块”, 也即是说,如果你在程序中 throw 出一个异常,那么在你的程序中(函数中)就必须要 catch 这个异常(处理这个异常)。但是,对于 RuntimeException 和 Error 这两种类型的异常(以及它们的子类异常),却是例外的,你不需要在你的程序中显性的声明,抛出,捕获,处理该异常。其中, Error 表示 Java 系统中出现了一个非常严重的异常错误;而 RuntimeException 虽然是 Exception 的子类,但是它却代表了运行时异常。
Java 异常处理模型中引入了 try-finally 语法,它主要用于清理非内存性质的一些资源(垃圾回收机制无法处理的资源),例如,数据库连接、 Socket 关闭、文件流的关闭等。
import java.io.*;
public class Trans
{
public static void main(String[] args)
{
try
{
BufferedReader rd=null;
Writer wr=null;
try
{
File srcFile = new File((args[0]));
File dstFile = new File((args[1]));
rd = new BufferedReader(new InputStreamReader(new FileInputStream(srcFile), args[2]));
wr = new OutputStreamWriter(new FileOutputStream(dstFile), args[3]);
while(true)
{
String sLine = rd.readLine();
if(sLine == null) break;
wr.write(sLine);
wr.write("/r/n");
}
}
finally
{
// 这里能保证在何种情况下,文件流的句柄都得以被正确关闭
// 该方法主要用于清理非内存性质的资源(垃圾回收机制无法
// 处理的资源,如数据库连接、 Socket 关闭、文件关闭等等)。
wr.flush();
wr.close();
rd.close();
}
}
catch(Exception ex)
{
ex.printStackTrace();
}
}
}
如果一个函数中,它运行时可能会向上层调用者函数抛出一个异常,那么,它就必须在该函数的声明中显式的注明(采用 throws 关键字)。
只要一个方法关联了"异常",可以将这个"异常"关联向上传递,但是最终必须使用catch来终止"异常",或者一直传递到main()方法交给Java虚拟机来结束"异常"对象的生命,否则是通不过编译的。
"异常"对象从产生点产生后,到被捕捉后终止生命的全过程中,实际上是一个传值过程,所以你可以根据需要,来合理的控制检测到"异常"的粒度。例如,如果你并不需要知道具体产生的是何种具体的"异常",那么你可以使用"异常"的公共父类Exception来结合"异常"对象,即catch(Exception e){…}。同样在"异常"与方法关联的传递过程中,也可以根据需要控制关联"异常"的粒度,即throws后面跟上异常对象的父类名。
代码实例:
// 示例程序 1 ,这种写法能够编译通过
import java.io.*;
public class Trans
{
public static void main(String[] args)
{
try
{
test();
}
catch(Exception ex)
{
ex.printStackTrace();
}
}
static void test()
{
try
{
throw new Exception("test");
}
catch(Exception ex)
{
ex.printStackTrace();
}
}
}
// 示例程序 2 ,这种写法就不能够编译通过
import java.io.*;
public class Trans
{
public static void main(String[] args)
{
try
{
test();
}
// 虽然这里能够捕获到 Exception 类型的异常
catch(Exception ex)
{
ex.printStackTrace();
}
}
static void test()
{
throw new Exception("test");
}
}
// 示例程序 3 ,这种写法又能够被编译通过
import java.io.*;
public class Trans
{
public static void main(String[] args)
{
try
{
test();
}
catch(Exception ex)
{
ex.printStackTrace();
}
}
// 由于函数声明了可能抛出 Exception 类型的异常
static void test() throws Exception
{
throw new Exception("test");
}
}
// 示例程序 4 ,它又不能够被编译通过了
import java.io.*;
public class Trans
{
public static void main(String[] args)
{
try
{
// 虽然 test() 函数并没有真正抛出一个 Exception 类型的异常
// 但是由于它函数声明时,表示它可能抛出一个 Exception 类型的异常
// 所以,这里仍然不能被编译通过。
test();
}
catch(IOException ex)
{
ex.printStackTrace();
}
}
static void test() throws Exception
{
}
}
相关文档:
java异常处理模型: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1010609
Java中异常机制的深层原理探讨:
http://www.yuantiao.com.cn/2005-11-10/1131587929861.html
- 异常(exception)
- 异常:Exception
- Exception 异常
- 异常Exception
- 异常--Exception
- 异常(exception)
- 异常Exception
- 异常 Exception
- exception异常
- Exception异常
- Exception 异常
- 异常Exception
- Exception 异常
- Java 异常(Exception)&自定义异常
- Java 异常(Exception)&自定义异常
- 异常类exception classes
- C++ 异常 exception (1)
- C++中的异常(exception)
- DataGrid自定义分页以及几种常用的删除方法
- Ant入门
- TCP穿越NAT
- CAN i write something
- Windows XP硬件优化全功略
- 异常(exception)
- XP中可以被禁用的服务对照表
- 不要轻易在头文件中打开namespace
- 电脑重启故障解析
- 迁移临时文件夹 让系统性能全面提升
- JTATransaction
- 俞敏洪:和青年学生分享改变一生的5句话
- 求职过程记录(2)——黎明前的黑暗 ?
- win2k服务器版双机热备份