异常是组织当前方法或者作用域继续执行的问题,在程序中导致程序中断运行的一些指令
通俗来说异常(Exception)就像是人生了一场小病,如发烧,感冒,拉肚子,去医院挂个吊瓶就会好的,而去医院挂吊瓶就像是Java中的异常处理机制,对程序中的小毛病处理一下,让程序继续运行下去不会导致程序崩溃。
异常又分为编译期异常(Exception)和运行期异常(RuntimeException)
错误:错误(Error)就是程序无法处理的错误,JVM直接就让这个程序挂了,就像一个人得了重病,已经无法医治了,然后就over了
第一种方法,使用try-catch语句,格式如下:
try{
//可能出现异常的代码块
}catch(异常类型 对象){
//异常的处理操作
}finally{
//异常的统一出口,一般用于释放资源
}
finally语句的作用,不管是否产生了异常,最终都会执行后面的代码
案例:
public static void main(String[] args) {
try {
String str="hello";
int m=Integer.parseInt(str);
System.out.println("转换后的数字是:"+m);
int a=9;
int b=0;
int c=a/b;
} catch(ArithmeticException e){
System.out.println(e.getMessage());
}
catch (Exception e){
System.out.println("异常信息:"+e.getMessage());
}finally {
System.out.println("释放资源");
}
System.out.println("程序继续进行!");
}
第二种方法,使用throw 和 throws关键字
(1)throws关键字主要在方法的声明上使用,表示方法中不处理异常,而交给调用者来处理。在Java程序中,如果没有加入任何的异常处理,则默认由JVM进行异常处理操作
public class Throw1 {
public static void main(String [] args){
try {
method(6,0);
} catch (Exception e){
System.out.println(e.getMessage());
}
System.out.println("后面的代码");
}
public static void method(int a , int b)throws ArithmeticException{
int i = a/b;
System.out.println(i);
}
}
(2)throw关键字表示在Java程序中手动抛出一个异常,因为从异常处理机制来看,所有的异常一旦产生之后,实际上抛出一个异常类的实例化对象,那么此对象也可以有throw抛出。
public class Throw1 {
public static void main(String [] args){
try {
method(6,0);
} catch (Exception e){
e.printStackTrace();
}
System.out.println("后面的代码");
}
public static void method(int a , int b){
if (b==0){
throw new ArithmeticException("除数不能为零");
}
int i = a/b;
System.out.println(i);
}
}
1、try语句不能单独使用,可以和catch,finally组成try-catch-finally,try-catch,try-finally三种结构,catch语句可以有一个或者多个,finally语句最多有一个,try,catch,finally三个关键字均不能单独使用。
2、try,catch,finally三个代码块中变量的作用域分别独立而不能相互访问
3、多个catch块的时候,Java虚拟机会匹配其中一个异常类或其子类,就执行这个catch块,而不会再执行别的catch块
4、Exception和RuntimeException的区别:
Exception是受检异常,在编译期检查,在调用这个抛出异常的方法时,必须显示地使用try-catch语句进行捕获异常。RuntimeException是非受检异常,在运行期检查,在调用抛出这个异常的方法时可以不用显示地使用try-catch
1、ArithmeticException(算数异常)
2、ArrayIndexOutofBundsException(数组下标越界异常)
3、NullPointerException(空指针异常)
4、InputMismatchException(输入不匹配异常)
5、RuntimeException(运行时异常)
6、ClassNotFoundException(类加载异常)
7、DataFormatException(数据格式化异常)
8、ClassCastException(类转换异常)
9、ArrayStoreException(数据存储异常)