201711671229 《Java程序设计》第七周学习总结

第七周学习了两章的内容 - 第6章:接口与实现;第七章:内部类与异常类

教材学习内容总结

一,接口

接口声明如下:

interface 接口名字{
final int max = 100;
void add();
float sum(float x,float y);
}

接口体中包含常量的声明和抽象方法两部分,并且常量和抽象方法的访问权限一定是公共的。

当定义为接口时,常量和抽象方法默认为public,所以声明中的final和public abstract可以省略;

定义接口时,如果关键字接口前面加上公共关键字,就称这样的接口是一个公共接口;公共接口可以被任何一个类实现如果一个接口不加公共修饰,就称做友好接口,友好接口可以被与该接口在同一个包的类实现。

2,实现接口

接口由类来实现,使用关键字实现声明该类的一个或多个接口,如:

class A implements Printable,Addable{}
也可
class Dog extends Animals implements Eatables,Sleepable{}

当一个非抽象类实现了某个接口时,这个类必须重写接口中的全部方法,并且访问权限必须用公共修饰;

如果一个类声明实现了一个接口,但没有重写接口中的所有方法,那么这个类必须是抽象类;

程序可以用接口名访问接口中的变量,如果一个类实现了接口,那么该类可以直接在类体中使用该接口中的常量;

如果父类实现了某个接口,那么子类自然实现了该接口;

接口也可以被继承,即可以通过关键字延伸声明一盒接口是另一个接口的子接口,子接口继承父接口中的全部方法和常量。

3,理解接口

(1)接口可以抽象出重要的行为标准,该行为标准用抽象方法来表示;

(2)可以把实现接口的类的对象的引用赋值给接口变量,该接口变量可以调用被该类变量实现的接口方法,即体现该类根据接口里的行为标准给出的具体行为。

如图4所示,接口与多态

由接口产生的多态指不同的类在实现同一个接口时可能具有不同的实现方法,那么接口变量在回调接口方法时就可能具有多种形态。

 

二,接口的UML图

说明:接口的名字必须是斜体字体,而且需要用<<接口>>修饰名字,该修饰符合名字分列在两行;

类与接口是实现关系,称类实现接口,UML使用虚线连接类和它的接口,虚线起始是类,虚线终点是他实现的接口,终点端使用一个空心的三角形表示虚线结束。

 

三,接口回调

需知,接口属于引用型变量,接口变量中可以存放实现该接口的类的实例引用,即存放对象的引用;在接口声明接口变量又没有存放实现该接口的类的实例时,称为空接口。

接口回调:可以把实现某一接口的创建的对象的引用赋值给该接口声明的接口变量,那么该接口变量就可以调用被类实现的接口方法;接口回调与上转型对象调用子类重写的方法类似,可以参照理解。

 

四,抽象类与接口的比较

(1)抽象类和接口都可以有抽象方法

(2)接口中只可以有常量,不能有变量;而抽象类中既可以有常量,也可以有变量

(3)的抽象类中可以有非抽象方法,接口不可以

 

五,面向接口编程

在上一周的总结中,介绍了面向抽象编程的思想,主要是涉及怎样面向抽象类去思考问题。

而面对接口编程,接口只关心操作,但不关心这些操作的具体实现的细节,可以通过在接口中声明若干个抽象的方法,表明这些方法的重要性;方法体的内容细节有实现接口的类去完成..

核心思想是使用接口回调。

 

六,内部类

的Java的支持在一个类中定义另一个类,这样的类称作内部类,而包含内部类的类称为内部类的外嵌类;

1,内部类和外嵌类之间的重要关系:

- 外嵌类的成员变量在内部类中仍然有效,内部类中的方法也可以调用外嵌类中的方法

- 内部类的类体中不可以声明类变量和类方法外嵌类的类体中的方法也可以用内部类声明对象,作为外嵌类的成员

- 内部类仅供他的外嵌类使用,其他类不可以用某个类的内部类声明对象

注:非内部类不可以是静态类.static内部类不能操作外嵌类中的实例成员变量。

 

七,匿名类

如图1所示,如果没有显式地声明一个类的子类,又想子类创建一个对象,这时,爪哇允许我们直接使用一个类的子类的类体创建一个子类对象,匿名类的部分如下:

board.showMess(new OutputAlphabet() //向参数传递OutputAlphabet的匿名子类的对象
                {
public void output(){
                        for(char c='a';c<='z';c++)
                        System.out.println("%3c",c);
                   }
       }    );

2,和接口有关的匿名类

Java的的允许直接用接口名和一个类创建一个匿名对象,此类体被认为是实现了可计算接口的类去掉类声明后的类体,称作匿名类如下:

machine.turnOff(new SH(){  //SH为接口类,此处声明和接口SH有关的匿名类
                public void speak(){
                                ...}
}   );

八,异常类

的Java的使用抛出关键字抛出一个异常子类的实例表示异常发生;

异常对象可以调用如下方法得到或输出有关异常的信息:

public String getMessage();
public void printStackTrace();
public String toString();

Java的的使用的的try-catch语句来处理异常,将可能出现的异常操作放在的的try-catch语句的尝试部分,一旦尝试部分抛出异常对象,或调用某个可能抛出对象的方法,并且该方法抛出了异常对象格式如下:

try{
包含可能发生异常的语句
}
catch(ExceptionSubClass1 e){
...
}
catch(ExceptionSubClass2 e){
...
}

各个捕获参数中的异常类都是异常的某个子类,表示尝试部分可能发生的异常,这些子类之间不能有父子关系,否则保留一个含有父类参数的捕获即可。

try{ }
catch(ExceptionSuClass e){ }
finally{ }

无论在尝试部分是否发生过异常,最后子语句都会被执行。

 

九,自定义异常类

方法一个在声明时可以使用抛出关键字声明要产生的若干个异常,并在该方法的方法体中具体给出产生异常的操作,即用相应的异常类创建对象,并使用关键字抛出异常,导致该方法结束执行。

注:扔和抛出是两个不同的关键字课本168页。

 

十,断言

断言语句一般用于程序不准备通过捕获异常来处理的错误。

断言语句的语法格式:

assert booleanExpression;
assert booleanExpression:messageException;

实例:
assert number>=0;

--assert booleanExpression;

当booleanExpression的值是真时,程序从断言语句处继续执行,值是假的时,程序从断言语句处停止执行。

--assert booleanExpression:messageException;

当booleanExpression的值是真时,程序从断言语句处继续执行,值是假的时,程序从断言语句处停止执行,并输出messageException表达式的值,提示用户出现了怎样的错误。

的Java的解释器默认关闭断言语句,可以如下启用断言语句:

java -ea mainClass

 

教材学习中的问题和解决过程

在课本中看到这样一句话:各个捕捉参数中的异常类都是异常的某个子类,表示尝试部分可能发生的异常,这些子类之间不能有父子关系,否则保留一个含有父类参数的catch即可。不理解,便在网上查询,得到正确的理解是 - “这些子类之间最好不要有父子关系”,若抓中的参数类型有父类子类关系,此时应该将父类放在后面,子类放在前面。

 

调试代码中的问题

本周的代码基本是照着书上敲的,没有什么问题。

 

感悟

从面向抽象编程到面向接口编程的变化需要适应,在解决一个问题时,最好的办法是先分析出要实现的行为,充分理解用户的需求,对接口和实现接口的类进行设计,再进行编程。

 

学习进度条

 代码行数(新增/累计)博客量(新增/累计)学习时间(新增/累计)重要成长
目标5000行30篇400个小时(24000分钟) 
第七周849分之2421/61400分之323 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值