Javase基础
一、 异常及处理
/**
异常:运行期间出现的错误,不是编译时出现的语法错误
异常分类:
RuntimeException 运行时异常 非检查性异常
IOException 非运行时异常 检查性异常
*/
一般常见异常有如下图
1、AWTError(AWT组件出错):这个错误并不是很常用。但是提一下AWT与Swing的区别,AWT是使用操作系统中的图形函数的抽象窗口工具,用C\C++编写,为了实现Java“一次编译,处处运行”的理念,AWT使用各个操作系统图形函数的交集,所以功能较差,但运行速度较快,适合嵌入式Java;
而Swing组件是基于AWT编写的图形界面系统,它用纯Java编写,所以必然实现了“一次编译,处处运行”,但相较于AWT运行速度较慢,适合PC使用。(此处AWTError讲解转载至链接:https://blog.csdn.net/zhangliangzi/article/details/51290026)
2、EOFException表示输入过程中意外地到达文件尾或流尾的信号,导致异常
/**
异常的处理步骤:抛出异常->捕获异常–>处理异常
异常的处理方式
自行处理(积极处理):try代码块中抛出异常,catch中检测异常的类型,catch代码块中处理异常
try{
可能出现异常的代码
}catch(异常的类型 对象名 ){
异常的处理
}
注意:try...catch之间不允许存在其他代码
try...catch必须成对使用
从异常抛出的代码之后,不会在继续执行
风险:把所有代码放进try块中,如果没有对应异常类型的检测,则没有办法处理对应的异常
finally:使用在catch代码块之后,不管是否出现异常,都会执行
回避异常(消极处理)
throws
*/
1、
throws关键字
如果一个方法中的语句执行时可能生成某种异常,但是并不能确定如何处理,则可以在程序所在的函数声明后,使用throws关键字抛出异常
位置:函数参数列表的后面
throws关键字后面,可以跟多个异常,中间用逗号分割
throws关键字抛出的异常,由调用该函数的函数处理。
练习题
编写一个方法,比较两个字符串。假如其中一个字符串为空,会产生NullPointerException异常,在方法声明中通告该异常,并在适当时候触发异常,然后编写一个程序捕获该异常。
二、方法调用堆栈
后进先出:方法A调用方法B的时候,只有方法B先完成后,方法A才完成。先执行的方法总是后完成,后执行的方法先完成,类似于数据结构中的堆栈--后进先出,我们称之为方法调用堆栈。
如示例,仅有一条语句抛出异常,会导致所有的方法都不能正常结束。如果不想出现这样的情况,我们就要使用java的异常处理机制-抓抛模型
三、自定义异常类
1、如果Java提供的异常类型不能满足程序设计的需要,我们可以定义自己的异常类型。
2、用户自定义的异常类应为Exception 类(或者Exception 类的子类)的子类