异常
来源:互联网 发布:数据挖掘算法书籍推荐 编辑:程序博客网 时间:2024/06/05 20:33
--------|Throwable 所有异常或者错误类的超类
-----------|Error 错误 错误一般是由于jvm或者是硬件引发的问题,所以我们一般不会通过代码去处理错误的
-----------|Exception 异常 是需要通过代码去处理的。
如何区分错误与异常呢?
如果程序出现了不正常的信息,如果不正常的信息的类名是以Error结尾的,那么肯定是一个错误
如果是以Exception结尾的,那么就是一个异常
package cn.itcast.duo;
/*
异常的处理:
方式一:捕获处理
捕获处理的格式:
try{
可能发生异常的代码;
}catch(捕获的异常类型 变量名){
处理异常的代码
}
捕获异常要注意的细节:
1.如果try块中代码出了异常经过了处理之后,那么try-catch块外面的代码还可以正常执行
2.如果try块中出现了异常的代码,那么在try块中出现异常代码后面的代码是不会执行的
3.一个try块后面可以跟有多个catch块,也就是说一个try块可以捕获多种异常的类型
4.一个try块可以捕获多种异常的类型,但是捕获的异常类型必须从小到大进行捕获,否则编译报错
*/
public class Demo10 {
public static void main(String[] args) {
int[] arr = {1,2,3,4,5,6};
div(4,0,arr);
}
public static void div(int a,int b,int[] arr){
int c = 0 ;
try{
c = a/b;
System.out.println(arr.length);
}catch(ArithmeticException e){
System.out.println("b不能为0");
System.out.println(e.toString());
}catch(NullPointerException e){
System.out.println("出现了空指针异常...");
}catch(Exception e){
System.out.println("包治各种异常...");
}
System.out.println("c="+c);
}
}
package cn.itcast.duo;
/*
异常的处理方式二-------抛出处理
抛出处理(throw throws)
抛出处理要注意的细节:
1.如果一个方法内部抛出了一个异常对象,那么必须要在方法声明抛出
2.如果调用了一个声明抛出异常的方法,那么调用者必须要处理异常
3.如果一个方法内部抛出了一个异常对象,那么throw语句后面的代码都不会再执行了(一个方法遇到了throw关键字,该方法也会马上停止执行)
4.在一种情况下,只能抛出一种类型异常对象
throw和throws两个关键字:
1.throw关键字是用于方法内部的,throws是用于方法声明上的
2.throw关键字是用于方法内部抛出一个异常对象的,throws关键字是用于方法上声明抛出异常类型的
3.throw关键字后面只能有一个异常对象,但是throws关键字后面可以声明抛出多个不同的异常类型
疑问:何时使用抛出处理?何时使用捕获处理?原则是什么?
答:如果你需要通知到调用者,你的代码出了问题,那么这时候就可以使用抛出处理
如果代码是直接与用户打交道的,那么遇到了异常千万不能抛出处理,因为抛出处理的话,这个异常就给了用户了,而这时候应该使用捕获处理。
*/
public class Demo11 {
public static void main(String[] args) {
try {
int[] arr = null;
div(4,2,arr);
} catch (Exception e) {
System.out.println("出现了异常...");
e.printStackTrace();
}
}
public static void div(int a,int b,int[] arr) throws Exception,NullPointerException{
if(b==0){
throw new Exception();
}else if(arr==null){
throw new NullPointerException();
}
int c = 0;
c= a/b;
System.out.println("c="+c);
}
}