异常、断言和线程
2021-11-16 18:50:05 0 举报
AI智能生成
讲述了异常、管理异常、声明可能引发异常的方法、创建并引发自己的异常、如何使用和不使用异常、断言、线程等内容
作者其他创作
大纲/内容
异常
产生原因
程序不会存在
没有漏洞
不会崩溃
处理任何情况
异常情况下进行恢复
处理异常
本质
处理运行阶段发生错误的对象
异常可以被捕获
管理异常
作用
识别错误做出相应
帮助程序校正状态
特性
在代码中处理异常
从潜在的问题中恢复
告诉Java和方法
预期有潜在的异常
检测到异常时
如何引发它
使用异常来限制代码
使之更健壮
引发异常的情况
虚拟机
类
程序故意异常
缺点
每个人要完成的工作更多了
捕获异常定义
对异常进行处理
避免程序奔溃
异常类
Throwable类派生
异常引发,创建该类的实例
Throwable类的子类
Error
运行环境内部的错误
Exception
运行阶段异常
代码不够健壮造成
其他异常
层次结构
超类Exception
较通用的错误
子类
更具体的错误
包
java.lang
其他包
java.io定义了IOException
java.net
管理异常
异常一致性检测
方法指出引发的错误类型
声明方法时,须使用限定符指出错误
检测的原因
降低由于致命错误而崩溃的可能性
如何确保处理了潜在问题
Java将完成检测
定义方法
指出可能引发的错误
Java命令该方法的用户对错误进行处理
保护代码和捕获异常
捕获异常完成的工作
引发异常的方法的代码放在try块中
catch块中对异常进行处理
catch语句介绍
子句的圆括号中包含
捕获的异常类和变量名
块中,使用变量名引用异常对象
一条catch语句中捕获一组异常
异常对象作用
调用getMessage()方法
显示详细的错误信息
描述发生的情况
调用printStackTrace()方法
显示导致异常的方法调用序列
捕获多种没有继承关系的异常
将多个catch块用于同一个try块中
使用多个catch块时,执行第一个匹配的catch块
发生意料之外的问题
在catch块中使用Exception类,在后面多个catch块中使用Exception类
finally子句
必须执行的操作
释放外部资源
关闭打开的文件
其他用途
在循环中,可在return、break、continue后面使用,来执行清理代码
声明可能引发异常的方法
方法中指出引发的异常
使用throws子句
throws子类
用法
在方法的定义后面加上
关键字throws
将引发的异常的名称
方法可能引发多种异常
将其放在一个throws子句中,使用逗号分隔
使用超类指出方法可能引发这种异常的所有子类
含义
如果发生错误,该方法可能引发异常
方法的整体描述
该方法的设计者
调用者之间的约定
使用throws,可以添加信息
该方法能执行的非常规工作
应引发哪些异常
判断引发的异常
常规情况
根据方法的操作
创建并引发自己的异常
很常见的情况
运行环境处理
不必处理
无需检查的异常
定义
任何时候,任何地方发生的异常
层次结构
它是RuntimeException和Error的子类
传递异常
处理异常
不合理
在方法中对某个异常进行处理
合理
将异常传递给调用的方法的方法
方法定义
可能包含throws子句
throws子句声明方法
可能引发合适的异常
处理异常的工作由调用方法的方法哇按此
告诉Java编译器已对某个异常进行处理的方式
创建一个无需使用try-catch块便能处理数字格式的异常的方法
throws和继承
覆盖方法处理throws的特殊规则
新方法的throws子句列出的异常并不一定与被覆盖的方法相同
新方法
引发更少的异常
不引发任何异常
子类方法不能引发其超类方法没有引发的异常
创建并引发自己的异常
异常的两面性
引发
捕获
异常由哪些方法引发
Java运行环境
Java类中的方法
异常的来源
引发Java类库中定义的标准异常
创建并引发自己的异常
引发异常
声明本身不引发异常
实现
创建该异常类的实例
使用throws语句引发它
异常的构造方法
可能接受参数,取决于使用的异常类
最常见的参数是字符串
可以更详细的描述问题
异常引发后的处理
方法将立即结束
不执行任何其他代码
不会由返回值
程序由于引发的异常而退出
调用方法时,没有将调用放在try块中
提供相应的catch块
创建自己的异常
要求
创建的异常都应是Exception层次结构的一部分
如果没有于要创建的异常密切相关的异常,考虑继承Exception
异常类的构造方法
接受任何参数
接受一个字符串参数
调用super()
确保字符串应用到正确的地方
组合使用throws、try和throw
管理异常并传递给调用方法的三种机制
throws子句
try语句
throw语句
异常处理程序可以嵌套
异常的执行
沿方法调用链向上传递
系统将对未捕获的异常进行处理
终止程序并打印一条错误信息
何时使用和不使用异常
什么时候使用异常
方法调用可能引发异常的方法时,可以采用
try和catch语句来处理异常
在方法定义中添加throws子句,将异常沿调用链向上传递
catch捕获异常
throw重新引发它
引发多种异常的方法
分别处理其中的每一种异常
方法引发自己的异常
使用throws子句声明
覆盖超类中的方法
引发同样的异常
该异常的子类
什么时候不使用异常
简单表达式可以避免的异常
可以控制异常情况时
糟糕的异常使用方式
不经处理就将异常丢弃
会破坏编译器进行的检查工作
忽略警告并想办法避开
程序的致命错误
方法中加入throws子句避免异常
方法更难以使用
断言
定义
条件语句
布尔值
本质
确保程序正确运行的方式
作用
检测错误的手段
识别错误做出相应
实现
assert后面
是一个
条件表达式
布尔值
必须包含
结果为true或false的表达式
布尔变量
返回布尔值的方法
断言不为真
引发AssertionError异常
assert指定字符串
默认情况下
JDK中的工具不支持
需要启用断言功能
在其他所有类中启用
-ea
启用类中的断言
-ea后加上冒号和类名
启用特定包中的断言
-ea:后面加上包名
对于默认包,为...
运行断言
运行包含断言的类时
没有使用标记-ea或esa
忽略所有assert语句
注意
不能将assert作为变量名
断言可以关闭
它并非一种可靠的,提高类的可靠性的途径
线程
作用
实现Runnale接口对象
与其他部分一起运行
更高效地利用其资源
将所有耗时的行为都放在单独的类中
适用场景
占用大量时间处理
连续运行
编写线程化程序
线程的实现
java.lang包中的Thread类
最简单线程用法
让程序暂停一段时间
调用Thread类的sleep(long)方法
暂停的线程由于某些原因被中断
引发InterruptedException异常
创建线程的方式
创建一个从Thread派生而来的类
另一个类中实现Runnable接口
将implements加入到类声明中,后面加上接口名称
启动线程
调用start()
导致run()被调用
线程化应用程序
终止线程
实现方式
调用stop()
导致Java运行环境不稳定
可能在程序中引入难于检测的错误
让线程运行run()方法的循环在某个变量的值发生改变后结束
运行的线程有一个指向它的变量时,才执行run()中的循环
0 条评论
下一页