基础

  • 基本数据类型(8个)

    1. byte
    2. short
    3. int
    4. long
    5. float
    6. double
    7. char
    8. boolen
  • 引用数据类型

    1. String
    2. 数组

注解

  • 按照运行机制分类

    1. 源码注解:如@Override等
    2. 编译时注解:如@NotNull等
    3. 运行时注解:如@Autowired等
  • 按照来源分类

    1. 来自JDK
    2. 第三方
    3. 自己定义

设计模式

  • 单例设计(提高性能,节省内存空间,解决多重占用)

    1. 饿汉式(空间换时间,线程安全

      • 在类中创建私有构造方法

      • 创建私有静态该实例对象

        ​ 在创建过程中实例化对象

      • 创建公有静态方法提供实例对象

        ​ 将该实例化返回

    2. 懒汉式(时间换空间,存在线程风险

      • 在类中创建私有构造方法

      • 创建私有静态该实例对象

        ​ 在创建过程中不用实例化对象

      • 创建公有静态方法提供实例对象

        ​ 判断该对象是否实例化,没有实例化则实例化,有则直接返回。

  • ….

多态(多种形态)

理解:对同一消息做出不同的反应。如动物类中的一个“叫声”方法,子类兔子和狗引用重写该方法时不同。

  • 类型(两种)

    1. 编译时多态(方法重载)
    2. 运行时多态
  • 必要条件

    1. 满足继承关系
    2. 父类引用指向子类对象
  • 向上转型(隐式转型:父类引用指向子类实例):小类转型为大类,无法调用子类特有方法。

  • 向下转型(子类引用指向父类对象,需满足转型条件):使用instanceof进行判断是否具有转型条件

  • instanceof运算符

    用于返回左边的对象是否为右边对象的实例

抽象类及抽象方法

  • 抽象类限制实例化(用于无效实例)

    1
    2
    3
    4
    // 无效实例化(无意义)
    Animal animal = new Animal('Yaya',12);
    // 正确实例化
    Dog dog = new Animal('Yaya',12);

    ​ 可用abstract关键字(不允许实例化)定义类成为抽象类,用于提示无意义实例化对象(Animal animal = new Animal(‘Yaya’,12);)。

  • 抽象方法

    ​ 方法上添加abstract关键字成为抽象方法,继承该类后必须重写其抽象方法,否则报错。

  • 规则:

    1. 包含抽象方法的类是抽象类
    2. 抽象类中可以没有抽象方法
    3. static、final、private不能出现在抽象类及抽象方法中

接口(interface关键字)

implements关键字:实现接口

  • 接口类中可以存在默认方法和静态方法,都可以带方法体,但必须注意是JDK1.8版本后才支持。

    1
    2
    3
    4
    5
    6
    7
    8
    // default:默认方法
    default void test1(){
    System.out.println("接口中默认链接");
    }
    // static:静态方法
    static void test1(){
    System.out.println("接口中静态方法");
    }
  • 调用方法优先级:本类中重写的方法>父类方法>接口方法

内部类

定义:一个类可以定义在另一个类中或者方法中。

包含内部类的类称为外部类

  • 分类

    1. 成员内部类(普通内部类)
    2. 静态内部类
    3. 方法内部类
    4. 匿名内部类
  • 成员内部类(普通内部类)

    1. 获取内部类方式1:

      1
      2
      //new 外部类.new 内部类
      Person.Heart myHeart = new Person().new Heart();
    2. 获取内部类方式2:

      1
      2
      3
      //外部类对象.new 内部类
      Person zhangsan = new Person();
      Person.Heart myHeart = zhangsan.new Heart();
    3. 获取内部类方式3:

      1
      2
      3
      //外部类对象.获取方法
      Person zhangsan = new Person();
      Person.Heart myHeart = zhangsan.getHeart();
  • 静态内部类

    1. 静态内部类中,只能直接访问外部类的静态方法或成员,如果需 调用非静态方法或成员,则通过外部类对象访问。
    2. 静态内部类对象实例时,可以不依赖外部类对象。
    3. 可以通过外部类.内部类.静态成员的方式,访问内部类中的静态成员。
  • 方法内部类

    定义:定义在外部类方法中的内部类。

    1. 和方法内部成员使用规则一样。
    2. 类中不能包含静态成员。
    3. 类中可以包含final、abstract关键字。
  • 匿名内部类

    1
    2
    3
    4
    5
    6
    7
    8
      PersonTest test = new PersonTest();
    // 匿名内部类实现
    test.getRead(new Person(){
    @Override
    public void read(){
    System.out.println("男生喜欢科幻小说");
    }
    })
    1. 匿名内部类没有类型名称、实例对象名称。
    2. 编译后的文件命名:外部类$数字.class
    3. 无法使用private、public、protected、abstract、static修饰符。
    4. 无法编写构造方法,可以在构造代码块中完成。
    5. 不能出现静态成员。
    6. 可以实现接口也可以继承父类,但不兼得。