计划是:
- 早上查题,背一遍然后检查自己一遍以上
- 中午有时间就背一遍以复习昨天的为主
- 晚上背一遍,第二天中午再看一眼
- 第四天课间看一遍
- 第七天课间看一遍
- 第十五天课间看一遍
接口和抽象类的联系和区别。
语法层面上的区别
1)一个类只能继承一个抽象类,而一个类却可以实现多个接口;
2)接口中的成员变量只能是public static final类型的(常量);抽象类中的成员变量可以是各种类型的
3)接口不能含有任何非抽象方法,而抽象类可以(从jdk8开始接口可以有默认方法)
4)接口的方法只能是public。抽象类的抽象方法可以是public,protected,default类型
5)接口中不能含有静态代码块以及静态方法,而抽象类可以有静态代码块和静态方法;
6)接口和接口之间可以多继承,public interface A extends B,C
7)接口只能继承接口;抽象类可以实现接口,抽象类可以继承抽象类。
8)接口没有构造器,更不能被实例化。抽象类有构造器,不可实例化。
设计层面上的区别
1)抽象类是对一种事物的抽象,即对类抽象,而接口是对行为的抽象。抽象类是对整个类整体进行抽象,包括属性、行为,但是接口却是对类局部(行为)进行抽象。
继承是一个 "是不是"的关系,而 接口 实现则是 "有没有"的关系。
2)设计层面不同,抽象类作为很多子类的父类,它是一种模板式设计。而接口是一种行为规范,它是一种辐射式设计。
3)一般要修改父类的属性时才用抽象类,尽量用接口。
final和finally和finalize的区别
1、final关键字可以用于类,方法,变量前。用来表示该关键字修饰的类,方法,变量具有不可变的特性。
1.final关键字用于基本数据类型前:这时表明该关键字修饰的变量是一个常量,在定义后该变量的值就不能被修改。
2.final关键字用于方法声明前:这时意味着该方法时最终方法,只能被调用,不能被重写,但是可以被重载。
3.final关键字用于类名前:此时该类被称为最终类,该类不能被其他类继承。
2、finally是在异常处理时提供finally块来执行任何清除操作。不管有没有异常被抛出、捕获,finally块都会被执行。
try块中的内容是在无异常时执行到结束。
catch块中的内容,是在try块内容发生catch所声明的异常时,跳转到catch块中执行。
finally块则是无论异常是否发生,都会执行finally块的内容。
所以在代码逻辑中有需要无论发生什么都必须执行的代码,就可以放在finally块中。
3、finalize是方法名。java技术允许使用finalize()方法在垃圾收集器将对象从内存中清除出去之前做必要的清理工作。
这个方法是由垃圾收集器在确定这个对象没有被引用时对这个对象调用的。
它是在object类中定义的,因此所有的类都继承了它。子类覆盖finalize()方法以整理系统资源或者被执行其他清理工作。
finalize()方法是在垃圾收集器删除对象之前对这个对象调用的。手动调用 System.gc()调动垃圾回收机就可以调用这个方法
内部类的类型及其特点。
内部类可以分为很多种,但是主要有4种内部类:静态内部类、成员内部类、局部内部类、匿名内部类。
1.静态内部类是指被声明为static的内部类,不能访问外部类的普通成员变量,只能访问外部类中的静态成员变量和静态方法。
2.去掉关键字static就是成员内部类,可以自由的引用外部类的属性和方法。
3.局部内部类是指定义在一个代码块内的类,作用范围为其所在的代码块。
局部类类似于局部变量一样,不能被public、protected、private以及static修饰,
只能访问方法中定义为final类型的局部变量。
4.匿名内部类,是一种没有类名的内部类,不使用关键字class、extends、implements,它必须继承其他类或实现其它接口。
(1)匿名内部类不能有构造函数
(2)不能定义静态成员、方法和类
(3)不能是public、protected、private、static。
(4)只能创建匿名内部类的一个实例
interface Person {
public void eat();
}
public class Demo {
public static void main(String[] args) {
//new person后面大括号里的就是匿名内部类
Person p = new Person() {
public void eat() {
System.out.println("eat something");
}
};
p.eat();
}
}