异常:
导致程序中断运行的一种指令流,当异常发生时,如果没有进行良好的处理,则程序会中断执行。
常见的非自定义异常:
1、java.lang.ArithmeticException
算术异常
比如:被除数为0
2、java.lang.ArrayIndexOutOfBoundsException
数组下标越界异常
比如:没有输入参数,或输入参数不够
3、java.lang.NumberFormatException
数字格式化异常
比如:需要输入数字,但是输入的是字母
异常类的继承结构:
Exception(继承Throwable):一般表示程序中出现的问题。
Error(继承Throwable):一般指的是JVM错误,程序中无法处理。
异常的捕获方式:
try……catch
try……catch……finally
异常打印方式:
1、System.out.println(异常对象)
2、e.printStackTrace(); 打印的异常信息是最完整的
异常处理机制:
1、一旦产生异常,则首先会产生一个异常类的实例化对象。
2、在try语句中对此一场对象进行捕捉。
3、产生的异常对象与catcht语句中的各个异常类型进行匹配,如果匹配成功,则执行catch语句中的代码。
注意:
对于一个程序来说,如果有多个异常,最好分别进行捕获,不要直接使用Exception捕获全部异常。
先使用范围小的,再使用范围大的。
throws和throw关键字
1、throws:使用throws关键字声明的方法表示此方法不处理异常。
比如:
class Math{
public int div(int i, int j) throws Exception{
int temp = i / j;
retrun temp;
}
}
注意:
主方法是一切的起点,不要再主方法处使用throws,否则程序出现问题后肯定交由JVM进行处理,将导致程序中断。
2、throw:使用throw可以人为地抛出一个异常,抛出时直接抛出异常类的实例化对象即可。
public class ThrowDemo{
public static void main(String args[]){
try{
throw new Exception("自己抛出的异常"); //手工抛出的一个新的异常类实例
}catch(Exception e){
System.out.println(e);
}
}
}
注意:
这个关键字一般不会单独用。往往会抛出程序中已经产生的异常实例,而不会手工抛出一个新的异常类实例。
以上关键字联合使用的实例:
class Math{
public int div(int i, int j) throws Exception{
try{
int temp = i / j;
}catch(Exception e){
throw e;
}finally{
System.out.println("计算结束");
}
retrun temp;
}
}
public class ThrowDemo2{
public static void main(String args[]){
Math m = new Math();
try{
System.out.println("出发操作:" + m.div(10, 0 ));
}catch(Exception e){
System.out.println("异常产生:" + e);
}
}
}
Exception和RuntimeException:
继承关系:
Exception——>RuntimeException——>IllegalArgumentException——>NumberFormatException
注意:
Exception必须使用try……catch进行处理。
RuntimeException可以不使用try……catch进行处理,但是如果产生异常,则异常将由JVM进行处理,所以最好使用try……catch进行处理。
自定义异常类:
只需要继承Exception类即可
断言:
assert boolean 表达式;
比如:
assert x.length == 0;
assert boolean 表达式:详细信息;
比如:
assert x.length == 0:"数组长度不为0";
注意:
1)虽然断言的返回是boolean值,但是并不能将其作为条件判断语句。
2)断言虽然有检查运行结果的功能,但是在开发中并不提倡使用断言。
阅读(903) | 评论(0) | 转发(0) |