基础复习二

一、面向对象的基本特征

1、封装:是将描述某类事务的数据与处理这些数据的函数封装在一起,形成一个有机整体——类。类所具有的封装性可使程序模块具有良好的独立性与可维护性。类的私有数据在类的外部不能直接使用,外部只能通过类的公共接口方法来处理类中的数据,从而使数据的安全性得到保证。封装的目的是增强安全性和简化编程,使用者不必了解具体的实现细节,仅需要通过外部接口,特定的访问权限来使用类的成员。将设计者和使用者分开
2、继承:通过继承,进一步扩充新的特性,适应新需求。保持已有类的特性而构造新类的过程称为继承。继承的目的在于代码重用。 分为单继承和多重继承。
3、多态:一种类型表现出的多种状态。 分为方法多态性对象多态性
方法多态性——重载+覆写
重载:方法名称相同,传入的参数列表不同,所调用方法不同。同一个方法名称在一个类中有不同的功能实现。
覆写:父类的方法名称在子类有不同的功能实现。根据实例化子类的不同,同一个方法可以完成不同的功能。
对象多态性——体现在父、子对象之间的转型上
允许将父对象设置成为一个子类对象,多态意味着相同的(父类)信息发送给不同的(子)对象,每个子对象表现出不同的形态。

二、访问控制符

私有 private ——只能在当前声明的类内部访问。
默认 default ——同个包可以访问(别的包子类也不行)。
保护 protected ——同个包及其子类(无论是否同个包)
共有 public —— 全部可访问。
这里写图片描述

三、抽象类和接口

最大的区别在子类可以实现多个接口 都可以有实现方法(默认方法) 。接口变量默认是public static final型,所以必须给初值,子类也不能重新定义和改变,抽象类为frendly型。
抽象类可以继承多个接口,接口不能继承抽象类,接口可以继承(extend)多个接口。
抽象类:可以使用各种权限,抽象类可以有构造方法(必须在子类中调用)。应用:模板设计模式。
接口:全部都是public权限,方法默认是抽象方法。数据成员必须是常量。可以有实现的方法(default)。子类实现多个接口的时候不能出现同名的默认方法。应用:工厂设计模式,代理设计模式。

四、覆写equals方法时必须也覆写hashCode方法

为了在hash code为基础的容器内中当key的时候也可以用,因为底层是用hashCode判断。
Object类有两种方法来推断对象的标识:equals和hashCode。如果根据equals判断两个对象相等,那么两个对象调用hashCode必须生成相同的整数结果。反过来两个hashCode相等,equals不一定相等。
默认情况下equals方法用来比较两个对象的地址值,hashCode用来返回其对象的物理地址。

五、内部类

作用:
(1)封装:内部类隐藏在外部类之内,不允许同一个包中的其他类访问该类。
(2)内部类成员可以访问外部类的私有数据,外部类不能访问内部类的实现细节。

六、包装类

转换:Integer.parseInt()、String.toCharArray()、String.valueOf()、
包装类不能用==做比较,因为比较的是地址,可以用compareTo方法比较。

七、反射

功能:运行时判断一个对象的类、构造任意类的对象、判断类具有的成员变量和方法、调用任意一个对象的方法。
获得Class类的方法:对象.getClass、类.class、Class.forName(String类全名)
带反射的工厂模式。

八、异常

程序员存在思维盲点,造成程序在运行时发生错误,对java而言即异常(Exception)。
Exception和Error都是继承Throwable(可抛出)。Err标识JVM错误,一般无需程序开发人员处理。Exception标识程序可处理的异常。
分为运行时异常(RuntimeException)和非运行时异常。
Exception:强制性要求用户处理。
RuntimeException:是其子类,用户选择进行处理。包括数字格式化、强制转换、空指针、数学算式、数组越界等异常。
throw 手动抛出。
checked异常:需要try-catch-finally
RuntimeException和Error 即为 unchecked异常。

九、类集

list和set都继承于collection、map不是。
List(重复、有序):ArrayList(数组结构、不同步)、Vector(数组结构、同步)、LinkedList(链式结构、只能操作头尾、不同步)。
Set(不可重复、无序):HashSet(散列表)、TreeSet(树、排序)
Map(键值对Map.Entry,其中键为Set) 输出需先转换为Set后迭代:HashMap(散列表)、TreeMap(树、排序)、HashTable(同步)
比较器:comparable(类定义)、comparator(挽救)
输出:Iterator迭代
Collection和Collections区别:前者为集合操作的接口,后者为一个专门提供各个集合接口的操作方法的类。
Collection中保存数据的目的是为了输出,Map中为了查找。

其他注意事项:

  • static修饰的成员不能访问没有static修饰的成员。
  • final标记的方法不能被子类覆写实例。
  • 使用instanceof判断一个类是否实现了某个接口或一个对象是否属于一个类。
  • String的入池。
  • 二分查找只能查找有序数组。
  • 单例设计模式:构造方法私有,类内部实例化一个static+final对象以及提供返回方法。
  • 静态代码块用来初始化静态成员变量,执行时间:第一次动用了该类的内容。
  • java类属性和对象属性的初始化顺序:1、静态变量初始化 2、静态方法块 3、非静态变量初始化 4、构造方法
  • 栈是由编译器自动分配和释放的一块内存区域,主要存放基本类型的变量、指令代码、常量和对象句柄(引用地址),存取速度较快,数据可以共享,缺点是数据大小和生存期必须确定,缺乏灵活性。栈内存比较小。
    堆是程序运行动态分配的内存区域,new指令建立,由垃圾回收隐式回收。可以动态分配内存大小,生存期不必告诉编译器,存取速度较慢。

猜你喜欢

转载自blog.csdn.net/cairuojin/article/details/80992939