一,异常的概念
在程序的运行时候,经常会出现一些意外的情况,这些意外会导致程序出错或者崩溃,从而影响正常的执行。Java中,将这些程序意外称为异常,出现异常时的处理称为异常处理。当异常发生时,系统会将异常封装成一个异常对象抛出。当JVM遇到异常时就会自动停止运行。
二,异常的分类
可以发现,所有的异常都继承自java.lang.Throwable类,Throwable类有两个直接的子类:Error类和Exception类。
Error类,是java应用程序本身无法恢复的严重错误,应用程序不需要捕获、处理这些严重的错误。当程序发生这种严重的错误是,通常的做法是通知用户并中止程序的执行。
Exception类,是由java应用程序抛出和处理的非严重错误,称之为异常。异常有可分为运行时异常(RuntimeException)和非运行时异常(CheckedException)两种。
RuntimeException,运行时异常即程序运行时抛出的异常,不要求程序员在编程的时候必须对这些异常进行处理,也能编译通过。
CheckedException,检查时异常又称为非运行时异常,这样的异常要求程序员必须在编程的时候进行处理,否则编译不会通过。
三、异常的处理
异常的处理方式:try….catch和try….catch….finally
异常对象的常用处理方法:printStackTrack(),用于输出异常的堆栈信息,其中堆栈信息包括程序运行到当前类的执行流程。getMessage(),用于返回异常详细信息的字符串。
public static void main(String[] args) {
// fun1();
fun2();
}
//try...catch演示
public static void fun1(){
try {
//将可能出现异常的代码放到try代码块中
int x = 5 / 0;
} catch (Exception e) { //用于捕获发生的异常
//捕获到异常的处理程序
//异常对象的两种常用的处理方法
e.printStackTrace(); //1.输入异常的堆栈信息
// e.getMessage(); //2.返回异常详细信息的字符串
}
}
//try...catch...finally
public static void fun2(){
try{
int arr[] = {5,89,23};
System.out.println(arr[3]);
}catch (Exception e){
System.out.println("捕获异常....");
}finally{ //finally中的语句不管是否发生异常都会执行的
System.out.println("finally...");
}
}
四,异常的声明与抛出
在java中可以使用throw关键字抛出一个异常。throw一般在方法体内部使用。
声明方法抛出异常,当方法本身不知道或者不愿意处理某个可能抛出的异常时,可以选用throws关键字将该异常提交给调用该方法的方法进行处理。一般在方法体外部使用。
public static void main(String[] args) {
// fun1();
//fun2会抛出异常,main方法要对它进行处理
try {
fun2();
} catch (Exception e) {
System.out.println("main....");
}
}
//使用throw关键字抛出异常
public static void fun1(){
try {
System.out.println("测试");
throw new Exception(); //抛出异常对象
} catch (Exception e) {
System.out.println("捕获到异常...");
}finally{
System.out.println("finally...");
}
}
//使用throws关键字抛出异常
public static void fun2() throws Exception{ //抛出异常
System.out.println("fun2...");
}
五、自定义异常类
自定义异常类,就是程序员自己定义异常类。当Java类库中的异常不能满足要求时,就可以自己定义异常。
在自定义异常类时,该类要继承Exception类。
//自定义异常类
class AgeException extends Exception{
private int age;
public AgeException(int age) {
this.age = age;
}
public void show(){
System.out.println(age+":年龄设置不合理..");
}
}
public static void main(String[] args) {
int age = 156;
try {
if(age < 0 || age > 150){
//抛出异常
throw new AgeException(age);
}
} catch (AgeException e) {
//捕获异常并处理异常
e.show();
}
}