Java的基本理念是“结果不佳的代码不能运行”。 java
Java异常的相关介绍编程
java对异常进行了分类,不一样类型的异常使用了不一样的java类,全部异常的根类为java.lang.Throwable.Throwable派生了2个子类:Error和Exception.数组
Error表示程序自己没法克服和恢复的一种严重错误,程序只有死的份,如内存溢出和死锁问题等系统问题。spa
Exception表示还能克服和恢复,其中又分为系统异常和普通异常。系统异常是软件自己缺陷致使的问题,也就是软件开发问题考虑不周所致使的问题,软件使用者没法克服和恢复这种问题,但这种状况下能够选择让软件继续运行或死掉。如数组越界问题(ArrayIndexOutOfBoundsException),空指针异常(NullPointerException),类转换异常(ClassCastException);普通异常是运行环境的变化或异常致使的问题,是用户可以克服的问题,如网路掉线、硬盘空间不足、IO异常发生这种异常后程序不该该死掉。指针
java为系统异常和普通异常提供了不一样的解决方案,编译器强制普通异常必须try..catch处理或throws声明继续抛给上层调用方法处理。因此普通异常为checked异常,而系统异常能够处理也能够不处理。编译器不强制用try..catch或throws声明,因此系统异常成为uncheckde异常。orm
异常的捕获和处理
Java异常处理涉及到五个关键字,分别是:try、catch、finally、throw、throws。
一、 异常处理的基本语法
在java中,异常处理的完整语法是:对象
//(尝试运行的)程序代码内存
}catch(异常类型 异常的变量名){作用域
//异常处理代码开发
}finally{
//异常发生,方法返回以前,老是要执行的代码
}
以上语法有三个代码块:
try块,表示要尝试运行代码,try语句块中代码受异常监控,其中代码发生异常时,会抛出异常对象。
catch块会捕获try代码块中发生的异常并在其代码块中作异常处理,catch语句带一个Throwable类型的参数,表示可捕获异常类型。当try中出现异常时,catch会捕获到发生的异常,并和本身的异常类型匹配,若匹配,则执行catch块中代码,并将catch块参数指向所抛的异常对象。catch语句能够有多个,用来匹配多个中的一个异常,一旦匹配上后,就再也不尝试匹配别的catch块了。
经过异常对象能够获取异常发生时完整的JVM堆栈信息,以及异常信息和异常发生的缘由等。
finally块是紧跟catch语句后的语句块,这个语句块老是会在方法返回前执行,而无论是否try语句块是否发生异常。而且这个语句块老是在方法返回前执行。目的是给程序一个补救的机会。这样作也体现了Java语言的健壮性。
二、 try、catch、finally三个语句块应注意的问题
第1、try、catch、finally三个语句块均不能单独使用,三者能够组成 try...catch...finally、try...catch、try...finally三种结构,catch语句能够有一个或多个,finally语句最多一个。
第2、try、catch、finally三个代码块中变量的做用域为代码块内部,分别独立而不能相互访问。若是要在三个块中均可以访问,则须要将变量定义到这些块的外面。
第3、多个catch块时候,只会匹配其中一个异常类并执行catch块代码,而不会再执行别的catch块,而且匹配catch语句的顺序是由上到下。
三、throw、throws关键字
throw关键字是用于方法体内部,用来抛出一个Throwable类型的异常。若是抛出了检查异常,则还应该在方法头部声明方法可能抛出的异常类型。该方法的调用者也必须检查处理抛出的异常。若是全部方法都层层上抛获取的异常,最终JVM会进行处理,处理也很简单,就是打印异常消息和堆栈信息。若是抛出的是Error或RuntimeException,则该方法的调用者可选择处理该异常。
throws关键字用于方法体外部的方法声明部分,用来声明方法可能会抛出某些异常。仅当抛出了检查异常,该方法的调用者才必须处理或者从新抛出该异常。当方法的调用者无力处理该异常的时候,应该继续抛出,而不是囫囵吞枣通常在catch块中打印一下堆栈信息作个勉强处理。
5个常见的RuntimeException:
NullPionterException,ArrayIndexOutOfBoundsException,StringIndexOutOfBoundsException,ClassCastException,NumberFormatException
建立自定义异常
Java提供的异常体系不可能预见全部但愿报告的错误,因此能够本身定义异常类来表示程序中可能遇到的特定问题。创建新的异常的类型最简单的办法就是让编译器为你产生默认的构造器,这样几乎不用写多少代码。
例:class customizeException extends Exception {}
public class SimpleException {
public void test throws customizeException(){
System.out.println("This is customizeException");
throw new customizeException();
}
public static void main(String[] args){
SimpleException simple=new SimpleException();
try{
simple.test();
}catch(SimpleException e){
System.out.println("Caught the customizeException");
}
}
}
Exception是与编程有关的全部异常类的基类。