-------android培训、java培训、期待与您交流! ----------
异常:就是程序运行时出现不正常的情况
异常由来:问题也是现实生活中一个具体事物,也可以通过java的类的形式进行描述,并封装成对象。其实就是java对不正常情况描述后的对象体现。
对于问题的划分:两种 一种是严重的问题;一种是非严重的问题;
对于严重的,java通过error类进行描述。
对于Error一般不编写针对性的代码对其进行处理。
对于非严重的,java通过Exception类进行描述。
对于异常可以使用针对性的处理方式进行处理
Error 和exception都具有共性。
java中就用Throwable 类来处理error和exception
Throwable 类往下分为两个类error 和exception
异常的处理Java提供了特有的语句进行处理
Try
{
需要被检测的代码块;
}catch(异常类变量)
{
处理异常的代码;(处理方式)
}
Finally{
一定会执行的语句
};
1:对捕获到的异常 常见方法操作介绍:
String getMessage() 获取异常信息;
toString();获取异常信息,异常名称
printStackTrace();获取异常信息,异常名称 ,异常位置
jvm 默认的异常处理机制就是在调用printStackTrace();
对多异常的处理:
1:声明异常时,建议声明更为具体的异常,这样处理的可以更具体。
函数中只要遇到异常,函数就跳转到异常处理代码!即函数停止运行
用多个catch捕获
2:对方声明几个异常,就对应有几个catch块。 如果多个catch块中的异常出现继承关系,父类异常catch块,放在最下面。不要定义多余的catch块。
建议在进行catch处理时,一定要定义具体的处理方式,最好不要之定义一句e.printStackTrace()也不要简单的就书写一句输出语句
自定义异常:
因为项目中会出现特有的问题,而这问题并未被java所描述并封装。所以对于这些特有的问题可以按照java的对问题封装思想,将这些特有的问题进行自定义的异常封装。
函数内抛出异常,函数必须先声明异常;只有RuntimeException类和其子类例外 ,即如果在函数内抛出异常,在函数上可以不用抛出异常或者在函数上声明该异常,调用者可以不用进行处理,编译一样通过。
对于异常分两种:
1:编译时被检测异常。
2:编译时不被检测的异常(运行时异常,Runtimeexception即其子类)
如何定义异常信息?
因为父类中已经把异常信息的操作都完成了。所以子类只要在构造时,将异常信息传递给父类通过super语句。那么就可以直接通过getMessage方法获取自定义的异常信息。
自定义类必须继承Exception类
throws和throw的区别
throws使用在函数上(即函数定义是参数列表右括弧和左大括号之间)
throw使用在函数内部
throws后面跟的异常类,可以跟多个异常类,之间使用“,”隔开。
throw后跟的是异常对象。
Finally代码块:定义一定执行的代码块。通常用于存放关闭资源代码块
注意:Finally只有一种情况下是读不到的那就是在其前面遇到System.exit(0); 系统退出 虚拟机结束。
Catch是用于处理异常的,如果没有catch就代表异常没有被处理过。如果该异常是检测异常,那么必须声明。
异常在子父类在覆盖中的体现:
1:子类在覆盖父类时,如果父类的方法抛出异常,那么抛出子类的覆盖方法,只能抛出父类的异常或者该异常类的子类。
2:如果父类抛出多个异常,子类在覆盖该方法时,只能抛出父类异常的子集
3:如果父类或者接口的方法中没有异常抛出,那么子类在覆盖方法是,也不可以抛出异常。如果子类方法发生了异常,那么就必须要进行try处理,绝对不能抛出。