java异常处理
来源:互联网 发布:c语言表白代码爱心 编辑:程序博客网 时间:2024/05/20 13:39
1.try catch
尽管由Java运行时系统提供的默认异常处理程序对于调试是很有用的,但通常你希望自己处理异常。这样做有两个好处。第一,它允许你修正错误。第二,它防止程序自动终止。大多数用户对于在程序终止运行和在无论何时错误发生都会打印堆栈轨迹感到很烦恼(至少可以这么说)。幸运的是,这很容易避免。为防止和处理一个运行时错误,只需要把你所要监控的代码放进一个try块就可以了。紧跟着try块的,包括一个说明你希望捕获的错误类型的catch子句
public class Test_try {
//这表示 fun方法可能会丢异常出来,那么在调用fun的时候就会做好准备
static int fun(int a,int b) throws ArithmeticException{
int c=a/b;
return c;
}
public static void main(String args[]){
int age=0;
try{
age=-100;
if(age<0){
//throw作用手动抛出异常,此类异常在jvm看来并非异常而在程序员看来则是异常
Exception e = new Exception();
throw e;
}
}catch(Exception e){ // 捕获异常
System.out.println("age must >0 "+e);//显示异常信息
}
try{
int i = fun(2,0);
System.out.println("i is "+i);
}catch(ArithmeticException e){
System.out.println("exception "+e);
}
}
}
2.throw
在java代码中如果发生异常的话,jvm会抛出异常对象,导致程序代码中断,这个时候jvm在做的操作就是:创建异常对象,然后抛出,比如:
int i= 1;
int j = 0;
int res = 0;
res = i/j;//除0错误
System.out.println(res);
这5句代码运行到第四句会中断,因为jvm抛出了异常
////throw的作用/////////////////////////////////////////
手动抛出异常
但是有时候有些错误在jvm看来不是错误,比如说
int age = 0;
age = -100;
System.out.println(age);
很正常的整形变量赋值,但是在我们眼中看来就不正常,谁的年龄会是负的呢。
所以我们需要自己手动引发异常,这就是throw的作用
int age = 0;
age = -100;
if(age<0)
{
Exception e = new Exception();//创建异常对象
throw e;//抛出异常
}
System.out.println(age);
3.throws
////throws的作用///////////////////////////////////
声明方法可能回避的异常
有异常被抛出了,就要做处理,所以java中有try-catch
可是有时候一个方法中产生了异常,但是不知道该怎么处理它,那么就放着不管,当有异常抛出时会中断该方法,而异常被抛到这个方法的调用者那里。这个有点像下属处理不了的问题就交到上司手里一样,这种情况称为回避异常
但是这使得调用这个方法就有了危险,因为谁也不知道这个方法什么时候会丢一个什么样的异常给调用者,所以在定义方法时,就需要在方法头部分使用throws来声明这个方法可能回避的异常
void fun()throws IOException,SQLException
{
...
}
这表示 fun方法可能会丢两个异常出来,那么在调用fun的时候就会做好准备,比如可以这样
try
{
fun();
}catch(IOException e)
{
}catch(SQLException e)
{
}
4.finally
finally 关键字是对 Java 异常处理模型的最佳补充。 finally 结构使代码总会执行,而不管有无异常发生。使用 finally 可以维护对象的内部状态,并可以清理非内存资源。如果没有 finally,您的代码就会很费解。例如,下面的代码说明,在不使用 finally 的情况下您如何编写代码来释放非内存资源:
public void writeFile(String filePath, String fileName, String args)
throws IOException
{
FileWriter fw = new FileWriter(filePath + fileName);
try {
fw.write(args);
} catch (IOException e) {
//1
fw.close();
throw e;
}
//2
fw.close();
}
这段代码创建了一个FileWriter object,并调用 write 方法。在退出该方法之前,您必须关闭FileWriter object,以避免资源漏洞。为了完成这一任务,我们在 //2 处调用 close,它是该方法的最后一条语句。但是,如果 try 块中发生一个异常会怎么样呢?在这种情况下,//2 处的 close 调用永远不会发生。因此,您必须捕获这个异常,并在重新发出这个异常之前在 //1 处插入对 close 的另一个调用。这样就可以确保在退出该方法之前关闭FileWriter object。这样编写代码既麻烦又易于出错,但在没有 finally 的情况下这是必不可少的。有了 finally,前面的代码就可以重写为以下的形式:
public void writeFile(String filePath, String fileName, String args)
throws IOException
{
FileWriter fw = new FileWriter(filePath + fileName);
try {
fw.write(args);
} catch (IOException e) {
throw e;
} finally {
fw.close();
}
}
finally 块确保 close 方法总被执行,而不管 try 块内是否发出异常。因此,可以确保在退出该方法之前总会调用 close 方法。这样您就可以确信FileWriter object被关闭并且您没有泄漏资源。
- 【java】java异常处理
- java异常和异常处理
- Java 异常及异常处理
- java异常与异常处理
- Java异常处理-----自定义异常
- Java异常与异常处理
- java异常及异常处理
- Java 异常与异常处理
- Java异常与异常处理
- Java异常及异常处理
- Java异常处理--自定义异常
- JAVA异常之异常处理
- Java异常处理-----自行处理
- Java异常处理-----抛出处理
- Java异常处理-----抛出处理
- java异常处理
- java 异常处理分析
- java异常处理
- Pause Break键的妙用
- Visual Studio 2005 中用正则表达式查找特殊字符串
- Tomcat 5集群中的SESSION复制
- 采用Oracle Archive Log模式和非Archive Log模式对备份恢复的影响
- 修改注册表子键权限禁用autorun
- java异常处理
- 原理介绍之RAID0、RAID1、RAID0+1、RAID5
- 用apache实现禁止IP段或者主机对某个目录的访问
- ASP.NET 清除所有HTML标记和JS标记
- 一步一学Linux与Windows 共享文件Samba
- 如何动态扩大oracle 9i SGA区中的内存空间?
- linux下操作tomcat进程
- BitTorrent协议规范之peer与tracker通讯协议
- 用环境变量启动cmd.exe