异常

异常

概念:运行期间出现的错误,不是编译时出现的语法错误
例如:1.打开一个不存在的文件2.网络中断3.操作数组越界
####异常类型
检查性异常:若系统运行时可能产生该类异常,则必须写出相应的处理代码,否则无法通过编译。
非检查性异常:若系统运行时可能产生该类异常,则不必在程序中声明对该类异常的处理, 就可以编译执行。

异常的处理方式:

自行处理(积极处理):

try{  
可能出现异常的代码  
(之前不可以添加任何代码)  
}catch(异常的类型 对象名){  
异常的处理  
}  
finally{  
}  

回避异常(消极处理):
throws:由调用该函数的函数处理

try…catch

注意try…catch之间不允许存在其他代码切必须成对存在(有try必有catch,多少个都行)。
风险:把所有代码放进try中,若没有对应类型的检测,则没有办法处理产生的异常。
catch中的异常类型按exception从小到大排

finally{}

finally:使用在catch代码块之后,不管是否出现异常,都会执行。(当try或catch中执行了System.exit(0)(断电)就不会执行)

throws()

概念:如果一个方法中的语句执行时可能生成某种异常,但是并不能确定如何处理,则可以在程序所在的函数声明后,使用throws关键字抛出异常

语法:[(修饰符)] (返回值类型)(方法名)([参数列表])[throws(异常类)]{……}(可以跟多个异常,中间用逗号连接)

public void doA(int a) throws Exception1,Exception3{......}

方法中如果用throws关键词抛出:

非检查性异常:上一级去除异常,直到不剖出异常
检查性异常:在调用该函数内try-catch,把异常处理掉。那么不往上一级抛出异常,程序正常执行,上一级方法并不知道曾经产生异常。

throw

概念:用于引发明确的异常(抛出异常)。
注意:要么和try-catch一起使用,要么和throws一起使用。

自定义异常

概念:当JAVA中的异常类型不能满足程序设计的需要,可以自行定义异常类型。
自定义异常:

public class MyException extends Exception{

}

自定义异常的使用:

main函数{
try{
...
}catch(MyException e){
...
}}
public static void 方法 throws MyException{
if(...){throw....}
else{...}
}

异常类全部需要继承Exception