1.static 修饰成员的特点:
a.被其修饰的成员, 被该类的所有对象所共
b.多了一种调用方式, 可以通过类名调用
c.随着类的加载而加载, 优先于对象存在
static 成员变量-----共享数据
static 成员方法-----常用于工具类
注意事项:
static 方法中, 只能访问静态成员 (直接访问)
static 中不允许使用 this 关键字
2.继承:让类与类之间产生关系(子父类关系),子类可以直接使用父类中非私有的成员
方法重载(Overload) : 在同一个类中, 方法名相同, 参数不同, 与返回值无关
参数不同: 类型不同, 个数不同, 顺序不同
方法重写(Override) : 在子父类当中, 出现了方法声明一模一样的方法 (方法名, 参数, 返回值)
目标1: 能够独立识别出, 方法是不是重写的方法 - 注解: @Override
目标2: 方法重写的使用场景. - 当子类需要父类的方法, 但是觉得父类的方法逻辑不好 (修改 | 增强) 就可以对父类的方法进行重写
3.
4.final : 修饰符, 可用于修饰方法, 类, 变量
特点:
修饰方法: 表明该方法是最终方法, 不能被重写
修饰类: 表明该类是最终类, 不能被继承
修饰变量: 表明该变量是常量, 不能再次被赋值
final修饰变量的命名规范 : 如果变量名是一个单词, 所有字母大写 max MAX
如果变量名是多个单词, 所有字母大写, 中间使用下划线分割 maxValue MAX_VALUE
修饰基本数据类型: 数据值不可改变
修饰引用数据类型: 地址值不可改变, 但是内容可以改变
final修饰成员变量的注意事项 :
a. final修饰成员变量, 不允许修饰默认值
b. final修饰成员变量的初始化时机 1). 在定义的时候直接赋值 2). 在构造方法中完成赋值
5.6.抽象方法:将共性的行为(方法)抽取到父类之后,发现该方法的实现逻辑
无法在父类中给出具体明确,该方法就可以定义为抽象方法
抽象类:如果一个类中存在抽象方法,那么该类就必须声明为抽象类
抽象类的注意事项 :
a. 抽象类不能实例化 - 如果抽象类允许创建对象, 就可以调用内部没有方法体的, 抽象方法了
b. 抽象类存在构造方法 - 交给子类, 通过super进行访问
c. 抽象类中可以存在普通方法 - 可以让子类继承到继续使用
d. 抽象类的子类 1). 要么重写抽象类中的所有抽象方法 2). 要么是抽象类
7.接口: 体现的思想就是声明 [规则]
思路: 如果发现一个类, 所有的组成, 都是抽象方法 - 没有成员变量 - 没有普通方法 这种类, 我们通常会设计为Java中的接口, 因为现在这个类存在的唯一价值, 就只是声明规则了
接口的定义格式: interface 接口名 {}
注意: 接口不允许实例化
接口和类之间是实现关系, 通过implements关键字来完成 class 类名 implements 接口名 {}
实现类(接口的子类): 1. 重写所有抽象方法 2. 将实现类变成抽象类
8.接口的成员特点 :
a. 成员变量 : 只能定义常量, 因为系统会默认加入三个关键字 public static final - 这三个关键字没有顺序关系
b 成员方法 : 只能是抽象方法, 因为系统会默认加入两个关键字 public abstract
c. 构造方法 : 没有
9.接口和类之间的各种关系 : 1). 类和类之间 : 继承关系, 只支持单继承, 不支持多继承, 但是可以多层继承 2). 类和接口之间 : 实现关系, 可以单实现, 也可以多实现, 甚至可以在继承一个类的同时, 实现多个接口 3). 接口和接口之间 : 继承关系, 可以单继承, 也可以多继承
10.多态的前提 : 有继承 / 实现关系 有方法重写 有父类引用指向子类对象
a. 对象多态
Animal a1 = new Dog(); Animal a2 = new Cat();
好处: 方法的形参定义为父类类型, 这个方法就可以接收到该父类的任意子类对象了
b. 行为多态
好处: 同一个方法, 具有多种不同表现形式, 或形态的能力
11.多态的成员访问特点:
a. 成员变量 : 编译看左边(父类), 运行看左边(父类)
b. 成员方法 : 编译看左边(父类), 运行看右边(子类)
在编译的时候, 会检查父类中有没有这个方法
没有 : 编译出错
有 : 编译通过, 但是运行的时候, 一定会执行子类的方法逻辑
原因: 担心你调用的方法, 在父类中是一个抽象方法
12.多态创建对象, 调用静态成员 :
静态的成员, 推荐类名进行调用
细节:
静态的成员, 可以使用对象名调用, 但这是一种假象 --------- 生成字节码文件后, 会自动将对象名调用, 改成类名调用
13.多态的好处 :提高了程序的扩展性
对象多态 : 将方法的形参定义为父类类型, 这个方法可以接收该父类的任意子类对象
行为多态 : 同一个行为, 具有多个不同表现形式或形态的能力
a. 允许定义非抽象方法, 需要加入default关键字 - 作用: 解决接口的升级问题 - 注意事项: 1. public可以省略, 但是default不能省略 2. 默认方法, 实现类是允许重写的, 但是需要去掉default关键字 3. 如果实现了多个接口, 多个接口中存在相同的默认方法, 实现类必须重写默认方法 b. 允许定义静态方法 - 理解: 既然接口已经允许方法带有方法体了, 干脆也放开静态方法, 可以类名调用 - 注意事项 : 1. public可以省略, 但是static不能省略 2. 接口中的静态方法, 只允许接口名进行调用, 不允许实现类通过对象调用
16.JDK9的新特性:接口中可以定义私有方法
17.代码块 : 使用 { } 括起来的代码被称为代码块
分类 :
a. 局部代码块
位置: 方法中的一对大括号
作用: 限定变量的生命周期, 提早的释放内存
b. 构造代码块
位置: 类中方法外的一对大括号
特点: 在创建对象, 执行构造方法的时候, 就会执行构造代码块 (优先于构造方法执行)
作用: 将多个构造方法中, 重复的代码, 抽取到构造代码块中, 从而提升代码的复用性
c. 静态代码块(需要知道)
位置: 类中方法外的一对大括号, 需要加入static关键字
特点: 随着类的加载而执行, 因为类只加载一次, 所以也就只执行一次
作用: 对数据进行初始化
18.内部类: 在类中定义的类(成员+静态+内部+匿名内部类)
创建对象格式: 外部类名.内部类名 对象名 = new 外部类对象().new 内部类对象();
成员访问细节 :
a. 内部类中, 访问外部类成员 : 直接访问, 包括私有
b. 外部类中, 访问内部类成员 : 需要创建对象访问
19.静态内部类 : static 修饰的成员内部类
创建对象格式 : 外部类名.内部类名 对象名 = new 外部类名.内部类对象();
注意事项 : 静态只能访问静态
20.局部内部类: 放在方法、代码块、构造器等执行体中
21.匿名内部类 :(需要知道) 概述 : 匿名内部类本质上是一个特殊的局部内部类(定义在方法内部) 前提 : 需要存在一个接口或类 格式 : new 类名\接口名 () { } new 类名(){} : 代表继承这个类 new 接口名(){} : 代表实现这个接口 结论 : 可以让代码变得更加简洁, 在定义类的时候对其进行实例化
22.Lambda表达式 : JDK8开始后的一种新语法形式 作用 : 简化匿名内部类的代码写法。 格式 : () -> {} () : 匿名内部类被重写方法的形参列表 {} : 被重写方法的方法体代码
注意:
Lambda表达式, 只允许操作函数式编程接口 : 有, 且仅有一个抽象方法的接口
23.
按钮组件
注意:如果多个组件摆放在同一个位置,后添加的组件,会被压在底部
意注意77
事项注意事项事项注意事项意事项注意事项注意事项注意事项注意事项注意事项注意事项
24.事件是可以被组件识别的操作,当你对组件干了某件操作之后,就会执行对应的代码
事件源:按钮 图片 窗体...
事件操作:鼠标单击,键盘按下了...
绑定监听:当事件源上发生了事件操作,触发执行某段代码
25.设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。
使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性、程序的重用性。
模板设计模式:
把抽象类整体就可以看做成一个模板,模板中不能决定的东西定义成抽象方法,让使用模板的类(继承抽象类的类)去重写抽象方法实现需求
模板设计模式的优势,模板已经定义了通用结构,使用者只需要关心自己需要实现的功能即可