2023-11-21第08章_面向对象编程(高)
-- ---------------------- 本章概况
-- ---------------------- 课件
-- ---------------------- 随堂复习与企业真题
-- ---------------------- 拓展练习
-- ---------------------- 本章概况
image.png
image.png
image.png
-- ---------------------- 课件
- 关键字:static(1.1 类属性、类方法的设计思想/1.2 static关键字/1.3 静态变量[1.3.4 内存解析]/1.4 静态方法/1.5 练习)
[修饰符] class 类{
[其他修饰符] static 数据类型 变量名;
}
[修饰符] class 类{
[其他修饰符] static 返回值类型 方法名(形参列表){
方法体
}
}
静态方法可以被子类继承,但不能被子类重写。
-
单例(Singleton)设计模式(2.1 设计模式概述/2.2 何为单例模式/2.3 实现思路/2.4.3 饿汉式 vs 懒汉式[lazy]/2.5 单例模式的优点及应用场景)
image.png
class Singleton {
// 1.私有化构造器
private Singleton() {
}
// 2.内部提供一个当前类的实例
// 4.此实例也必须静态化
private static Singleton single;
// 3.提供公共的静态的方法,返回当前类的对象
public static Singleton getInstance() {
if(single == null) {
single = new Singleton();
}
return single;
}
}
线程不安全
- 理解main方法的语法()
![image.png](https://img.haomeiwen.com/i2673147/498eaa7e6272232e.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
- 类的成员之四:代码块(4.1 静态代码块/4.2 非静态代码块/4.3 举例/4.4 小结:实例变量赋值顺序/4.5 练习)
???补 - final关键字(5.1 final的意义/5.2 final的使用/5.3 笔试题)
5.2 final修饰变量 一旦赋值,它的值就不能被修改,即常量,常量名建议使用大写字母。
final 修饰方法 表示这个方法不能被子类重写。
final 修饰类 表示这个类不能被继承,没有子类。提高安全性,提高程序的可读性。
final class Eunuch{//太监类}
- 抽象类与抽象方法(或abstract关键字)(6.1 由来/6.2 语法格式/6.3 使用说明/6.4 注意事项/6.5 应用举例1/6.6 应用举例2:模板方法设计模式(TemplateMethod)/6.7 思考与练习)
[权限修饰符] abstract class 类名{
}
[权限修饰符] abstract class 类名 extends 父类{
}
- 接口(interface)(7.1 类比/7.2 概述/7.3 定义格式/7.4 接口的使用规则/7.5 JDK8中相关冲突问题/7.6 接口的总结与面试题/7.8 练习)
[修饰符] interface 接口名{
//接口的成员列表:
// 公共的静态常量
// 公共的抽象方法
// 公共的默认方法(JDK1.8以上)
// 公共的静态方法(JDK1.8以上)
// 私有方法(JDK1.9以上)
}
【修饰符】 class 实现类 implements 接口{
// 重写接口中抽象方法【必须】,当然如果实现类是抽象类,那么可以不重写
// 重写接口中默认方法【可选】
}
【修饰符】 class 实现类 extends 父类 implements 接口{
// 重写接口中抽象方法【必须】,当然如果实现类是抽象类,那么可以不重写
// 重写接口中默认方法【可选】
}
- 内部类(InnerClass)(8.1 概述/8.2 成员内部类/8.3 局部内部类/8.4 练习)
???补 - 枚举类(9.1 概述/9.2/9.3 定义枚举类(JDK5.0 之后)/9.4 enum中常用方法/9.5 实现接口的枚举类)
public enum Week {
MONDAY,TUESDAY,WEDNESDAY,THURSDAY,FRIDAY,SATURDAY,SUNDAY;
}
- 注解(Annotation)(10.1 注解概述/10.2 常见的Annotation作用/10.3 三个最基本的注解/10.4 元注解/10.5 自定义注解的使用/10.6 JUnit单元测试)
/**
* 程序的主方法,程序的入口
* @param args String[] 命令行参数
*/
@author 标明开发该类模块的作者,多个作者之间使用,分割
@version 标明该类模块的版本
@see 参考转向,也就是相关主题
@since 从哪个版本开始增加的
@param 对方法中某参数的说明,如果没有参数就不能写
@return 对方法返回值的说明,如果方法的返回值类型是void就不能写
@exception 对方法可能抛出的异常进行说明 ,如果方法没有用throws显式抛出的异常就不能写
@Override重写方法
@Deprecated 不推荐使用。
@SuppressWarnings 抑制警告信息
- 包装类(11.1 为什么需要包装类/11.2 有哪些包装类/11.3 自定义包装类/11.4 包装类与基本数据类型间的转换/11.5 基本数据类型、包装类与字符串间的转换/11.6 包装类的其它API/11.7 包装类对象的特点/11.8 练习)
Integer obj = new Integer(4);
int num1 = obj.intValue();
int a = 10;
//String str = a;//错误的
String str = String.valueOf(a);
或者
int a = 10;
String str = a + "";
-- ---------------------- 随堂复习与企业真题
1. 关键字:static
-
static:静态的,随着类的加载而加载、执行。
-
static用来修饰:属性、方法、代码块、内部类
-
熟悉:static修饰的类变量、类方法与不使用static修饰的区别。
- 类变量:类的生命周期内,只有一个。被类的多个实例共享。
-
掌握:我们遇到属性或方法时,需要考虑是否声明为static的。
2. 单例模式(或单子模式)
- 经典的设计模式有23种
- 解决的问题:在整个软件系统中,只存在当前类的唯一实例。
- 实现方式:饿汉式、懒汉式、枚举类等
- 对比饿汉式和懒汉式
- 饿汉式:“立即加载”,线程安全的。
- 懒汉式:"延迟加载",线程不安全。
- 需要会手写饿汉式和懒汉式
3. 理解main()方法
- public static void main(String[] args){}
- 理解1:作为程序的入口;普通的静态方法
- 理解2:如何使用main()与控制台进行数据的交互。
- 命令行:java 类名 "Tom" "Jerry" "123"
4. 类的成员之四:代码块
- 分类:静态代码块、非静态代码块
- 使用频率上来讲:用的比较少。
- 静态代码块:随着类的加载而执行
- 非静态代码块:随着对象的创建而执行
总结:对象的实例变量可以赋值的位置及先后顺序
① 默认初始化
② 显式初始化 或 ⑤ 代码块中初始化
③ 构造器中初始化④ 有了对象以后,通过"对象.属性"或"对象.方法"的方法进行赋值
执行的先后顺序:
① - ②/⑤ - ③ - ④
5. 关键字:final
-
最终的
-
用来修饰:类、方法、变量(成员变量、局部变量)
- 类:不能被继承
- 方法:不能被重写
- 变量:是一个“常量”,一旦赋值不能修改。
6. 关键字:abstract
- 抽象的
- 用来修饰:类、方法
- 类:抽象类:不能实例化。
- 方法:抽象方法:没有方法体,必须由子类实现此方法。
7. 关键字:interface
-
interface:接口,用来定义一组规范、一种标准。
-
掌握:接口中可以声明的结构。
-
属性:使用public static final修饰
-
方法:jdk8之前:只能声明抽象方法,使用public abstract修饰
jdk8中:声明static方法、default方法。 jdk9中:声明private方法。
-
-
笔试题:抽象类、接口的对比。
8. 类的成员之五:内部类
> 成员内部类的理解
> 如何创建成员内部类的实例
> 如何在成员内部类中调用外部类的结构
> 局部内部类的基本使用(关注:如何在方法内创建匿名局部内部类的对象)
9. 枚举类:enum
- 掌握:使用enum关键字定义枚举类即可。
10. 注解:Annotation
- 框架 = 注解 + 反射 + 设计模式
- Java基础阶段:简单。@Override 、 @Deprecated、@SuppressWarnings
- 元注解:对现有的注解进行解释说明。
- @Target:表明可以用来修饰的结构
- @Retation:表明生命周期
- 如何自定义注解。
11. 包装类的使用
- 掌握:基本数据类型对应的包装类都有哪些?
- 掌握:基本数据类型、包装类、String三者之间的转换
- 基本数据类型 <-> 包装类:自动装箱、自动拆箱
- 基本数据类型、包装类 <-> String
- String的valueOf(xxx)
- 包装类的parseXxx(String str)