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语句 ...
随机推荐
- 批量离线安装jar 包到maven本地仓库
//installer.bat@echo offset localdir=%~dp0call mvn install:install-file -DgroupId=org.zhixun -Dartif ...
- HYStockChart, 股票图(包括K线图、趋势图、成交量、滚动、放大缩小等)
HYStockChart, 股票图(包括K线图.趋势图.成交量.滚动.放大缩小等) https://www.helplib.com/GitHub/article_127980git 地址 http:/ ...
- 吴裕雄 PYTHON 神经网络——TENSORFLOW 学习率的设置
import tensorflow as tf TRAINING_STEPS = 10 LEARNING_RATE = 1 x = tf.Variable(tf.constant(5, dtype=t ...
- Docker for YApi--一键部署YApi
获取YApi镜像$ docker pull mrjin/yapi:latest 注意:本仓库目前只支持安装,暂不支持升级,请知晓.如需升级请备份mongoDB内的数据. docker-compose ...
- Docker 安装 Filebeat
使用同版本镜像 7.4.1 1.下载Filebeat镜像 docker pull store/elastic/filebeat: docker images 2.下载默认官方配置文件wget http ...
- Robot Framework 使用【2】-- MAC系统搭建Robot Framework
前言 上一篇中讲述了如何在windows环境下搭建Robot Framework,发完帖后有几位小伙伴就私下留言有没有MAC版本的搭建过程,由于笔者MAC上是安装了旧版本的,经过笔者本周零碎时间的尝试 ...
- 线程池ExecutorService的使用及其正确关闭方法
创建一个容量为5的线程池 ExecutorService executorService = Executors.newFixedThreadPool(5); 向线程池提交15个任务,其实就是通过线程 ...
- 【原】Django常用命令总结
1.终端命令 # 查看django版本 $ python -m django --version # 创建项目,名为mysite $ django-admin startproject mysite ...
- SpringMvc 项目配置
spring-mvc.xml <?xml version="1.0" encoding="UTF-8"?> <beans xmlns=&quo ...
- 前端学习 之 JavaScript DOM 与 BOM
一. DOM介绍 1. 什么是DOM? DOM:文档对象模型.DOM 为文档提供了结构化表示,并定义了如何通过脚本来访问文档结构. 目的其实就是为了能让js操作html元素而制定的一个规范. DOM就 ...