Java基础整理

126 阅读5分钟

抽象类和接口

  • 抽象类
  1. 不能创建abstrac类的实例
  2. 可以创建变量,类型是抽象类,并指向具体子类的一个实例
  3. 不能有抽象构造函数和抽象静态方法
  4. 子类实现抽象类的所有抽象方法
  5. 抽象类中可以有非抽象方法
  6. abstract不能与final并列修饰同一个类。
  7. abstract 不能与private、static、final或native并列修饰同一个方法
  • 接口
  1. 抽象类的变体
  2. 接口中所有的方法不都是抽象的,用default修饰的方法就不是抽象的
  3. 只可以定义 static final成员变量,默认的,不写,它也就是static final修饰的。
  4. 实现类重写接口的未实现的方法,如果方法用default修饰的话,将不需要重写
  5. instanceof 运算符可以用来决定某对象的类是否实现了接口

Overload和Override

重载和重写是Java多态性的不同表现

  • Overload 重载
  1. 如果在一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型,则称为方法的重载(Overloading)。
  2. Overloaded的方法是可以改变返回值的类型。
  • Override 重写
  1. 在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写(Overriding)
  2. 重写方法后,原方法就被覆盖了,若要使用原方法,就需要调用super关键字来引用
  3. 子类访问修饰权限不能低于父类

final和finalize

  • final
  1. 声明属性:属性不可变
  2. 声明方法:方法不可覆盖
  3. 声明类:类不可继承
  • finalize
  1. Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法
  2. 可以覆盖此方法提供垃圾收集时的其他资源回收,例如关闭文件等。

面向对象的特征

  • 抽象
抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。
抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用部分细节。
抽象包括两个方面,一是过程抽象,二是数据抽象。
  • 继承
继承是一种联结类的层次模型,并且允许和鼓励类的重用,它提供了一种明确表述共性的方法。
对象的一个新类可以从现有的类中派生,这个过程称为类继承。
新类继承了原始类的特性,新类称为原始类的派生类(子类),而原始类称为新类的基类(父类)。
派生类可以从它的基类那里继承方法和实例变量,并且类可以修改或增加新的方法使之更适合特殊的需要。
  • 封装
封装是把过程和数据包围起来,对数据的访问只能通过已定义的界面。
面向对象计算始于这个基本概念,即现实世界可以被描绘成一系列完全自治、封装的对象,这些对象通过一个受保护的接口访问其他对象。
  • 多态
多态性是指允许不同类的对象对同一消息作出响应。
多态性包括参数化多态性和包含多态性。
多态性语言具有灵活、抽象、行为共享、代码共享的优势,很好的解决了应用程序函数同名问题。

Object中的方法

image.png

内部类

  1. 静态内部类: 属于外部类,只加载一次。作用域仅在包内,可通过 外部类名.内部类名 直接访问,类内只能访问外部类所有静态属性和方法。HashMap 的 Node 节点,ReentrantLock 中的 Sync 类,ArrayList 的 SubList 都是静态内部类。内部类中还可以定义内部类,如 ThreadLoacl 静态内部类 ThreadLoaclMap 中定义了内部类 Entry。
  2. 成员内部类: 属于外部类的每个对象,随对象一起加载。不可以定义静态成员和方法,可访问外部类的所有内容。
  3. 局部内部类: 定义在方法内,不能声明访问修饰符,只能定义实例成员变量和实例方法,作用范围仅在声明类的代码块中。
  4. 匿名内部类: 只用一次的没有名字的类,可以简化代码,创建的对象类型相当于 new 的类的子类类型。用于实现事件监听和其他回调。

子类初始化的顺序

  1. 父类静态代码块和静态变量。
  2. 子类静态代码块和静态变量。
  3. 父类普通代码块和普通变量。
  4. 父类构造方法。
  5. 子类普通代码块和普通变量。
  6. 子类构造方法。

List、Map、Set

  1. List以特定索引来存取元素,可以有重复元素,继承Collection接口
  2. Set不能存放重复元素(用对象的equals()方法来区分元素是否重复),继承Collection接口
  3. Map保存键值对(key-value pair)映射,映射关系可以是一对一或多对一;只允许存放一个key为null的键值对,如果有多个null-v键值对,保留最后一个。

image.png

  1. Set和Map容器都有基于哈希存储和排序树的两种实现版本

HashMap和Hashtable

  1. HashMap和Hashtable都实现了Map接口
  2. HashMap允许键和值是null,而Hashtable不允许键或者值是null。
  3. Hashtable是同步的,而HashMap不是。因此,HashMap更适合于单线程环境,而Hashtable适合于多线程环境。
  4. HashMap提供了可供应用迭代的键的集合,因此,HashMap是快速失败的。另一方面,Hashtable提供了对键的列举(Enumeration)。