接口 (interface)

一个抽象类,全部的方法都是抽象的,全部方法的public, 我们把这种类叫做极度抽象类,是最干瘪的类。

public abstract class A {

public abstract void method1();

public abstract void method2();

public abstract void method3();

}

public interface A {

void method1();

void method2();

void method3();

}

极度抽象类能够缩写为接口。那么。全部接口的方法都是public abstract.

类创建的过程

接口 (interface)  à  abstract class  à  可实例化类

创建实例       创建子类(继承)     作为引用变量数据类型

普通类         Yes             Yes                  Yes

Final类         Yes             No                  Yes

abstract类     no              Yes                  Yes

接口           no              yes                   yes

接口创建子类:

1. Extends        继承了接口,而得到结果还是接口。

一个类没有实现接口方法的计划。而是想继续添加接口方法。必须使用extendskeyword来表示继承。

2.   implements

一个类假设有对接口方法做实现的计划,必须使用implementskeyword来继承接口。

接口是一个特殊的类,一个类实现了接口。终于成为可实例化类,那么类必须包括接口中所定义的全部方法。

一个接口引用变量能够指向一个实现了这个接口的类对象,但仅仅能调用这个对象中接口部分。

接口的用途:

现实生活中。没有血缘关系的对象之间往往有共同的行为和动作,但每一个对象的行为和动作的详细内容是不一样的,比方士兵, 每一个士兵都会射击。擒拿格斗等行为,但有的人是神枪手,而有的老是不及格。那么也就是说大家都有这个动作,但动作的实现个人各自不同。

以上是现实生活中的详细情况,为了更好的模拟现实生活。语言必须演化,来满足这个要求,极度抽象类在语法层面上满足了这样要求,被重视起来,并终于得到了一个新的名字,接口。

接口在某种程度上与多态有相同的效果。可以写出可高度复用的代码。

1. 异常与错误

a. 错误(error):

语法错误。 逻辑错误

错误是系统的设计缺陷,必须返回软件公司修复。

b. 异常(exception)

现代软件在执行过程中,往往easy受到周边因素的影响,比方网络意外中断,磁盘文件被误删除。用户录入了不对的数据。导致软件执行中断,我们把这样的不是由于软件自身原因。而是软件执行环境的意外。导致的执行停止,我们把其叫做异常。

异常不是软件本身的问题,软件本身没有语法和逻辑问题,而是周边环境发生了意外。是软件设计者始料不及的。对于异常而言,软件开发人员必须做好恰当的异常处理工作,比方, 当系统发现网络意外终止,应把程序挂起,提示用户异常原因。引导用户解决异常,解决完毕后,将积极又一次尝试未完毕操作,使程序可以得以继续执行。

2. 异常处理几点说明

异常对象在系统执行过程中自己主动创建。当然所创建的对象类型是依据不同类型的异常而有差异的,系统会把出现异常的详细信息以及导致异常的原因写在这个对象中。

异常对象主要有两个属性:

a. detailMessage   该异常的详细信息

b. cause           说明了导致这个异常的原因。

异常位置的跟踪和定位:

e. printStackTrace();

因为try块中可能有多条语句,异常爆发了,对象被抛出了。究竟是那条语句导致的呢?

printStackTrace()会具体的告诉你相应的位置。

异常被捕获处理后,异常try…catch..结构后的语句将继续执行。程序不会中止。

可是try块中发生异常的语句之后的语句将不再执行。

1. try块

try块中一般放置编程人员觉得最可能抛出异常的高危语句。try块中的语句假设抛出了异常,那么该语句之后的语句将不再执行(try块中). 该语句抛出的异常。将经过catch模组过滤后,被处理或者无法处理。被抛出方法。

为了提高程序,请尽量降低try块体积,有些不必要的语句,不要放在try块中。

2. Catch块的级联

因为一个try块中的语句,可能会抛出多种异常。对于程序猿来说,应该尽早对其有预期,部署多个catch块对异常进行捕获处理,以免造成程序停机。

但可抛出的异常种类实在难以预測,难免有漏网之鱼,所以。一般来说。我们catch级联块的最后会安排一个“万能”异常捕获者,来抓捕全部的漏网之鱼。

Java.lang.Exception是万能捕获者。其是全部异常类的父类,依据父类引用变量能够指向全部子类对象的原则,其一般放在catch级联块最后一环对遗漏的异常进行捕获。

但其处理缺乏针对性,较为粗糙,建议详细的异常还是用详细的捕获者来捕获处理。

Exception catch模组应避免放在级联块的第一个,否则后头的catch模组因代码无法到达,将所有失效,编译器将敏锐地发现这个问题,导致编译失败。

3. Finally块

坚强的finally块,其仅仅怕System.exit(0), 不管try块中有异常,无异常,有无漏网之鱼均可执行。也不怕try中中途return.

为了有效的释放在try语句执行过程中申请的资源,finally块为此而成。

一般语句结构例如以下:

a. try…catch…finally

b. try…finally..

c. try..catch…

异常的基本处理原则:

一个方法内的异常,要么抛出,要么捕获。

假设本方法不适合处理。则可抛给上级方法处理,层层上报。直到合适的方法处理掉这个异常。

4. throw和throws

throw 抛出

通常情况下,是由系统帮助我们创建相应的异常对象,然后抛出。

在有些特定情况下。我们也能够手动创建异常对象,手动抛出!

if(b<0) throw new RuntimeException("b不能为负数!",null);

一个方法的最后部分将用来声明这种方法会抛出什么样的异常,以方便调用该方法的方法对其做好提前准备。

一个方法可能抛出的异常不止一个,所以必须用throws

Xxxx methodName throws AException,BException…..

假设一个类中会抛出异常,该异常并不在这个类中被捕获,就必须做好方法的异常声明工作。

一个异常要么被捕获处理,要么被抛出,如被抛出方法,则方法必须声明异常信息。

不论什么一个方法,将默认在其签名上写上 throws RuntimeException;

In the following code, which lines will be printed on the standard output?

public class Test

{

public void method1(int x) throws Exception

{

try

{

method2(x);

System.out.println("Checkpoint 1");

}

finally

{

System.out.println("Checkpoint 2");

}

System.out.println("Checkpoint 3");

}

public void method2(int x) throws Exception

{

if (x < 0)

{

throw new NegativeArraySizeException();

}

}

static public void main(String[] args) throws Exception

{

Test t = new Test();

t.method1(-55);

System.out.println("Checkpoint 4");

}

}

A. Checkpoint 1

B. Checkpoint 2

C. Checkpoint 3

D. Checkpoint 4

5. 执行时异常和检查异常

a. 执行时异常(Runtime Exception)

全部执行时异常 extends RuntimeException.

执行时异常是在程序执行过程中爆发的异常,其相对影响面小。问题不严重。一般不影响程序继续执行。

执行时异常无需捕获,自己主动抛出,也无需throws声明。

b. 检查异常  (checked Exception)

检查异常 extends Exception

其要么try…catch..捕获。要么在方法签名末尾显式申明抛出。

pic:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

key:

右击 Source

能够 override/Implement Methods

Generate getters and setters

Public boolean equals (Object obj) {

If(obj = = null) return false ;

If(obj instanceof Apple)

}

接口与抽象类类似,可理解为终极抽象类

接口是能够继承的

JavaStuNote 5的更多相关文章

  1. JavaStuNote 4

    装箱(inbox)和拆箱(outbox) 代表了类类型和基本类型之间的转换行为. 手动版本号: Integer b = new Integer(10); Int a = b.intValue; 自己主 ...

随机推荐

  1. activiti自己定义流程之Spring整合activiti-modeler实例(一):环境搭建

    项目中须要整合activiti-modeler自己定义流程,找了非常多资料后,最终成功的跳转到activiti-modeler流程设计界面.下面是记录: 一.整合基础:eclipse4.4.1.tom ...

  2. paip.中文 分词 ---paoding 3.1 的使用

    paip.中文 分词 ---paoding 3.1 的使用 paoding 3.1 下载: 1 设置字典路径 1 测试代码 1 作者Attilax  艾龙,  EMAIL:1466519819@qq. ...

  3. 怎样用modelsim做后仿真

    摘要: 怎样用modelsim做后仿(编译工具采用quatus) step1:在qurtus改变编译选项:     assignments->EDA tool setting:选择verilog ...

  4. Socket相关函数(1)- socket(), bind(), listen(), accept(), connect(), TCP模型

    tcp_server.c #include <sys/types.h> #include <sys/socket.h> #include <stdio.h> #in ...

  5. cocos2d-x--精灵反转效果--CCOrbitCamera

    CCSprite* pSprite = CCSprite::spriteWithFile("grossini.png"); pSprite->setPosition(ccp( ...

  6. Java experts blog

    https://blogs.oracle.com/poonam/ https://blogs.oracle.com/poonam/entry/updates_to_the_java_troublesh ...

  7. windows xp 创建 Oracle(11G)数据库实例时写入系统日志失败解决方案

    1.查看Windows日志相关服务(Even Log),无异常: 2.清空事件管理器中“应用程序”和“系统节点”的内容,对这两个节点,分别在“属性”页面用增大“最大日志文件大小”的值,并选中“按需要改 ...

  8. vs2010静态链接Qt

    先按照这个帖子弄好静态库 http://www.cnblogs.com/rollenholt/articles/2518642.html 注意原文中config那一步最后一个"-" ...

  9. 获取不到Repeater控件中的CheckBox选中状态

    写在前面的话:在做一个项目的时候,需要使用到Repeater控件,并且在Repeater控件内放置了CheckBox控件来标志需要删除的行,选中后,在后台取到的CheckBox的值总是为false.最 ...

  10. Shell执行将脚本里的变量打印到指定日志文件

    首先需要定位获取任务的运行日志或者报错信息,才能定位问题. 通过shell调用有些脚本的话,日志信息会打印在shell里.不过也有用户在shell里调用正常,但是到crontab调用的时候就出错并且没 ...