异常:运行过程中,将程序发生的不正常的情况成为“异常”;
异常事件大致可分为两种:
- Error:JVM系统内部错误,资源耗尽等严重情况。
- Exception:其他因编程错误或偶然的外部因素导致的一般问题。
java异常层次如下:
java碰到异常时,程序往往会中断执行,我们往往通过异常处理机制 阻止程序中断执行 ,其中我们可以处理的异常一般为Exception型的。java异常处理有两种方式捕获 和抛出。
异常的捕获大致如下:
public static void main(String[] args) {
int i = 0;
try {//在try()中,如果碰到有异常的代码,try里面的剩余代码不会继续执行
System.out.println(3/i);
}catch(Exception e) {//当不知道捕获的是什么异常的时候,可以使用所有异常的父类Exception
e.printStackTrace();//获取异常信息
System.out.println(e.getMessage());//获取关键异常信息
}finally{
System.out.println("----");//此段代码可写可不写,这是捕获异常时最终执行的一段代码
}
System.out.println("*******");
}
捕获异常
抛出异常大致如下:
public static void main(String[] args) {//也可以在main方法中继续throws Exception抛出异常
//main方法中抛出的异常直接抛到了java虚拟机上,就不能再程序中处理了,因此一般不这么做
B b = new B();
try {//throws在代码处抛出的异常,在调用捕获处理
b.test();
}catch(Exception e){
e.printStackTrace();
}
}
}
class B{
int i;
public void test() throws Exception{//可以使用throws在代码这里抛出异常,交给代码调用出捕获
B b = null;
System.out.println(b.i);
}
抛出异常
我们也可以自定义抛出异常的内容,大致代码如下:
public void test1(int age) throws Exception{
if(age>=0 && age<=150) {
System.out.println("年龄是"+age);
}else {//此处是定义抛出异常的内容
throw new Exception("年龄不在0-150之间");
}
自定义抛出异常的内容
我们除了可以自定义抛出异常的内容,我们也可以定义一个异常类,用于抛出,不过java自带的异常已经够用的了,一般不需要我们自己定义异常类
当子类重写父类的方法是,如果父类方法有抛出异常,那么子类重写的方法不能抛出比父类方法异常更大的异常。