Error:JVM系统内部错误、内存耗尽
Exception:编程错误、外在因素
常见错误
OutOfBoundsException:数组越界
NullPointerException:空指针异常
ArithmeticException: / by zero除数为0
处理
捕获异常
int i = 0;
try { //用try{}来括住一段有可能出项异常的代码段
System.out.println(3/i);//由于异常,程序中断
}catch(Exception e) {//当不知道捕获的是什么类型的异常时,可以直接使用所有异常的父类Exception
e.printStackTrace();//显示Error在哪
System.out.println(e.getMessage());//显示Error是什么
}
System.out.println("ok");
finally 爱写不写;
抛出异常(甩锅)
如果一个方法(中的语句执行时)可能生成某种异常,当时并不能确定如何处理这些异常,则此方法应显式地声明抛出异常,表明该方法将不对这些异常进行处理,而由该方法的调用者负责处理(贱不贱)
子类重写父类的方法时,子类不能抛出比父类方法更大范围的异常
人工抛出异常
public static void main(String[] args){
B b = new B();
try {
b.test1(-100);
} catch (Exception e) {
e.printStackTrace();
}
}
}
//NullPointerException的父类是Exception
public void test() throws NullPointerException{//可以使用throws在代码这抛出异常,然后在调用方捕获处理
B b = null;
System.out.println(b.i);
}
int age;
public void test1 (int age) throws Exception {
if(age >= 0 && age <= 150) {
this.age = age;
System.out.println("年龄是:"+this.age);
}else {//不符合时,syso异常
throw new Exception("age不在0到150之间");
}
}