java自动违例设计,java学习记录(二):java的违例控制机制
1 产生一个违例时,首先按照与创建java对象一样的方法创建违例对象:在内存“堆”里,使用new 来创建。随后停止当前执行路径,然后从当前环境中释放违例句柄。此时,违例控制机制会接管一切,并开始查找一个恰当的地方,用于继续程序的执行。这个地方便是违例控制器,catch语句。它的职责是从问题中恢复,使程序要么执行另一条路径,要么简单的继续。
2 违例更重要的信息保存在违例类型中,而不是违例对象中。
3 如果在当地捕获了抛出的违例,需要在本地使用try...catch 语句,若没有使用try....catch语句,则在函数后面需加上违例规范:throws Exception
4 Eception类继承于Throwable,这个类中有printStackTrace()这个方法用于打印抛出异常的路径。
5 fillInStackTrace()函数返回Throwable对象,此时是不会被捕获Exception的捕获器捕获的。相当于不会自动下溯造型。
6 RuntimeException 类是java内置的类,所以永远不要担心运行期的异常,也不要抛出一个RuntimeException的异常,java会自动处理有关的异常。
7 关于违例的限制,参见一下代码:
class BaseballException extends Exception {}
class Foul extends BaseballException {}
class Strike extends BaseballException {}
abstract class Inning {
Inning() throws BaseballException {}
void event () throws BaseballException {
}
abstract void atBat() throws Strike, Foul;
void walk() {}
}
class StormException extends Exception {}
class RainedOut extends StormException {}
class PopFoul extends Foul {}
interface Storm {
void event() throws RainedOut;
void rainHard() throws RainedOut;
}
public class StormyInning extends Inning implements Storm {
StormyInning() throws RainedOut,
BaseballException {}
StormyInning(String s) throws Foul,
BaseballException {}
public void rainHard() throws RainedOut {}
public void event() {}
void atBat() throws PopFoul {throw new PopFoul();}
public static void main(String[] args) {
try {
StormyInning si = new StormyInning();
si.atBat();
}
catch(Foul e) {
System.out.println("foul hhhhh");
}
catch(RainedOut e) {
System.out.println("rainedout");
} catch(BaseballException e) {System.out.println("baseball");}
try {
Inning i = new StormyInning();
i.atBat();
}
catch(PopFoul e) {
System.out.println("popfoul hhhhhhh");
}
catch(Strike e) {
System.out.println("strike");
} catch(Foul e) {
System.out.println("foul hhhhh");
} catch(RainedOut e) {
System.out.println("rainedout");
} catch(BaseballException e) {System.out.println("baseball");}
}
}
rainHard()抛出与父类一样的异常,可以。event()不抛出任何异常,可以,即使父类抛出了异常。atBat() 抛出了PopFoul异常,父类有抛出Foul异常,因为PopFoul继承于Foul,捕获父类的捕获器 同样可以捕获子类,所以,atBat可以抛出PopFoul异常。综上,子类抛出的异常不能和父类不同,可以不抛出,可以是其子类,当然也可以抛出一样的异常。而且,一个类继承另一个类并且实现接口的时候,其抛出的异常要与继承的类有上述关系。当你这样写:void walk() throws PopFoul {} 或者public void event() throws RainedOut {}时,编译器报错。
8 在没有垃圾回收和自动调用析构方法的语言中,finally语句会显的很重要,因为需要手动回收占用的内存资源。在含有垃圾回收机制的语言中,finally常用来关闭文件,释放网络连接等任务。在try{}catch{}finally{}中,不管是否抛出异常,都会执行finally语句,不管抛出的异常是否被catch捕获,都会执行finally语句。
暂时总结这么多吧~~~
java自动违例设计,java学习记录(二):java的违例控制机制相关推荐
- java冰法_Java基础学习笔记二 Java基础语法
注释 注释用来解释和说明程序的文字,注释是不会被执行的. 单行注释 //这是一条单行注释 public int i; 多行注释 /*这是 * 一段注释, * 它跨越了多个行*/ public void ...
- java基础案例教程前4章知识点_java学习记录4 Java基础知识点
java学习记录4 Java基础知识点 1. 注释 单行注释 使用"//"开头,后面是注释的内容 一般在要注释的语句的上面加注释 多行注释 以"/*"开头,以& ...
- IDL学习记录和Java调用IDL方法
IDL学习记录和Java调用IDL方法 2018年02月06日 08:32:02 回首1949 阅读数:385更多 个人分类: 随想 版权声明:乐呵乐呵得了 https://blog.csdn.net ...
- Java常用类(谷粒商城学习记录)
Java常用类 谷粒商城学习记录 谷粒商城学习记录 谷粒商城学习记录 干嘛老是提示我与别人的文章相似呢?真的是我自己整理的啊啊啊 老是提示与这个文章相似 https://blog.csdn.net/c ...
- Android动画学习记录二(属性动画、估值器和插值器)
Android动画学习记录二(属性动画.估值期和插值器) Android动画学习记录二(属性动画.估值期和插值器) Android动画学习记录二(属性动画.估值期和插值器) 一.补间动画缺陷 二.属性 ...
- 大数据之spark学习记录二: Spark的安装与上手
大数据之spark学习记录二: Spark的安装与上手 文章目录 大数据之spark学习记录二: Spark的安装与上手 Spark安装 本地模式 Standalone 模式 基本配置 步骤1: 复制 ...
- MySQL学习记录 (二) ----- SQL数据查询语句(DQL)
相关文章: <MySQL学习记录 (一) ----- 有关数据库的基本概念和MySQL常用命令> <MySQL学习记录 (二) ----- SQL数据查询语句(DQL)> &l ...
- Cadence Allegro 设计流程学习记录
Cadence Allegro 设计流程学习记录 前提摘要 软件设计版本: 电路仿真软件:NI Multisim 14.0,TINA-TI. 原理图设计:Design Entry CIS 16.6. ...
- HTML学习记录二:html标签(五):超链接标签
HTML学习记录二:html标签(五):超链接标签 一.超链接标签写法 二.超链接标签的属性 三.超链接的锚点用法 四.链接分类 一.超链接标签写法 在 HTML 标签中, 标签用于定义超链接,作用是 ...
最新文章
- JACK——AgentManual5 Events
- 利用Powershell SSH-Session 工具管理 linux或网络设备
- html 跟随鼠标移动线条,canvas跟随鼠标移动的随机线条
- LeetCode 1696. 跳跃游戏 VI(优先队列 / 单调队列)
- 缓存穿透、击穿、雪崩什么的傻傻分不清楚?看了这篇文后,我明白了
- 5个实用提速深度学习模型的方法
- DWR Sample
- 水晶头超5类和6类的区别是什么?六类水晶头和超五类水晶头通用吗?
- pycharm设置python运行根目录
- linux下mysql8.0初始密码_Linux下MySQL8.0修改初始密码
- db2检查什么表被锁住了,如何解锁
- shell脚本:备份数据库、代码上线
- ffmpeg实例,fade淡入淡出效果
- MATLAB写入文件的操作
- 为什么 50 欧姆成为了射频传输线的阻抗标准
- jacob操作word教程
- android 动画后动画效果,Android5.0之后 VectorDrawable实现超炫酷动画效果
- SQL SERVER2008R2安装报错 安装程序集“Microsoft.VC80.ATL,version=“8.0.50727.1833“。。。
- 2021年中国A股上市企业市值百强城市排行榜:北京位居榜首,60个城市有千亿市值企业(附年榜TOP100详单)
- 曹旭东--关于无人驾驶
热门文章
- 查询快递物流筛选出被拦截单号标色记号
- 40 张图带你搞懂 TCP 和 UDP,android软件开发教程
- 将App通过XCode上传到AppStore 出现这个错误“An error occurred uploading to the iTunes Store”的解决方法
- python修改列表元素_python 3 基础之列表和列表添加元素、修改元素、查找元素、删除元素、排序、嵌套、取最值...
- 手写Promisify函数
- 幼儿教师需要掌握的计算机技巧,幼儿教师应掌握的五项教学技能!
- 2019高考江苏卷语文作文
- 决战职场,教你如何编织人际关系网(一)
- 基于STM32和阿里云的环境检测系统设计
- 团队作业-Beta版本发布