Java异常的限制
Java异常的限制
我在看JAVA编程思想,讲到异常的限制,看的代码和解释,非常的难看下去,直接写了他的代码。
java编程思想关于异常限制的逻辑
它以棒球比赛为例子。
定义了Inning(一局比赛)抽象类,构造器抛出异常,三个行为:event、atBat、walk,最顶层的一个异常BaseballException ,它有个子类异常是Foul(犯规),Strike(动手)。
定义了一个接口Storm(暴风雨),它有两个行为event(事件)、rainHard(雨下的太大),与它关联的有两个异常,父异常StormException ,子异常RainedOut 。
请注意抽象类Inning和接口Storm都有一个event方法。
StormyInning 继承抽象类Inning和实现了接口Storm
异常的限制到底有哪些
我们从构造器,方法的重写,向上转型这几个方面总结
构造器:
父类与接口的异常必须解决,不然你怎么说你继承、实现它呢
子类的构造器当然可以抛出新的异常
重写:
子类要可以继承异常也可以不继承异常,可以少抛、多抛异常
如果冲突,就不要抛了。
重写并不以异常种类和多少作为区分啊,所以你可以不抛的
向上转型构造器
编译器一定会提示你抛父类的异常
java编程思想中关于异常限制的代码
package exceptions;
//: exceptions/StormyInning.java
// Overridden methods may throw only the exceptions
// specified in their base-class versions, or exceptions
// derived from the base-class exceptions.
class BaseballException extends Exception {}
class Foul extends BaseballException {}
class Strike extends BaseballException {}
abstract class Inning {
public Inning() throws BaseballException {}
public void event() throws BaseballException {
// Doesn't actually have to throw anything
}
public abstract void atBat() throws Strike, Foul;
public void walk() {} // Throws no checked exceptions
}
class StormException extends Exception {}
class RainedOut extends StormException {}
class PopFoul extends Foul {}
interface Storm {
public void event() throws RainedOut;
public void rainHard() throws RainedOut;
}
@Slf4j
public class StormyInning extends Inning implements Storm {
// 构造器需要继承的异常是BaseballException,也可以新增异常
public StormyInning() throws BaseballException, RainedOut {
//
throw new BaseballException();
}
@Override
public void rainHard() throws RainedOut {
}
//
@Override
public void atBat() throws PopFoul {
throw new PopFoul();
}
// storm和Inning的方法都跑出了异常,不兼容,这个方法不能抛这两个异常
public void event() {
}
public static void main(String[] args) {
log.info("Begin test");
try {
StormyInning si = new StormyInning();
si.atBat();
} catch (PopFoul e) {
log.warn("PopFoul:", e);
} catch (RainedOut e) {
// TODO Auto-generated catch block
log.warn("RainedOut:", e);
} catch (BaseballException e) {
// TODO Auto-generated catch block
e.printStackTrace();
log.warn("BaseballException:", e);
}
Inning i;
try {
i = new StormyInning();
i.atBat();
} catch (RainedOut e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (BaseballException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}catch (Strike e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (Foul e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
Java异常的限制的更多相关文章
- 浅谈java异常[Exception]
学习Java的同学注意了!!! 学习过程中遇到什么问题或者想获取学习资源的话,欢迎加入Java学习交流群,群号码:589809992 我们一起学Java! 一. 异常的定义 在<java编程思想 ...
- 基础知识《十》java 异常捕捉 ( try catch finally ) 你真的掌握了吗?
本文转载自 java 异常捕捉 ( try catch finally ) 你真的掌握了吗? 前言:java 中的异常处理机制你真的理解了吗?掌握了吗?catch 体里遇到 return 是怎么处理 ...
- Java异常体系及分类
上图是基本的java异常体系结构. 主要分为2大类:Error和Exception 1.Error:描述了Java运行系统中的内部错误以及资源耗尽的情形.应用程序不应该抛出这种类型的对象,一般是由虚拟 ...
- Java异常之自定义异常
哎呀,妈呀,又出异常了!俗话说:"代码虐我千百遍,我待代码如初恋". 小Alan最近一直在忙着工作,已经很久没有写写东西来加深自己的理解了,今天来跟大家聊聊Java异常.Java异 ...
- 第11章 Java异常与异常处理
1.Java异常简介 1.什么是异常异常出现的时候代码会无法正常运行下去,会产生各种问题2.捕捉异常的作用提早发现异常,方便查找问题,并给出解决方法3.Java中的异常1.Java中所有不正常的类都是 ...
- java 异常
1.java异常 2.自定义抛出 3.运行时异常,程序有问题,让使用者可以改' ' 4.return 和 throw的区别 return 符合函数要求的值 throw 有问题的时候用它结束 ...
- 3.Java异常进阶
3.JAVA异常进阶 1.Run函数中抛出的异常 1.run函数不会抛出异常 2.run函数的异常会交给UncaughtExceptionhandler处理 3.默认的UncaughtExceptio ...
- 2.Java异常学习
1.Java异常的概念 异常的例子 1.除法就是一个需要捕获异常的例子,除数又可能是0 异常处理的基本流程如下 一旦发生异常,就使得程序不按照原来的流程继续的运行下去 a.程序抛出异常 try{ th ...
- java异常架构图 和几个面试题
1.java异常架构图 粉红色的是受检查的异常(checked exceptions),其必须被 try{}catch语句块所捕获,或者在方法签名里通过throws子句声明.受检查的异常必须在编译时被 ...
- 黑马----JAVA异常
黑马程序员:Java培训.Android培训.iOS培训..Net培训 黑马程序员--JAVA异常 一.JAVA异常有三种语句块:try语句块.catch语句块.finally语句块. 1.try语句 ...
随机推荐
- java 工程idea 添加依赖几种方式:
1.add jar and dependecy derictory: 2.add Libary: 点击new library 选取java: 选择libs文件夹作为library: 选择 maven ...
- centos 6.5 编译安装glibc 2.14(附带中文乱码修正方案)
重要说明:glibc 是linux底层的c库,对系统而言是相当重要的,大部分软件的运行都会调用这个库. ==== 所以没有特殊需求不建议升级 升级后,此前通过源代码编译的软件运行可能出各种错 ...
- beyond compare 用法
1.过滤器用法:点击小眼睛(回话-->回话设置)打开过滤器界面----设置多个过滤文件或目录直接使用回车键 2.比较时最好先设置编码以防出现乱码问题 工具-->文件格式. 3.比较时出现乱 ...
- mqtt.mini.js 使用
html文件里直接调用 <!DOCTYPE html> <html lang="en"> <head> <meta charset=&qu ...
- element table批量删除
很小的一个问题,但是有细节需要注意 (1)问题:在起初我写的时候是根据元素的name是否相同判断是否是同一个节点,出现的问题就是,如果说两个元素的name相同,就会判断出错 (2)代码: <te ...
- 文件的读取与保存(try-with-resource优雅关闭)
借鉴:https://www.cnblogs.com/itZhy/p/7636615.html 一.背景 在Java编程过程中,如果打开了外部资源(文件.数据库连接.网络连接等),我们必须在这些外部资 ...
- ipfs camp course c demo exercise 1
目录 aim: my bugs 解决ipfs 的 cros 问题的方法 result final code for c1 aim: 首先咱们把 broswer 和 自己的api 连接起来(要显示出来自 ...
- 转载和补充:Oracle中的一些特殊字符
oracle通配符,运算符的使用 用于where比较条件的有: 等于:=.<.<=.>.>=.<> 包含:in.not in exists.not exists 范 ...
- 李彦宏AI大会现场:3秒钟事故30分钟专注
编辑 | 于斌 出品 | 于见(mpyujian) 很多人只看到了舞台上3秒钟的事故,却没有看到李彦宏在台上30分钟的专注. 7月3号,百度AI开发者大会上,李彦宏遭遇了3秒钟的突然袭击,他表现的沉着 ...
- MySQL中case when的基本用法总结
MySQL中case when的基本用法总结原创Backcanhave7 最后发布于2018-12-06 15:14:15 阅读数 439 收藏展开MySQL中的case when有用两种用法,官方文 ...