异常:Java运行时期发生的不正常行为。
运行时除了exception还有error
异常:通常发生的错误可以有针对性的处理方式的。
错误:通常发生后不会有针对性的处理方式。
error的发生往往都是系统级别的问题,都是有jvm所在的系统发生的并反馈给jvm的。无法针对处理,则只能是修改代码。
异常的发生细节:
主函数收到异常对象。没有处理,main函数就会继续抛出给调用者jvm,jvm收到问题后,就做出了最终的处理方式,将问题对象中的名称,信息,问题的位置,都显示在屏幕上,让软件使用者知道。同时让程序提前终止。
数组越界异常:用非法索引访问数组时抛出的异常,如果索引为负或大于等于数组大小,则该索引为非法索引。
空指针异常:
当应用程序试图在需要对象的地方使用null时,抛出该异常,这种情况包括:1,调用null对象的实例方法。2,访问或修改null对象的字段。3,将null作为一个数组,获得其长度。4,将null作为一个数组,访问或修改其时间片。5,将空作为throwable值抛出。
throwable类:是Java语言中所有错误或异常的超类,只有当对象是此类(或其子类之一)的实例时,才能通过Java虚拟机或者Java throw语句抛出,类似,只有此类或其子类之一才可以是catch子句中的参数类型。
自定义异常:必须是继承throwable类,或者继承throwable的子类。该对象才可以被throw抛出。可抛性:可以被throw关键字操作。
throw和throws区别:
1,throw用在函数内。throws用在函数上。2,throw抛出的是异常对象,throws用于进行异常类的声明,后面异常类可以有多个,用逗号隔开。
异常-finally的使用:
需求:有一些特定的代码无论是否发生异常都需要执行,因为异常会引发程序的跳转,导致有些语句执行不到,无法满足这个要求。异常捕获处理时Java提供的解决方案:try catch finally语句,finally就是解决这个问题的,finally中存放的代码无论如何都会执行。
注意:有一种情况发生finally代码也会不执行:system。exit();退出jvm。r
try catch finally组合方式:
1,try catch:对代码进行异常检测,并对检测的异常传递给catch处理。异常捕获处理。
void show()//不用throws
{
try{
throw new Exception();
}catch(Exception e){
}
}
2,try finally:对代码进行异常检测,检测到异常后因为没有catch,所以一样会被默认jvm抛出,异常是没有捕获处理的,但是功能所开启资源需要进行关闭,所有finally。只为关闭资源。
void show()//需要throws
{
try{
throw new Exception();
}finally
{
}
}
3,try catch finally:检测异常,并传递给catch处理,并定义资源释放。
异常在继承或者实现中的使用细节:*****
1,子类覆盖父类方法时,如果父类的方法声明异常,子类只能抛出父类异常或者该异常的子类,或者不声明。
2,当父类方法声明多个异常时,子类覆盖时只能声明多个异常的子集。
3,当被覆盖的方法没有异常声明时,子类覆盖时无法声明异常的。
举例:父类存在这种情况,接口也有这种情况,
问题:接口中没有声明异常,而实现的子类覆盖方法时发生了异常。
无法进行throws声明,只能catch的捕获。万一问题处理不了呢?catch中继续throw抛出,但是只能将异常转换成runtime异常的子类抛出。
Inteface Inter
{
public void show();
}
class demo implement Inter
{
public void show(){
try{
throw new Exception();
}catch(Exception e)
{
code.....
throw new RuntimeException("");//告知调用者问题所在。
}
}
}
|
|