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

java异常学习

时间:2015-04-09 16:57:11      阅读:194      评论:0      收藏:0      [点我收藏+]

标签:

一、从根部异常可以分为Erro和Exception两大类他们都继承自Thorwable: 

 Error一般指的是一些无法挽回的错误,当这些错误发生后,程序就会直接死掉,无法继续运行。

 Exception : 一般分为:运行时异常和非运行时异常,

    运行时异常:指的是程序已经通过编译,在程序运行时产生了异常,这个是由于程序自己编写的代码不够健壮,考虑不够完善导致的。如果程序员足够认真这些是完全可以避免的。

    非运行时异常:是程序代码语法错误 ,在程序编译时就不能通过而抛出的异常。

public class Test {  
  
    public static void main(String[] args) {  
        String filename = "d:\\test.txt";  
        try {  
            FileReader reader = new FileReader(filename);  
            Scanner in = new Scanner(reader);  
            String input = in.next();  
            int value = Integer.parseInt(input);  
            System.out.println(value);  
        } catch (FileNotFoundException e) {  
            e.printStackTrace();  
        } finally {  
            System.out.println("this is finally block!");  
        }  
    }  
} 

如果d盘根目录下没有test.txt的话,该程序抛出异常:

this is finally block!
java.io.FileNotFoundException: d:\test.txt (系统找不到指定的文件。)
 at java.io.FileInputStream.open(Native Method)
 at java.io.FileInputStream.<init>(FileInputStream.java:106)
 at java.io.FileInputStream.<init>(FileInputStream.java:66)
 at java.io.FileReader.<init>(FileReader.java:41)
 at Test.main(Test.java:10)
可以看出上面的异常抛出时没有指名异常的具体发生出处。

我们将test.txt中的2322改成abc,看看结果:

this is finally block!
Exception in thread "main" java.lang.NumberFormatException: For input string: "abc"
 at java.lang.NumberFormatException.forInputString(NumberFormatException.java:48)
 at java.lang.Integer.parseInt(Integer.java:447)
 at java.lang.Integer.parseInt(Integer.java:497)
 at Test.main(Test.java:13)

这时我们会发现,该异常指明了异常的内容和发生的出处,那时因为该异常我们没有对它进行声明,而FileNotFoundException我们对它进行了声明所以,在此异常抛出时没有指名它的出处。

总结: 异常的一般处理,如果我们声明一个异常秉承并处理它,则在该异常发生时会进行相应的处理。如果对于一个异常我们没有对它进行声明处理,那么在异常发生时,回去调用相关的方法,如果该方法也没有声明处理,则它会一直回溯直至main函数。

二、常见的异常:

  NullPointerException 空指针、ClassNotFoundException  找不到类 、ClassCastException   类型转换、ArithmeticException   算数条件

  ArrayIndexOutOfBoundsException  数组越界

三、自定义异常:

  使用自定义异常的原因:一、java不可能封装所有我们在程序可能用到的异常。二、java封装的异常提示信息部明了。基于这两点我们可以进行自定义异常的创建,来改善异常的处理。

pbulic  class MyException  extends RuntimeException{
    public MyException(){
    }  
    pubic MyException(String message){
         super(message); 
     }  
}

四、try/catch/finally的使用情况:

在进行异常处理时,尽量不要将catch 和 finally放在一起使用。

public class  FinallyTest{
    public static main(String[] agrs){
         boolean file = open();
    }
    public static boolean open(){
      string  filename = "d://test.txt";  
        try{
            try{
                  FileReader  file = new FileReader(filename);
                 Scanner  sn = new Scanner(file);
                  String  str = sn.next();
                   int   num = Integer.paseInt(str);
                    System.out.println(num);
            }finally{
                //关闭一些资源
            }
        }catch(exception e){
            Systme.out.println("文件内容输出异常");
        }
    }
}                                            

  尽量将catch和finally分开处理,catch进行异常的捕捉,finally进行一些流的关闭。。。

 

java异常学习

标签:

原文地址:http://www.cnblogs.com/fanshao/p/4409936.html

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