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语句 ...
随机推荐
- jdk rpm安装实现
wget https://download.oracle.com/otn/java/jdk/8u211-b12/478a62b7d4e34b78b671c754eaaf38ab/jdk-8u211 ...
- 03-Docker-Engine详解
目录 03-Docker-Engine详解 摆脱 LXC 摒弃大而全的 Docker daemon 开放容器计划(OCI)的影响 runc containerd 启动一个新的容器 该模型的显著优势 s ...
- 调用webservice服务(通过反射的方式动态调用)
调用 ";//系统类别 var jkxlh = "";//接口序列号 var jkid = "68W05";//接口id string WriteXm ...
- windows10 通过ssh访问 linux
安装openssh服务 Win10其实自带OpenSSH 没有的话,点击上面的添加找到并安装 在服务里设置对应服务开机启动 添加服务器到已知主机 ssh-keygen -R 你的服务器ip 连接Lin ...
- 《开课》---创业学习--训练营直播第一课--HHR
1,分享三点:敬畏心,学习过程,带着目标学习. 2,融资是个非常专业的技术活. 3,一定不要盲目自信,在资本市场,融资永远是个小概率事件. 4,学习过程:每周解锁学习资料,固定的时间来进行作业答疑. ...
- idea 创建maven子父工程
1.创建maven工程: 2. 创建工程名称: 3.删除父工程下的src文件夹,指定打包方式为pom,添加maven依赖: 4.右键项目添加子工程: 5.添加子工程名称: 6.子工程创建成功: 7.依 ...
- 验证码校验(Ajax)
show.jsp <%@ page language="java" contentType="text/html; charset=utf-8" page ...
- Flask - 运行APP
from flask import Flask app = Flask(__name__) @app.route("/") def hello(): return 'Hello, ...
- C/C++网络编程4——实现基于TCP的服务器端/客户端1
一.TCP服务器调用顺序: 调用socket函数创建套接字:声明并初始化地址信息结构体变量:调用bind函数向套接字分配地址:调用listen函数进入等待连接请求状态,只有调用了listen函数后客户 ...
- 【协作式原创】自己动手写docker之run代码解析
linux预备知识 urfave cli预备知识 准备工作 阿里云抢占式实例:centos7.4 每次实例释放后都要重新安装go wget https://dl.google.com/go/go1.1 ...