一、异常的概念:在Java程序中可能程序执行意外失败的事件称为异常
- 程序运行—>异常—>程序中断运行
- 异常的出现的情况:
①.运行时磁盘空间不够
②.内存耗尽,无法进行实例化
③.算数异常
④.JVM崩溃
二、异常的体系结构
- 1.所有异常类的祖先是Throwable
- 2.异常可以分为Error和Exception
①.Error:错误 程序不进行处理
②.Exception:异常 在程序的开发中要对这些异常进行处理
– 编译时异常: 在编译期间出现的异常
– 运行时异常: 在运行期间出现的异常 - 三、常见的异常
大体分类
1.数组下标越界的异常: ArrayIndexOutOfBoundsException
举例
public static void main(String[] args) {
int[] numbers = new int[5];
System.out.println(numbers[5]);
}
报错信息:
2.算术异常 ArithmeticExceptiopn
举例
public static void main(String[] args) {
int i = 10;
System.out.println(i / 0);
}
报错信息:
3.空指针异常 NullPiontException
举例
public static void main(String[] args) {
String names[] = null;
System.out.println(names[0]);
}
报错信息:
4.类型转化异常 ClassCastException
举例
public static void main(String[] args) {
Object date = new Date();
String str = (String)date;
}
报错信息
四、自定义异常.
- 自定义异常
1.自定义的异常类需要继承于现有的异常类
(RunntimeException|Exception)
2.提供一个序列号,通过序列号可以唯一确定异常类的对象
3.需要提供一个重载构造器
举例:
public class MyException extends RuntimeException {
private static final long serialVersionUID = -5759074374781168235L;
public MyException() {
// TODO Auto-generated constructor stub
}
public MyException(String message) {
super(message);
}
}
五、如和处理Exception异常
- 处理异常的方式一:抓抛模型
1.抛:当执行程序时,一单出现异常,就会省城一个对应异常类型的对象,并将对象抛出
①.抛的类型:自动抛和手动抛
②.此异常的对象处理是教给方法的调用者
Java程序在执行的过程中,如果出现异常,会自动生成一个异常类对象,将来交给方法的调用者
2.抓:抓住程序中抛出的异常对象
在Java程序运行时收到异常对象,会寻找能处理这种类型的异常代码,并把当前异常对象交给其来处理
1.try-catch-finally
try{
// 可能会发生异常的代码
}catch(Exception e1){
// 处理方式一
}catch(Exception e2){
// 处理方式二
}finally{
// 一定要执行的代码(不论发生异常与否)
}
①.try代码块里面存放的代码时有可能发生异常的代码,同时需要知道try代码块中声明的变量是局部变量,作用域是在代码块里
②.catch语句是用来处理异常
getNessage():获取异常信息
printStrackTrace():打印异常信息(程序出错的位置信息及原因)
③.catch代码块可以有多个,try中抛出的异常对象是从上往下去匹配catch中的异常类型,一单满足就执行catch中的代码。执行完后就跳出所有的catch
④.如果catch中多个异常是并列关系
⑤.如果catch中多个异常有继承关系,自雷需要在父类异常对象上面
⑥.finally是可选的代码块,如果加了finally,都会执行finally中的代码
提示:
①.对于运行时的异常来说,可以不用显示的处理异常
②.对于编译时异常来说,
- 异常处理方式二:
1.在方法的声明处:显示的抛出异常对应的类型(委托处理)
2.语法格式:public void method() throws 异常类型一,二…
3.处理剖析:
①.当此方法内出现异常时,回抛出
②.异常对象是可以一直向上抛,直到main函数也可以通过try-catch进行异常处理
举例
public class TestException3 {
public static void main(String[] args) {
try {
method2();
} catch (FileNotFoundException | InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static void method3() {
try {
method2();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static void method2() throws FileNotFoundException, InterruptedException {
method1();
}
public static void method1() throws FileNotFoundException, InterruptedException{
FileInputStream fs = new FileInputStream(new File("hello.txt"));
Thread.sleep(300);
}
}
- 总结:
1.抓:异常的处理
两种处理方式:①.try-catch
②.throws+异常类型…
2.抛:一旦程序执行中出现异常,会抛出一个异常类的对象
两种方式:①.自动抛出
②.手动抛出 throws+异常类的对象