1.NullPointerException-空指针异常
Movie wm=new WarMovie();
wm=null;
wm.seeMovie();
2.ClassCastException-类型转换异常
A子类向上转型成父类后,将A子类的引用类型再转换成父类的另外一个B子类,在编译阶段是能通过的,因为父类型可以强制转换成B子类型,但是堆内存中实际存在的是A子类,在运行阶段A子类是不能转换成B子类的,因为A子类与B子类不存在继承关系
该异常总是在向下转型的时候发生
package Movie;
public class Movie {
public void seeMovie() {
System.out.println("看电影");
}
}
package Movie;
public class WarMovie extends Movie {
public void seeMovie() {
System.out.println("看战争电影");
}
}
package Movie;
public class LoveMovie extends Movie {
public void seeMovie() {
System.out.println("看爱情电影");
}
}
public class App {
public static void main(String[] args) throws Exception {
Movie wm=new WarMovie();
wm.seeMovie();
LoveMovie wm2=(LoveMovie)wm;
wm2.seeMovie();
}
}
JAVA规范中要求,在向下转型之前,应该用instanceof运算符判断,以避免该异常
接口和接口在强制类型转换的时候,没有继承关系也可以强转,但是运行时可能会出现class cast exception;
demo:
public class App {
public static void main(String[] args) throws Exception {
M m = new N();
K k = (K) m;
}
}
interface K {
}
interface M {
}
class N implements M {
}
3.ArrayIndexOutOfBoundsException-数组下标越界异常
int[] arr2 = { 5, 6, 9, 8, 7 };
System.out.println(arr2[8]);
4.NumberFormatException-数字格式化异常
Integer a = new Integer("中午");
System.out.println(a);
5.ConcurrentModificationException-迭代器异常
原因:集合结构改变,但是没有重新获取迭代器,调用next方法
Collection c = new ArrayList();
Iterator it = c.iterator();
String a1 = "abc";
String a2 = "abc";
c.add(a1);
c.add(a2);
6.NotSerializableException序列化异常
参与序列号与反序列化的类必须实现Serializable接口;
public class Movie implements Comparable<Movie>, Serializable{
}