异常Exception
1.运行时异常:有一个共同的父类:RuntimeException
java.lang.ArithmeticException:算术运算异常
int a = 2;int b = 0;if (b != 0) {a = a / b;}
java.lang.NullPointerException:空指针异常
String str = null; if (str != null) {boolean f = str.equals("abc");}
java.lang.ArrayIndexOutOfBoundsException:数组下标越界异常。
int[] niArr = new int[2]; int index = 0; if (index > 0 && index < niArr.length - 1) { niArr[index] = 2;}
java.lang.ClassCastException:类型转换异常。
Object obj = new String("abc"); if (obj instanceof Integer) { Integer inte = (Integer) obj;}
java.lang.NumberFormatException:数字格式化异常。
String s = "abc"; if (s.matches("\\d+")) { int i = Integer.parseInt(s);}
编译时异常/非运行时异常/检测异常:
1. throws:并没有真正的处理异常,只是骗过编译器。
a) 逐层的上抛异常,直到main方法。如果main中仍没有处理,程序会被异常中断。
b) throws中断了本层的代码。
c) throws运行时异常没有意义
要想积极的处理异常,用try-catch-finally:
try{// 出现1次 // 可能出现异常的代码 }catch(异常对象){// 出现0-N次 多次的时候小的写上面,大的写下面,异常时从上到下逐步的捕获的。 // 捕获到对应异常对象之后所做的处理。 }finally{// 出现0-1次,没有catch时finally一定要有。 // 一定会执行的代码 } try{// // 可能会出现异常的代码 // 多个catch语句时,小异常写上面,大异常写下面 }catch(ArithmeticException ae){// 捕获try中抛出的异常。当try中抛出异常被捕获到时执行这里 ae.printStackTrace();// 打印异常对象的堆栈信息
Throwable:可抛出的:
两个子类:Error Exception。
throw 关键字,后跟异常对象,直接将异常对象抛出。
自定义异常:只能用throw抛出。分两步:
1. 继承自Exception或者Exception的子类。
2. 提供String做参数的构造,利用父类的String做参数的构造完成初始化,String内容用于对异常的描述。
注意重写时方法抛出异常的问题:
子类重写方法抛出的异常不能比父类的更宽泛(要么相同,要么更小)
练习:
自定义异常 AgeException
在person类中(name,age),setAge方法,如果不符合年龄的条件,抛出自定义的AgeException
Person类 public class Person { private String name; private int age; public Person() { super(); } public Person(String name, int age) throws AgeException{ super(); this.setName(name); this.setAge(age); } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) throws AgeException{ if(age>120 || age<0){ throw new AgeException("年龄不合法"); }else{ this.age = age; } } public static void main(String[] args) { try { Person p = new Person("zhangfei",30); System.out.println(p.getName()); } catch (AgeException e) { e.printStackTrace(); } } } AgeExpection 类 public class AgeException extends Exception{ public AgeException(){ } public AgeException(String s){ super(s); } }