异常的概述
Throwable类是Java语言中所有错误Error和异常Exception的Throwable类
Throwable:
----Error:错误的意思
----StackOverflowError:当堆栈溢出发生时抛出一个应用程序递归太深。
----NoClassDefFoundError:找不到或无法加载主类
----NoSuchMethodError:没有此方法错误
----OutOfMemoryError :内存溢出错误
*
Exception:异常的意思
-
----NullPointerException: 空指针异常 ----ArrayIndexOutOfBoundsException:数组下标/角标越界异常 ----AritchmeticException:算术异常 ----ClassCastException: 造型异常 类转换异常
异常的分类
Exception:
编译时异常:编译的时候就会有异常,除了运行时异常,就是它了。
它必须处理才能运行:处理有两种方式(一种抛出异常,二种抓)
----FileNotFoundException: 找不到文件异常
----InterruptedException: 中断异常
运行时异常RuntimeException:RuntimeException及其子类都是运行时异常
可以编译通过,能运行,运行的时候报异常,不需要处理可以运行,但是有异常还是有异常
-------ArithmeticException : 算术异 -------NullPointerException: 空指针常
-------ArrayIndexOutOfBoundsException:数组下标越界异常。
-------ClassCastException : 造型异常
处理异常的方式
throws抛出异常的特点:
抛出异常要一直抛出,直到抛到最终点,抛给main函数。
如果有异常,结果还是有异常,只不过可以运行。
抛出异常可以让编译时异常可以运行,运行如果有异常还是有异常。
抛出异常,不会执行后面的代码。
- 抓异常的格式:
-
try{
-
这里面放可能出现异常的代码;
-
}catch(异常的类名 对象名){
-
有异常以后,处理异常的代码;
-
如果没有异常,就不会执行;
-
}
try catch的特点:
抓异常以后,不用再抛出
抓异常以后,后面的代码还可以执行,try里面紧跟的代码是不能执行的。
手动抛出异常:可以根据你的意思来抛出异常
throw跟throws的区别:
throw是在方法体中,throws是在方法声明上。
throw是抛出异常对象。throws是抛出异常类名。
throw是可以根据你的标准来抛出异常。
4. 获取异常信息的三种方法
获取异常信息三种方式:
getMessage() : 获取异常信息 是一个值
toString() : 获取异常类名和异常信息 是一个值
printStackTrace():打印输出异常类名,异常信息和异常行号。是void型的函数,不是一个值
5. Try catch catch
处理多个异常的格式:
-
try{
-
可能出现异常的代码;
-
可能出现异常的代码;
-
可能出现异常的代码;
-
}catch(){
-
处理一个异常信息
-
}catch(){
-
处理另一个异常信息
-
}..... try { FileReader fileReader=new FileReader("aa.txt"); Thread.sleep(100); } catch (FileNotFoundException | InterruptedException e) { e.printStackTrace(); }
6. Finally
格式:
-
try{
-
}catch(){
-
}catch(){
-
}.....{
-
}finally{ 不管有没有异常,都会执行! return都不能阻止它的脚步 除非System.exit(0);结束jvm
-
}
final跟finally的区别:
final:
1.修饰类,类不可以被继承
2.修饰函数,函数不可以被重写,复写,覆盖。可以重载。
3.修饰变量,变量是常量。
finally:
1.是跟try catch组合,不管有没有异常都会执行。
try {
int a=1/1; //注意:这里面不能有编译时异常,要不然会报错
//有运行时异常没关系
} finally {
System.out.println("执行了finally");
}
7. 自定义异常
自定义普通的异常:如果说输入的数字不符合我们的功能,然后就报异常。
1.创建一个类继承Exception类。Exception类是编译时异常。
2.写两个构造函数,一个有参数的,一个无参数的。
自定义运行时异常:
1.创建一个类继承RuntimeException
2.创建两个构造函数。一个有参数的,一个无参数的。
注意:要把异常信息传给父类super(message),要不然输出不了异常信息。