异 常:
异常:就是不正常。 程序在运行时出现的不正常情况。
其实就是程序中出现的问题。这个问题 按照面向对象思想进行描述,并封装成了对象。 因为问题的产生有产生的原因、 有问题的名称、 有 问题的描述等多个属性信息存在。
当出现多属性信息最方便的方式就是将这些信息进行封装。
异常 就是 java 按照面向对象的思想将问题进行对象封装。这样就方便于操作问题以及处理问题。
出现的问题有很多种,比如角标越界,空指针等都是。
就对这些问题进行分类。而且这些问题 都有共性内容比如:每一个问题都有名称,同时还有问题描述的信息, 问题出现的位置,所以可以 不断的向上抽取。形成了 异常体系 。
java.lang.Throwable:
Throwable :可抛出的。
|--Error :错误,一般情况下,不编写针对性的代码进行处理,通常是 jvm 发生的,需要对程 序进行修正。
|--Exception :异常,可以有针对性的处理方式
无论是错误还是异常, 它们都有具体的子类体现每一个问题, 它们的子类都有一个共性, 就是都以 父类名才作为子类的后缀名 。
这个体系中的所有类和对象都具备一个独有的特点; 就是可抛性 。
可抛性的体现: 就是这个体系中的类和对象都可以被 throws 和 throw 两个关键字所操作。
class ExceptionDemo {
public static void main(String[] args) {
byte[] buf = new byte[1024*1024*700];
//java.lang.OutOfMemoryError 内存溢出错误
}
}
}
在开发时,如果定义功能时,发现该功能会出现一些问题, 应该将问题在定义功能时标示出 来,这样调用者就可以在使用这个功能的时候,预先给出处理方式。
如何标示呢?通过 throws 关键字完成, 格式: throws 异常类名 , 异常类名 ...
这样标示后,调用者,在使用该功能时,就必须要处理,否则编译失败。
处理方式有两种:
1、捕捉;
2、抛出。
对于捕捉: java 有针对性的语句块进行处理。
try {
需要被检测的代码;
}
catch(异常类 变量名 ){
异常处理代码;
}
fianlly{
一定会执行的代码;
}
catch (Exception e) {
//e 用于接收 try 检测到的异常对象。
System.out.println("message:"+ e.getMessage() );
// 获取的是异常的信息。
System.out.println("toString:"+ e.toString() );
// 获取的是异常的名字 +异常的信息。
e.printStackTrace();
// 打印异常在堆栈中信息;异常名称 +异常信息 +异常的位置。
}
}
异常处理原则: 功能抛出几个异常,功能调用如果进行 try 处理,需要与之对应的 catch 处理代 码块,这样的处理有针对性,抛几个就处理几个。
特殊情况: try 对应多个 catch 时,如果有父类的 catch 语句块,一定要放在下面。
throw 和 throws 关键字的区别: throw 用于抛出异常对象,后面跟的是异常对象; throw 用在函数 内。 throws 用于抛出异常类,后面跟的异常类名,可以跟多个,用逗号隔开。 throws 用在函数 上。
通常情况:函数内容如果有 throw ,抛出异常对象,并没有进行处理,那么函数上一定要声明,否 则编译失败。但是也有特殊情况。