Java华丽转身 —— 异常处理

2 篇文章 0 订阅

         Java异常是一个运行时错误。异常可以是Java运行时系统生成,也可以是程序代码造成的。

         Java抛出的异常与违反Java语言规则的基本错误或Java执行环境的约束有关。代码生成的异常通常用于向方法的调用者报告某些错误条件。

 

         设计良好的程序应该在异常发生时提供处理错误的方法,使得程序不会因为异常的发生而阻断或产生不可预见的结果。这就是程序的健壮性。


分类

   

Error:是错误,虚拟机生成并抛出,程序可以不对其进行处理。

Exception:异常类的父类,子类对应各种各样可能出现的异常事件,一般需要用户显示的声明或捕获。

 

 

处理机制


   1、在方法中用try...catch语句捕获并处理异常,catch语句可以有多个,用来匹配多个异常。例如:

    

public void p(int x){
 try{
  ...
 }catch(Exception e){
     catch(Exception e){
  …
 }
 }finally{
  ...
 }
}

       2、 对于处理不了的异常或者要转型的异常,在方法的声明处通过throws语句抛出异常。例如:

     

public void test1() throws MyException{
 ...
 if(....){
  throw new MyException();
 }
} 



示例

    
import java.io.*;
public class TestEx{
 public static void main(String[] args){ //一般不直接在main后面直接抛异常
    try{
	TestEx te = new TestEx();
    te.f2();
	}catch(IOException e){
	  e.printStackTrace();
	}
      
   FileInputStream in = null;
   try{
      in = new FileInputStream("myfile.txt");
	  int b;
	  b = in.read();
	  while (b != -1){
	     System.out.print((char) b);
		 b = in .read();
	  }
	  //文件找不到
   }catch(FileNotFoundException e){
      e.printStackTrace();
	  
   }catch(IOException e){//文件读写有问题
      System.out.println(e.getMessage());
   }finally{
      try{
	     in.close();
	  }catch(IOException e){
	     e.printStackTrace();
	  }
   }
   }

 void m(int i) throws ArithmeticException{ //直接在Void后面抛出异常,整数除以0时抛出的错误
    if(i == 0)
	throw new ArithmeticException("被除数为0");
 }
void f() throws FileNotFoundException , IOException{ //文件没有找到,读写有问题
    FileInputStream in = new FileInputStream("myfile.txt");
	int b;
	b = in.read();
	while(b != -1){
	  System.out.print((char) b);
	  b = in.read();
	}
}
void f2() throws IOException{
        f();
}
}

  



异常处理的一般原则

 

    1、能处理就早处理,抛出不去还不能处理的就想法消化掉或者转换为RuntimeException处理。因为对于一个应用系统来说,抛出大量异常是有问题的,应该从程序开发角度尽可能的控制异常发生的可能。    


 2、对于检查异常,如果不能行之有效的处理,还不如转换为RuntimeException抛出。这样也让上层的代码有选择的余地――可处理也可不处理。


3、对于一个应用系统来说,应该有自己的一套异常处理框架,这样当异常发生时,也能得到统一的处理风格,将优雅的异常信息反馈给用户。


4、一般不直接在main语句后面throw


总结


    异常能处理就处理,不能处理就抛出,最终没有处理的异常JVM会进行处理。Java异常映射到我们之前做的系统中写的try catch语句,通过以前写的程序中抛异常,处理异常很容易理解Java的异常,也很简单。


    对于一个应用系统,设计一套良好的异常处理体系很重要,这样保证了我们程序的健壮性,这就是为什么我们写代码的时候要加上异常处理,抛异常;有时候还要对出现的错误进行收集,优化系统,处理问题。

评论 27
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值