根类:Throwable
子类:Error
分析:Error是系统或数据库的错误,不是人为的
子类:Exception
分析:Exception是程序员人为的错误,不同于编写错误。
Exception分为RuntimeException和IOException,下面的FileNotFoundException就是IOException
1、空指针异常--NullPointerException
2、角标越界异常--ArrayIndexOutOfBoundsException
3、并发编程异常--ConcurrentModificationException
4、类型转换异常--ClassCastException
5、未找到指定文件异常--FileNotFoundException
6、算术异常--ArithmeticException
1、空指针异常
分析:本来指向堆中空间,之后不再指向
代码示例:
int [] array = new int[10];
array = null;
System.out.println(array[2]);
2、角标越界异常
分析:一般出现在数组中,输出的角标大于(数组长度-1)
代码示例:
int [] array = new int [10];
System.out.println(array[10]);
3、并发编程异常
分析:在集合中,在for循环遍历或者迭代器遍历的时候,自己添加或者删除集合的元素
代码示例:
ArrayList a1 = new ArrayList<>();
a1.add(14);
a1.add(14);
a1.add(18);
for (Integer integer : a1) {
if(integer ==18)
a1.add(8);
}
4、类型转换异常
分析:在集合中,例如集合中存的是Person对象,之后强制转型成Animal类型对象
代码示例:
ArrayList a1= new ArrayList();
a1.add(new Person("wangning", 18));
a1.add(new Person("ning", 18));
a1.add(new Person("wang", 18));
Animal a2 = (Animal)a1.get(0);
思考:这里需要一些规则,去规定集合中元素的类型,并且帮助解决向上转型和向下转型这两个繁杂的步骤,这时候泛型就出现了,要求存入的数据类型是泛型数据(Person),然后帮你向上转型,之后输出的直接是泛型数据(Person),这里帮助向下转型
5、未找到文件异常
分析:在给定File对象路径建立对象的时候,可能出现路径对应文件不存在的情况,需要使用exists()方法判断,使用File类中的getName()、getPath()等方法仍然能使用,但是一旦建立流对象操作File的时候,就会报错,File类操作的仅仅是路径,不管文件是否存在,如果不存在就新建,流类操作的是文件内容
代码示例:
String s1 = "./io/1.txt";
File file = new File(s1);
System.out.println(file.exists());
try {
FileOutputStream f1 = new FileOutputStream(file);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
System.out.println(file.getPath());
6、算术异常
分析:当除数为0的时候发生算术异常
代码示例:
public static int hh(int a , int b) {
return a / b ;
}
注意:
①throw用于抛出自定义异常,throw后的语句不会执行,无论throw是放在catch中还是花括号中
②throws用在方法签名中(函数名和参数列表组成),声明抛出异常的类
③可以throw一个新的自定义异常类,但是需要继承异常类,实现有参和无参构造方法,有参继承父类构造方法
注意:
①try:用于执行可能会发生异常的语句
②catch:用于捕获异常,打印异常信息
③finally:用于在trycatch后一定执行的语句
①执行语句,发生异常
②产生异常对象
③异常对象返回给调用者
④如果调用者有try catch语句,到catch中匹配异常
⑤没有try catch返回给JVM打印错误信息
final:修饰变量转变为常量,修饰类为不可继承类,修饰方法为不可重写方法
finally:用于在try catch最后执行,一定会执行
finalize:是基类Object类中的方法,所有对象都有的方法,用于在垃圾回收的时候调用
public static int hh(int a , int b) throws Exception11{
int c = 0;
try {
c = a / b ;
} catch (ArithmeticException e) {
System.err.println(e.getMessage());
} catch (Exception e) {
System.out.println(e.getMessage());
} finally {
System.out.println("wangning");
}
return c;
}
public static int hh(int a , int b) throws Exception11{
if (a / b == 0 ) {
throw new Exception11("hh");
}
注意:方法签名中写上throws 异常类
public class Exception11 extends Exception {
private static final long serialVersionUID = 1L;
public Exception11() {
}
public Exception11(String mesage) {
super(mesage);
}
public static int hh(int a , int b) throws Exception11{
int c = 0;
try {
c = a / b ;
} catch (ArithmeticException e) {
throw new Exception11("错了");
} catch (Exception e) {
System.out.println(e.getMessage());
} finally {
System.out.println("wangning");
}
return c;
}