接口

是一种独立于类的新机制,它关注的是行为。

接口的意义就体现在——让没有继承关系的类共享这些行为,各有各的具体实现。

设计上:当我们发现一个或多个类的方法相同,又没有继承关系,则考虑接口。

命名:***able   关键字:interface

属性:只能公共静态常量属性,就算不写关键字,也是默认三种情况。

构造:接口不能有构造,接口不能产生对象。

行为:只能是公共的抽象方法,即使不写修饰符,也是默认这种状况。

在jdk1.7以上的版本中,允许接口拥有已经实现了的方法,但必须用default关键字修饰。

接口的用处:1、让类实现接口,而且是多实现的。

类实现接口,使用implement关键字,并且重写接口中的抽象方法。

如果一个类实现一个接口,但没有重写全部的抽象方法,则这个类为抽象类。

类可以实现多个接口,只能是单继承。

2、接口可以继承接口,而且是多继承的。

设计原则:接口隔离原则(接口最小原则)尽量定义小接口。

3、应用多态——接口引用指向实现接口的类的对象。

如果类没有实现接口,不能用接口指向它的对象。

接口引用==拥有莫种能力的东西。

抽象类和接口在设计上的区别:与生俱来(一脉相承)的行为写到抽象类中;附属添加的行为写到接口,接口尽量定义小接口。

异常

问题:包括异常(Exception)和错误(Error)。

错误:程序不能用代码解决的问题。包括硬件问题、环境问题、系统问题等。

异常:包括运行时异常和编译时异常(检查异常)。

运行时异常:程序在运行期间出现的异常。像常见的空指针异常、数组下标越界、类型转换异常等。

编译时异常:程序在编译时,有红线提示(unhandled Exception)信息的异常。不捕获就不能通过编译。

异常处理机制:在程序发生异常的地方,jvm会产生一个异常对象,先暂停程序运行,然后往下看有没有捕获异常,如果没有,就返回方法的调用处,如果方法的调用处也没有捕获,就一层层往上返回,如果最后连main主方法都没有捕获异常,则返回JVM,jvm就会终止程序运行,并打印异常信息。期间任何一个环节捕获了异常,程序都能在捕获后的地方,继续执行。

异常处理:1、预判提前处理异常发生的条件。

2、异常捕获try、catch

try块、catch块:

1、try块运行可能发生异常的程序,catch块判断可能发生的异常,并给出相应的处理措施。

2、catch块一次只能捕获一个异常。

3、多个catch块应从子到父的顺序抒写,否则子异常匹配不到。

4、e.printStackTrace();语句可以在catch块中打印异常。

5、try、catch可以与其它条件控制语句混合使用,使程序即使发生了异常,也能回到异常发生的地方继续执行。

finally块不管是否发生异常,都要执行的代码。

finally——资源的管理,通道的关闭。

finally的优先级非常高,不管break、continue还是return都无法阻止它被执行,它在它们之前执行。唯一能阻止finally执行的是System.exit()。

try、catch、finally都不能单独存在。

try后面必有catch或finally。

catch/finally前面必有try。

抛异常

我们可以在业务逻辑处产生一个异常对象,使用throw关键字抛出这个异常。

当主动抛出的异常是一个编译时异常的时候,必须在编译期对本方法的调用者产生警告,需要在方法的声明处添加throws,表明该方法有可能发生异常。

throws会影响到重写的规范——子类重写方法不能抛出比父类被重写方法范围更大的异常。

throw和throws的辨析:

1、throw和throws都是关键字,都属于异常处理部分的。

2、throw是写在方法体中的,后面跟的是一个异常对象。

throws是写在方法声明最后面的,后面跟的是一个或者多个异常类。

3、当运行到throw这句代码的时候,就会真正发生抛出一个异常对象的动作。

throws是在编译期警告本方法的调用者,有可能会发生哪些类型的异常。

4、当一个方法体中有throw语句,不一定会有throws,除非throw后面跟的是编译期异常,那就必须写throws。

自定义异常:

三层架构:

表示层    业务层      数据访问层

1、自定义异常必须继承Exception。

2、自定义异常至少有两个带参构造,一个带异常参,一个带字符串参,前者用于把其它异常类型转换为自定义异常,后者用于操作非jvm主动抛出的业务异常。

3、可以给自定义异常提供拓展方法。

一个完整的方法声明:访问修饰符 可选修饰符 返回类型 方法名(形参列表)throws抛出的异常列表。

day15 接口与异常的更多相关文章

  1. 项目部署到liunx环境下访问接口返回异常

    1.访问接口返回异常 已经连续踩了两次这个坑了.所以记下来了.方便下次搜索! 项目在window下运行正常,无任何异常! 但是部署到liunx环境下的服务器上就有问题 访问静态页面毫无问题,一旦涉及到 ...

  2. Linux虚拟机:发布WebService接口出现异常,无法访问接口

    Linux虚拟机:发布WebService接口出现异常,无法访问接口 今天在部署WebService工程的时候遇到的问题: 在Linux虚拟机上部署一个tomcat同时在tomcat下放置2个工程,其 ...

  3. 数据接口请求异常:parsererror

    问题一:直接拿别人的文件放在本地打开 如下图 原因:这是提示"交叉源请求仅支持协议方案:HTTP.数据.Chrome.Chrome扩展.HTTPS." 也就是你不能用本地文件打开, ...

  4. java抽象类,接口与异常

    1.抽象类: 定义;包含一个抽象方法的类称称为抽象类,抽象类在class前使用adstract关键词修饰. 抽象方法;只声明未实现的方法称为抽象方法,使用adstract关键字声明该方法. 抽象类定义 ...

  5. Java接口的异常设计

    一.问题的提出   疑惑1:在设计接口的时,对于接口方法何时需要声明抛出受检异常或者说所有的接口方法最后都声明抛出受检异常? 以下是代码片段: public interface xx{ public ...

  6. java 面向对象面试题,问答题,构造方法,抽象类,继承,多态,接口,异常总结;

    一,构造方法的特点 面向对象的思想是如何在java展现的呢? 就是通过类和对象 类是一组相关的属性和行为的集合.是一个抽象的概念. 对象是该类事物的具体表现形式.具体存在的个体. 一.抽象类的抽象方法 ...

  7. mapper接口绑定异常

    前言 由于MP的代码生成器把mapper接口绑定的写sql语句xml文件创建在java目录下,而Maven加载机制只会将.java文件编译成.class文件,所以在target目录下找不到写xml文件 ...

  8. layui文件上传组件“请求上传接口出现异常”问题解决方案

    这是一个悲伤的故事,以前开发项目用过很多次这个组件,这次使用了Token,于是报了一些莫名其妙的错误,来复盘一下,警示自己! 刚开始接触layui的同学们肯定经常会看到这个错误 下面我们对这个异常的处 ...

  9. IE8浏览器跨域接口访问异常的解决办法

    IE8版本以下浏览器绝对是一个神奇的存在,忙碌好久,万事具备,居然在ajax调用接口的时候直接爆炸 陈述一下问题 首先是有这样一个接口,请求类型POST,入参JSON,出参JSON,jQuery aj ...

随机推荐

  1. sprint会议1

    昨天:进行第一次站立会议,讨论冲刺阶段,目标,任务认领,制作索引卡. 今天:准备查找安卓APP开发的有关资料,安装有关软件. 遇到的问题:对这方面毫无了解,不知道怎么开始,从哪开始,完全没经验.

  2. Struts2框架学习

    Struts功能详解——ActionMapping对象 ActionMapping描述了struts中用户请求路径和Action的映射关系,在struts中每个ActionMapping都是通过pat ...

  3. 2018软工实践—Alpha冲刺(10)

    队名 火箭少男100 组长博客 林燊大哥 作业博客 Alpha 冲鸭鸭鸭鸭鸭鸭鸭鸭鸭鸭! 成员冲刺阶段情况 林燊(组长) 过去两天完成了哪些任务 协调各成员之间的工作 测试整体软件 展示GitHub当 ...

  4. 第一次spring冲刺第7天

    讨论成员:王俊凯.王逸辉.罗凯杰.马志磊 讨论问题:进行UI设计的详细讨论,虽然结果各有争议,但最终确定了较为简单的布局页面,并且开始收集精美页面的案例 冲刺尚未结束,同志还需努力,致力于最后.

  5. 灵悟礼品网上专卖店Sprint计划

    一.现状 小组成员初步了解了所做项目的大致内容,需要时间一步一步分析和规划. 二.部分需求索引卡 第一个阶段没有具体功能的实现,只是先把所要做的项目思路理清,并把相应的数据库建立好. 三.任务认领 产 ...

  6. 【CS231N】5、神经网络静态部分:数据预处理等

    一.疑问 二.知识点 1. 白化 ​ 白化操作的输入是特征基准上的数据,然后对每个维度除以其特征值来对数值范围进行归一化.该变换的几何解释是:如果数据服从多变量的高斯分布,那么经过白化后,数据的分布将 ...

  7. es6 ...展开运算符

    展开运算符,目前应用在数组上,对象展开运算符,将在es7 提案 1.两个对象连接返回新的对象   let a = {aa:'aa'} let b = {bb:'bb'} let c = {...a,. ...

  8. 获取字符串中某个指定的子串出现的开始位置(CHARINDEX用法)

    CHARINDEX作用 写SQL语句我们经常需要判断一个字符串中是否包含另一个字符串,但是SQL SERVER中并没有像C#提供了Contains函数,不过SQL SERVER中提供了一个叫CHAEI ...

  9. 【高级】PHP-FPM和Nginx的通信机制

    PHP-FPM 介绍 CGI 协议与 FastCGI 协议 每种动态语言( PHP,Python 等)的代码文件需要通过对应的解析器才能被服务器识别,而 CGI 协议就是用来使解释器与服务器可以互相通 ...

  10. Linux下更改正确国内时间

    Linux使用小Tips 整理些Linux些常遇到的问题. Linux下设置时间 提供两种最根本有效的方式,就是更改时区.这里以更改为国内上海时间例子,其他地方时区同理. 方法一 备份文件 mv /e ...