码迷,mamicode.com
首页 > 编程语言 > 详细

Java——异常处理

时间:2015-03-20 23:31:27      阅读:245      评论:0      收藏:0      [点我收藏+]

标签:

【异常】

 <1>运行期出现的错误(不是编译时的语法错误)。
 <2>观察错误的名字和行号很重要!
 
【程序分析:数组越界】
  int [] arr = {1,2,3};
  System.out.println(arr[4]);
  注:在C和C++中编译通过,因为在C和C++中不进行数组越界的检查(这就很容易造成缓冲区溢出漏洞)。
         Java可以检查数组下标是否越界,但是有一定的检查范围。
  报错:Exception in thread ‘main‘ java.lang.ArrayIndexOutOfBoundsException: 4[出错的下标]at ***(出错位置)
            ----数组下标越界
 
【程序分析:分母为0】
  System.out.println(2/0);
  报错:Exception in thread ‘main‘ java.lang.ArithmaticException: by zero at ***
  解决:捕获异常
  try{
        System.out.println(2/0);
   }catch(ArithmaticException ae){   
          //Java程序在出错时,ae对象是可以直接使用的,以内默认情况下已经初始化
         System.out.println("系统维护中...");   
         //这是很多网站常用的提示,因此持续刷新并不能解决问题
         ae.printStackTrace();   
         //这是常用的解决方式,即把错误的堆栈信息打印出来(把引起错误的所有信息打印,这样便于程序员进行调试)
  }
 
 技术分享
 
【程序】
 
技术分享
<1>查看API文档可知,每种方法都会有对应的Exception,意在提醒用户在使用该方法时要格外注意该异常的出现,可以使用 throw Exception语句解决;还有一种异常直接在方法声明中就给出,例如public int read() throws IOException{}。
<2>在方法定义时,使用throws关键字抛出可能的异常;在调用该方法时,使用try-catch语句捕获异常。
<3>throw的用法:
       void A(int i) throws ArithmaticException{
               if(i==0){
                    throw new ArithmaticException("被除数不能为0");
                    //这相当于一个错误打印语句
               }
         }
 
 
【异常分类】
 
技术分享
 
<1>所有的异常均来自这样一个类:Throwable(java.lang.Throwable其有两个子类--Error、Exception)。
<2>Exception是可以初始化的异常,其中还有一个比较特殊的异常:RuntimeException。
<3>Throwable意为"可抛出的",只要从该类继承的对象,都是可以抛出异常。
<4>Error是系统级错误,即虚拟机错误,我们用户无法处理;Exception可以由用户处理。
<5>RuntimeException是经常出现的错误,可以不进行处理;另外一种Exception(不是运行时的Exception)必须进行捕获并处理(JDK中有些方法后面直接写出throws的即代表必须处理的异常)。
 
技术分享
 
【Exception分类】
 
技术分享
 
【finally】
 技术分享
 
工作原理:
 
 技术分享
存在的必要性:
如果前面执行打开文件操作,当操作出错时,对应的代码不会继续执行,但是我们必须要把打开的文件关闭,这段代码就需要放置在finally代码块中。
 
【try】
 
 技术分享
【catch】
 
 技术分享
【finally】
 
技术分享
 
示例程序:
 
 技术分享
【异常的抛出和处理】
 
程序:
void f() throws FileNotFoundException,IOException{
     //比较严格的是抛出多种可能的异常,可以根据实际捕获的异常作出不同的处理
     FileInputStream in = new FileInputStream("**.txt");
     int b;
     b = in.read();
     while(b == -1){
             System.out.println((char)b);
             b = in.read();
      }
  }
 
 void f2(){
        try{
              f();
         catch(FileNotFoundException e){
                  e.getMessage();
        //必须要对Exception作出相应的处理,否则就相当于把Exception认为吞并了
         }catch(IOException e){
                  e.printStackTrace();
         }
     }
}
 
 void f2() throws IOException{
         f();
  }
//捕获异常后不知道怎么处理,可采用上述方法。
注:如果任何异常都不想处理,也可以在main函数上直接抛出异常,这时抛出的异常是交给Java运行系统。除了在做测试意外,实际编程中不要在main函数中抛出异常。
 
 技术分享
 
【Exception举例】
 
技术分享
注:这里要特别注意出错的行号(极其重要--说明哪个方法在哪个地方出的错),这时往往是由于其中一个地方错误引起的。
 
 技术分享
注:Exception应该放在后面,不能置于其子类的前面。
报错:已捕获到异常 java.io.FileNotFoundException ****
 
 
【自定义异常】
 
在实际项目中往往需要自己定义需要的异常类,从已存在的类(RuntimeException等)继承即可。
 
步骤:
技术分享
 
【举例】
 
技术分享
 
技术分享
 
【注意】
 
技术分享
注:<1>第一个抛出的异常类型和原来的不一致,应该为IOException。
       <2>第二个抛出的范围大了(范围大了小了都不可以)。
       <3>第三个不抛异常可以重写方法。
       <4>第四个抛出异常多了。
                                                                                   
 
 
 
 
 
 

Java——异常处理

标签:

原文地址:http://www.cnblogs.com/yedushusheng/p/4354681.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!