[size=large]Java异常机制
在编译时看似没有错误的代码经常在运行的时候会出现各种各样的错误而导致程序非正常结束,如我们通常遇到的数组下标越界、空指针异常,这些统称为异常。
一、了解异常及异常的类
异常的概念:
导致程序中断运行的一种指令流。
Java的异常结构中有两个常用的类:
Exception和Error,他们都是Throwable的子类。
1、Error错误是程序中无法处理的,比如内存过小而使正常的代码无法运行,此时不是修改代码就可以的,需要更改电脑的硬件设施。
2、Exception是程序中出现的问题,可以通过修改代码来使程序重新运行起来。常用try...catch处理。
Exception类包括:
运行时异常:(常见的)
ArrayIndexOutOfBoundsException - 数组下标越界
ArithmeticException - 算术运算中,被0除或模除
ClassCastException - 类型转换异常
NullPointerException - 空指针异常
非运行时异常:
又称强制异常,发生这种异常时,Java编译器强制要求进行try...catch处理。
运行时异常出现时,不会强制要求处理,程序还可以继续运行,而要修改异常处代码,最常使用的是System.out.println();它不仅仅是一个输出语句,更是检查运行时异常的利器! :lol:
二、异常处理机制
try...catch...finally处理机制
该处理机制通常在强制异常中使用。[/size]
[size=large] 如果在try中产生了异常,程序会自动跳转到catch语句中找到匹配的异常类型进行相应的处理,最后不管程序是否发生异常,都会执行finally语句,finally语句是可以省略的。
try中某一行的代码如果发生异常,那么try中这一行之后的其余代码不会被执行,也就是说只能找到第一行异常的代码,并且调用对应的catch部分处理。
上述代码中捕获异常的类可以使用更加细分的类,这样便于了解到底是什么出现了异常,如FileNotFoundException.....当然,利用向上转型的概念,所有的异常对象都可以使用Exception接收,那么上面两个catch代码就可以合并为一条:[/size]
[size=large]
三、调试异常的方法
异常信息分析与程序调试:
1、根据提示的信息确定异常的类型(查找API)
2、根据提示信息找到出错的位置(提示错误信息中第一个自己定义的类)
3、分析问题(使用System.out.println()输出,运行程序检查错误)
4、修改代码
5、再次调试....
什么时候就要抛出异常呢?
写程序给用户使用时出现异常必须要处理,不能往外抛出异常;
写第三方插件时,就要向外抛出异常,而不要去处理它。
(throw-实例化一个异常对象,throws-将异常抛出不进行处理)
Debug模式调试错误:
另一种调试错误的方法,但是不建议使用,不是通过自己找到错误,长期会慢慢的不使用Debug就对待错误无从下手。[/size]
如有不足欢迎指正! :D
在编译时看似没有错误的代码经常在运行的时候会出现各种各样的错误而导致程序非正常结束,如我们通常遇到的数组下标越界、空指针异常,这些统称为异常。
一、了解异常及异常的类
异常的概念:
导致程序中断运行的一种指令流。
Java的异常结构中有两个常用的类:
Exception和Error,他们都是Throwable的子类。
1、Error错误是程序中无法处理的,比如内存过小而使正常的代码无法运行,此时不是修改代码就可以的,需要更改电脑的硬件设施。
2、Exception是程序中出现的问题,可以通过修改代码来使程序重新运行起来。常用try...catch处理。
Exception类包括:
运行时异常:(常见的)
ArrayIndexOutOfBoundsException - 数组下标越界
ArithmeticException - 算术运算中,被0除或模除
ClassCastException - 类型转换异常
NullPointerException - 空指针异常
非运行时异常:
又称强制异常,发生这种异常时,Java编译器强制要求进行try...catch处理。
运行时异常出现时,不会强制要求处理,程序还可以继续运行,而要修改异常处代码,最常使用的是System.out.println();它不仅仅是一个输出语句,更是检查运行时异常的利器! :lol:
二、异常处理机制
try...catch...finally处理机制
该处理机制通常在强制异常中使用。[/size]
try{
file.creatNewFile();
Robot rb = new Robot();
}catch(IOException e){
}catch(AWTException e){
}finally{
}
[size=large] 如果在try中产生了异常,程序会自动跳转到catch语句中找到匹配的异常类型进行相应的处理,最后不管程序是否发生异常,都会执行finally语句,finally语句是可以省略的。
try中某一行的代码如果发生异常,那么try中这一行之后的其余代码不会被执行,也就是说只能找到第一行异常的代码,并且调用对应的catch部分处理。
上述代码中捕获异常的类可以使用更加细分的类,这样便于了解到底是什么出现了异常,如FileNotFoundException.....当然,利用向上转型的概念,所有的异常对象都可以使用Exception接收,那么上面两个catch代码就可以合并为一条:[/size]
try{
file.creatNewFile();
Robot rb = new Robot();
}catch(Exception e){
}
[size=large]
三、调试异常的方法
异常信息分析与程序调试:
1、根据提示的信息确定异常的类型(查找API)
2、根据提示信息找到出错的位置(提示错误信息中第一个自己定义的类)
3、分析问题(使用System.out.println()输出,运行程序检查错误)
4、修改代码
5、再次调试....
什么时候就要抛出异常呢?
写程序给用户使用时出现异常必须要处理,不能往外抛出异常;
写第三方插件时,就要向外抛出异常,而不要去处理它。
(throw-实例化一个异常对象,throws-将异常抛出不进行处理)
Debug模式调试错误:
另一种调试错误的方法,但是不建议使用,不是通过自己找到错误,长期会慢慢的不使用Debug就对待错误无从下手。[/size]
如有不足欢迎指正! :D