------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------
由来:问题也是生活中的一类事物,Java中把问题这类事物进行了描述和封装,对应的类就是异常类。并且在异常类中子类后缀名都是用父类名,增强了阅读性!
不正常的情况分为两类:
Throwable
|--error(严重的):一般不对其进行编写针对性代码处理。
|--Exceptoion(非严重的):用针对性的方式进行处理。
Throwable特点:无论是error还是Exception,问题发生了就可以对其hrow进行抛出,让调用者知道并处理。
Throwable中的方法:
1.getMassage():获取异常信息,返回字符串。
2.toString():获取异常信息的类名和异常信息,返回字符串。
3.printStackTrace(PrintStream s):返回异常信息类名、具体异常信息、异常出现的行数,并把其存入指定的文件中,以便查阅。
示例:
throw和throws的区别
1.throws用于标识函数暴露的异常类,可以多个抛出,中间用逗号隔开。而throw用于抛出集体的异常对象
2.throws用在函数上,其后接异常类名。throw用在函数内,其后接异常对象。
异常的分类:
1.编译时的异常。
2.编译通过,运行时的异常。(RuntimeException及其子类)
RuntimeException:在函数中抛出(throw)是不需要在函数名上(throws),而一般的Exception是需要在函数名上抛出的。
能处理:Exception 然后在catch中处理。
具体格式是:
finally有一种情况不会被执行,就是在之前执行了System.exit()。
异常处理原则:
1.函数内容如果需要抛出需要检测的异常,那么函数上必须要声明。否则,必须在函数内进行try/catch处理,不然编译会失败。
2.如果调用了声明异常的函数,要么try/catch,要么throws,否则编译失败。
3.能解决用catch,不能解决用throws。
4.一个功能如果抛出多个异常,内部有几个异常就抛出几个异常,对应的就有几个catch。
try、catch、finally组合特点
1.try catch finally
2.try catch(多个):当没有释放资源操作时。
3.try finally:异常无法直接处理,但必须要关闭资源。
2.子类在覆盖父类方法时,父类方法如果有throws异常,子类自能抛出该异常或该异常的子类。
3.如果父类抛出多个异常,子类只能抛出父类异常的子集。
4.如果父类没有抛出异常,子类决不能抛出异常,只能try。
异常
1.1 异常的体系
定义:是在运行期间发生的不正常的情况。由来:问题也是生活中的一类事物,Java中把问题这类事物进行了描述和封装,对应的类就是异常类。并且在异常类中子类后缀名都是用父类名,增强了阅读性!
不正常的情况分为两类:
Throwable
|--error(严重的):一般不对其进行编写针对性代码处理。
|--Exceptoion(非严重的):用针对性的方式进行处理。
Throwable特点:无论是error还是Exception,问题发生了就可以对其hrow进行抛出,让调用者知道并处理。
Throwable中的方法:
1.getMassage():获取异常信息,返回字符串。
2.toString():获取异常信息的类名和异常信息,返回字符串。
3.printStackTrace(PrintStream s):返回异常信息类名、具体异常信息、异常出现的行数,并把其存入指定的文件中,以便查阅。
简单异常示例:
class Demo{
public static int method(int[] arr,int index){
if(arr == null){
throw new NullPointException("数组的引用为空");
}
if(index>arr.length){
throw new ArrayIndexOutOfBoundException("数组角标越界");
}
return arr[index];
}
}
1.2 自定义异常
思想:将出现的问题封装成为对象,其类必须继承Exception,才能具备可抛性。示例:
class DemoException extends Exception{
DemoException(String massage){
super(massage);//利用父类对传入信息的处理方式。
}
}
throw和throws的区别
1.throws用于标识函数暴露的异常类,可以多个抛出,中间用逗号隔开。而throw用于抛出集体的异常对象
2.throws用在函数上,其后接异常类名。throw用在函数内,其后接异常对象。
异常的分类:
1.编译时的异常。
2.编译通过,运行时的异常。(RuntimeException及其子类)
RuntimeException:在函数中抛出(throw)是不需要在函数名上(throws),而一般的Exception是需要在函数名上抛出的。
1.3 异常处理
不能处理:RuntimeException。能处理:Exception 然后在catch中处理。
具体格式是:
try{
//需要被检测异常的代码。
}c
atch(异常类 变量) //该变量用于接收发生的异常对象
{
//处理异常的代码。
}f
inally{
//一定会执行的代码;如关闭IO、Socket资源。
}
finally有一种情况不会被执行,就是在之前执行了System.exit()。
异常处理原则:
1.函数内容如果需要抛出需要检测的异常,那么函数上必须要声明。否则,必须在函数内进行try/catch处理,不然编译会失败。
2.如果调用了声明异常的函数,要么try/catch,要么throws,否则编译失败。
3.能解决用catch,不能解决用throws。
4.一个功能如果抛出多个异常,内部有几个异常就抛出几个异常,对应的就有几个catch。
try、catch、finally组合特点
1.try catch finally
2.try catch(多个):当没有释放资源操作时。
3.try finally:异常无法直接处理,但必须要关闭资源。
1.4 异常注意事项
1.RuntimeException及其子类如果在函数中throw,可以不再函数上声明。2.子类在覆盖父类方法时,父类方法如果有throws异常,子类自能抛出该异常或该异常的子类。
3.如果父类抛出多个异常,子类只能抛出父类异常的子集。
4.如果父类没有抛出异常,子类决不能抛出异常,只能try。