第六章
1.为了克服Java单继承的缺点,Java使用了接口,一个类可以实现多个接口。使用关键字interface来定义一个接口。接口的定义和类的定义很相似,分为接口的声明和接口体。
a.借口的声明格式:
interface 接口的名字
b.接口体:包含常量的声明和抽象方法两部分。常量的要求public、static(允许省略public、final、static修饰符)。抽象方法的要求public(允许省略public abstract修饰符)。
2.接口的实现:a.一个类需要在类声明中使用关键字implement声明该类实现一个或多个接口,接口之间用逗号隔开
b.非抽象类实现了某个接口,那么这个类必须重写这个接口中的所有方法,且方法的访问权限要明显地用public修 饰,否则会降低访问权限。(抽象类可以重写,也可以直接拥有接口中的方法)
3.public接口可以被任何一个类实现,而不加public修饰的友好类只能被同一个包的类实现。
4.接口属于引用型变量,在接口中可以存放实现该接口的类的实例的引用,即存放对象的引用。
5.接口回调:可以把实现某一个接口的类创建的对象的引用赋值给该接口声明的接口变量,那么该接口变量就可以调用被类实现 的接口的方法;即当接口变量调用被类实现的接口方法时,就是通知相应的对象调用这个方法。
(类似上转型对象调用子类重写的方法)
6.如何理解接口:
a.接口可以抽象出重要的行为标准,该标准用抽象方法表示。
b.可以把实现接口的类的对象的引用赋值给接口变量,该接口变量可以调用被该类实现的接口方法。
7.抽象类&接口
a.抽象类与接口都是作为行为标准。
b.抽象类用在同一类别对象。
c.接口更注重行为一致性。
d.抽象类既可以有抽象方法也可以有非抽象方法,既可以有常量也可以有变量;
而接口只可以有抽象方法和常量。
8.接口的多态:不同的类在实现同一个接口时可能具有不同的实现方式,那么接口变量在回调接口方法时就可能具有多种形态。
9.接口参数:如果一个方法的参数是接口类型,我们就可以将任何实现该接口的类的实例的引用传递给该接口参数,那么接口参数就可以回调类实现的接口方法。
10.利用接口也可以体现程序设计的“开-闭原则”,即对扩展开放,对修改关闭。
第七章
1.内部类:Java支持在一个类中声明另一个类,这样的类称作内部类,而包含内部类的类成为内部类的外嵌类。
2.内部类使用规则
注:内部类的类体中不可以声明类变量和类方法。外嵌类的类体中可以用内部类声明对象,作为外嵌类的成员。
1)声明内部类如同再类中声明方法或变量一样,一个类把内部类看作是自己的成员。
2)外嵌类的类体中可以用内部类声明的对象,作为外嵌类的成员。
3)外嵌类的成员变量在内部类中仍然有效,内部类中的方法也可以调用外嵌类中的方法。
4)内部类的类体中不可以声明类变量和方法。
5)外嵌类和内部类在编译时,生成两个.class文件。
3.匿名类:
(1)和子类有关的匿名类
1)创建子类对象时,除了使用父类的构造方法外还有类体,此类体被认为是一个子类去掉类声明后的类体,称作匿名类。
2)假设Bank是类,那么下列代码就是用Bank的一个子类(匿名类)创建对象:
new Bank () {
匿名类的类体
};
(2)和接口有关的匿名类
–假设Computable是一个接口,那么,Java允许直接用接口名和一个类体创建一个匿名对象,此类体被认为是实现了Computable接口的类去掉类声明后的类体,称作匿名类。
–下列代码就是用实现了Computable接口的类(匿名类)创建对象:
new Computable() {
实现接口的匿名类的类体
} ;
4.异常类
Java使用try~catch语句来处理异常,将可能出现的异常操作放在try~catch语句的try部分,将发生异常后的处理放在catch部分。
1) try~catch语句的格式如下:
try {
包含可能发生异常的语句
}
catch(ExceptionSubClass1 e) {
…
}
catch(ExceptionSubClass2 e) {
…
}
2)
带finally子语句的try~catch语句,语法格式如下:
try{}
catch(ExceptionSubClass e){ }
finally{}
其执行机制是在执行try~catch语句后,执行finally子语句,也就是说,无论在try部分是否发生过异常,finally子语句都会被执行。
5.异常的声明
1)一个方法不处理它产生的异常,而是沿着调用层次向上传递,由调用它的方法来处理这些异常,叫声明异常.
2)声明异常的方法:在产生异常的方法名后面加上要抛出(throws)的异常的列表:
如:void compute(int x) throws ArithmeticException
{//这里有异常发生,但是并没有处理…}
6.断言
断言语句用于调试代码阶段。在调试代码阶段让断言语句发挥作用,这样就可以发现一些致命的错误,当程序正式运行时就可以关闭断言语句,但仍把断言语句保留在源代码中,如果以后应用程又需要调试,可以重新启用断言语句。