一、错误
1、定义:程序运行时的不正常状态。
2、分类:
(1)致命性:
可能会导致系统崩溃,并且我们不能通过编写程序来解决它。
(2)普通级别:(这类错误一般称为异常,也叫例外,即exception)
可能会导致程序非正常中断,但可以通过编写相关代码去处理。
二、异常
1、分类:
1)常见异常有:
“
ArithmeticException异常。进行表达式运算时,除数不能为0。
ArrayIndexOutOfBoundsException异常。数组下标越界异常。
IncompatibleClassChangeException异常。类不兼容异常。当修改一个类定义后,引用该类的其他类没有重新编译,就会产生
该异常。
IncompatibleTypeException异常。类型不兼容异常。若试图定义一个接口实例,则会引发该类异常。
NegativeArraySizeException异常。数组元素个数为负异常。NoClassDefFoundException异常。类未定义异常。若一个类被引用,但在运行时,系统并没有找到被引用的类,就会引发该异常。
NoClassDefFoundException异常。类未定义异常。若一个类被引用,但在运行时,系统并没有找到被引用的类,就会引发该异常。
NullPointerExcion异常。空指针异常。若一个对象的值是null.而程序试图访问它的变量或方法或者访问空数组中的元素时,会引发该类异常。
OutOfMemoryException异常。内存溢出异常。当系统无法再向应用程序提供内存时,会引发该异常。
SecurityException异常。安全方面的异常,一般在浏览器内抛出。若java小程序试图进行不安全的操作时,则会抛出该类异常。
ArrayStoreException 数组存取异常。试图存取数组中错误类型的异常。
FileNotFoundException 文件不存在异常。 试图存取一个并不存在的文件。
IOException I/O异常 通常的I/O错误。
”
2、按是否捕获分类:
1)免检异常:eg:RuntimeException
2)必检异常:“必须被一个方法捕获,或必须列在抛出它或传播它的任一方法的throws子句中。”
“
例如
I/O操作必须捕获异常,而遍历数组元素时不需要由程序员控制,系统自动对数组做检查。像内存耗尽,访问到数组末尾等这样的操作也由系统来完成。
”
三、异常处理
分两步:找、改。
1、处理异常的步骤:
1)找到可能出现异常的地方。
2)编写代码来处理异常。
2、JAVA中的异常处理语句
try、catch、finally
1)try
a、可以圈出可能出现异常的语句块
b、”一个try块可以有几个catch子句与之对应”
2)catch
a、划分异常种类并进行处理
b、“每个catch子句称为一个异常处理器”
c、try后不一定要有catch语句。如果没有catch语句,可用finally。
3)finally
a、圈出不管是否有异常产生,都会执行的代码。
【即使try所圈定的代码中有return、break、continue、throw等,
finally中的语句也会执行
b、”try语句括住的代码称为保护代码”
c、finally语句不会被执行的有且只有一种情况:
在保护代码即在try内执行了System.exit()方法。
System.exit()方法是用来结束当前正在运行中的java虚拟机的。
d、finally语句可有可无,并且若是有,则总是写在catch之后。
引用部分:
“
try { //此处为抛出具体异常的代码 }catch(ExceptionType1 e) { //抛出ExceptionType1异常时要执行的代码 }catch(ExceptionType2 e) { //抛出ExceptionType2异常时要执行的代码 ....... }catch(ExceptionTypek e) { //抛出ExceptionTypek异常时要执行的代码 }finally { //必须执行的代码 }
“
1)其中,ExceptionType1、ExceptionType2...
ExceptionTypek是产生的异常类型,根据发生异常所属的类型,找到对应的catch语句并执行,执行完毕后系统将不再与其他的异常类型进行比较。
“
3、try-catch-finally语句执行顺序
try-当抛出异常→跳转到相应的catch处→执行catch语句→跳转到tey-catch后的语句(如果有finally就执行finally)
try-没有抛出异常→跳转到所有catch之后的语句。
4、处理异常的方法:
1)不进行任何处理
2)在异常发生的地方处理
3)在除异常发生的其他地方处理
比如:在程序的某方法出现异常后,该异常被传递到其他方法后才被处理
4、抛出语句
1)
“
如果在发生异常的方法内没有捕获并处理它,控制立即转去产生异常的这个方法的调用方法。如果在调用方法那儿也没有捕获,控制在转向调用它的调用方法,依此类推。这个过程称为异常传播。
这是处理异常的另一种方法。即在程序的其他地方处理异常。异常一直被传播,直到捕获并处理它,或是传出main方法,后者将导致程序中断,并产生一条异常信息。
要想在某一层捕获异常,必须在try块内调用产生异常的这个方法,并且该try块还要有catch子句来处理这个异常。
”
2)抛出语句的格式:
访问权限修饰符 返回值类型 方法名 (参数列表)throws 异常列表a、”紧接在关键字throws后面的是该方法内可能发生且不进行处理的所有异常列表。抛出的异常可以有多个,各异常之间以逗号分隔。”
b、“一般地,如果一个方法引发了一个异常,而它自己又不处理,就要由其调用方法进行处理。
在子类中一个重写的方法可能只抛出父类中声明过的异常或其子类。
如果一个方法有完全相同的名称和参数,它只能抛出父类中声明过的异常或者异常的子类。
捕获多个异常时,应先捕获特殊的异常,即异常子类,然后才能捕获更一般的异常,即异常父类。”
四、自定义自己的异常
1、”自己定义异常时,必须从已有的异常类来继承。”
2、”用户自定义的所有异常类都必须间接或直接的是Exception的子类。”
3、“
在程序中发现异常情况时,程序员可抛出一个异常实例,将其放到异常队列中去,并激活java的异常处理机制。
throw new MyException();
”