CodeRoadMap
首页路线题库资源库文章社区
CodeRoadMap

程序员的学习成长路线图。内容免费开放,登录后可同步路线图与课时进度。

由 程序员柏风 独立维护 · 关于作者

学习

  • 路线图
  • 课程
  • 面试题
  • 文章
  • 我

更多

  • 资源
  • 社区
  • 关于作者
  • 内容说明

© 2026 CodeRoadMap

津ICP备2026012044号-1·津公网安备12011002026155号·coderoadmap@126.com
Java 核心深化/课时/类与对象
RawBlame
课时目录12 节

Java 核心深化

  1. 01Java 核心地图
  2. 02类型与变量
  3. 03控制流
  4. 04类与对象
  5. 05抽象与接口
  6. 06集合框架
  7. 07Lambda 与 Stream
  8. 08并发基础
  9. 09I/O 与 NIO
  10. 10构建工具
  11. 11测试与 JUnit
  12. 12综合练习

类与对象

classes、access-specifiers、static、final。

35 分钟

类与对象

java-oop 已引入类与构造器——本课聚焦 访问修饰符、static、final 与对象初始化顺序,写出边界清晰的领域类。

学习目标

  • 用 public/protected/default/private 表达 API 边界
  • 区分实例成员与 static 成员的使用场景
  • 用 final 表达不可变字段与不可覆盖方法

访问修饰符

public class Lesson {
    private final String slug;
    private String title;
    String summary;              // 包私有:同包可见
    protected int orderIndex;    // 子类可见

    public Lesson(String slug) {
        this.slug = Objects.requireNonNull(slug);
    }

    public String slug() { return slug; }
}
修饰符类成员
public任意包任意包
protected同包+子类同包+子类
default同包同包
private仅本类仅本类

原则:字段尽量 private,通过方法暴露行为(见 jva-oop 封装进阶)。

static 与 final

public class TrackCatalog {
    private static final Logger LOG = Logger.getLogger(TrackCatalog.class);
    private static int instanceCount = 0;

    private final String trackSlug;
    private final List<Lesson> lessons = new ArrayList<>();

    public TrackCatalog(String trackSlug) {
        this.trackSlug = trackSlug;
        instanceCount++;
    }

    public static int instanceCount() {
        return instanceCount;
    }
}
  • static:属于类,不依赖实例;常量、工厂方法、计数器
  • final 字段:构造后不可重新赋值 → 配合构造器注入
  • final 方法:子类不可覆盖(类非 final 时)
  • final 类:不可继承,如 String

初始化顺序

静态字段/静态块(类首次加载,一次)
  → 实例字段 / 实例初始化块
  → 构造器
public class Demo {
    private final int x = initX();
    private int initX() { return 42; }
}

练习

  • 写一个 Track 类:slug 为 final,lessons 为 private List,提供只读 视图
lessons()
  • 用 static 方法 Track.of(slug) 作简单工厂
  • 解释为何 public static void main 必须是 static
  • 小结

    private 守状态,static 管类级资源,final 锁不可变。 下一课抽象类、接口与嵌套类。

    加载本节练习…
    ← 上一课控制流下一课 →抽象与接口