Java 入门必学:final、单例、枚举、抽象类、接口

下面给你一套 Java 入门→进阶核心五大概念全解析:final、单例、枚举、抽象类、接口,不仅讲“是什么”,更讲“为什么这样设计 + 什么时候用” 👇


一、final 关键字(限制与不可变)

✅ 1️⃣ 修饰变量

final int a = 10;
a = 20; // ❌ 报错

👉 含义:值不可改变


✅ 2️⃣ 修饰方法

class A {
    public final void test() {}
}

class B extends A {
    // void test() {} ❌ 不能重写
}

👉 含义:禁止子类重写


✅ 3️⃣ 修饰类

final class A {}
// class B extends A {} ❌

👉 含义:不能被继承


⚠️ 易错点

final int[] arr = {1,2,3};
arr[0] = 10; // ✅ 可以

👉 结论:

final 限制的是“引用不变”,不是“内容不变”


二、单例模式(设计模式核心🔥)

👉 目的:保证一个类只有一个实例


✅ 1️⃣ 饿汉式(简单安全)

class Singleton {
    private static final Singleton instance = new Singleton();

    private Singleton() {}

    public static Singleton getInstance() {
        return instance;
    }
}

👉 优点:线程安全
👉 缺点:可能浪费内存


✅ 2️⃣ 懒汉式(推荐写法🔥)

class Singleton {
    private static volatile Singleton instance;

    private Singleton() {}

    public static Singleton getInstance() {
        if (instance == null) {
            synchronized (Singleton.class) {
                if (instance == null) {
                    instance = new Singleton();
                }
            }
        }
        return instance;
    }
}

👉 关键点:

  • volatile 防止指令重排
  • 双重检查锁(DCL)

✅ 3️⃣ 最推荐:静态内部类(优雅🔥)

class Singleton {

    private Singleton() {}

    private static class Holder {
        private static final Singleton INSTANCE = new Singleton();
    }

    public static Singleton getInstance() {
        return Holder.INSTANCE;
    }
}

👉 优点:

  • 线程安全
  • 懒加载
  • 无锁高性能

三、枚举(enum)——比你想的更强大

✅ 基本用法

enum Day {
    MON, TUE, WED
}


✅ 枚举本质

👉 枚举其实是一个类!

Day d = Day.MON;


✅ 高级用法(带属性)

enum Day {
    MON("周一"), TUE("周二");

    private String name;

    Day(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }
}


✅ 枚举的优势

👉 替代:

int status = 1; // ❌ 不安全

👉 推荐:

enum Status { SUCCESS, FAIL }


四、抽象类(抽象模板)

👉 作用:定义“规范 + 部分实现”


✅ 定义

abstract class Animal {

    abstract void eat(); // 抽象方法

    void sleep() {
        System.out.println("睡觉");
    }
}


✅ 子类实现

class Dog extends Animal {
    void eat() {
        System.out.println("吃骨头");
    }
}


⚠️ 特点

  • 不能实例化
  • 可以有普通方法
  • 可以有构造方法

五、接口(Interface)——规范的极致

👉 作用:定义“能力”


✅ 基本写法

interface Flyable {
    void fly();
}


✅ 实现接口

class Bird implements Flyable {
    public void fly() {
        System.out.println("飞行");
    }
}


✅ 新特性(Java 8+)

interface A {
    default void test() {
        System.out.println("默认方法");
    }

    static void hello() {
        System.out.println("静态方法");
    }
}


六、抽象类 vs 接口(核心对比🔥)

对比点抽象类接口
关键字abstract classinterface
方法可有实现默认抽象
变量普通变量public static final
继承单继承多实现
构造方法

七、五者关系总结(精华🔥)

👉 可以这样理解:

  • final → 限制(不能改/不能继承)
  • 单例 → 控制对象数量
  • 枚举 → 固定常量集合(更安全)
  • 抽象类 → “是什么”(is-a)
  • 接口 → “能做什么”(can-do)

八、经典组合(面试常考)

⭐ 枚举实现单例(最优解🔥)

enum Singleton {
    INSTANCE;

    public void doSomething() {
        System.out.println("执行");
    }
}

👉 优点:

  • 线程安全
  • 防反射
  • 防序列化破坏

九、学习路线建议(很重要)

👉 建议掌握顺序:

  1. final(基础)
  2. 接口(最常用)
  3. 抽象类(理解设计)
  4. 枚举(规范代码)
  5. 单例(设计模式)

总结一句话

接口定能力,抽象类做模板,枚举管常量,单例控实例,final保约束


如果你想继续深入,我可以帮你👇
✅ 出一套「面试高频考题(final/接口/单例)」
✅ 或做「设计模式入门(含代码实战)」
✅ 或带你写一个“小项目综合应用这些知识点”

文章已创建 5186

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

相关文章

开始在上面输入您的搜索词,然后按回车进行搜索。按ESC取消。

返回顶部