Java 所有关键字及规范分类

Java 所有关键字及规范分类(含保留字/核心说明)

Java 关键字是编程语言内置的特殊标识符 ,全为小写英文字母,具有固定语法含义,不能作为类名、变量名、方法名等自定义标识符使用 。以下按功能场景+语法属性 规范分类,包含所有有效关键字、未使用保留字,并标注易混淆的特殊值,覆盖Java SE全版本核心关键字,已补充非访问修饰符default

一、基础数据类型关键字(8种+1个无返回值标识)

用于声明Java基本数据类型 (共8种,分4类:整型、浮点型、字符型、布尔型),以及标识方法无返回值的void,是Java数据定义的基础。

  • 整型:byte(字节型)、short(短整型)、int(整型,默认)、long(长整型)
  • 浮点型:float(单精度浮点型)、double(双精度浮点型,默认)
  • 字符型:char(单个Unicode字符)
  • 布尔型:boolean(布尔值,仅true/false
  • 无返回值标识:void(用于方法声明,标识无返回值)

二、流程控制关键字(12个,分3个子类)

用于控制程序的执行流程、分支判断、循环遍历、跳转中断,是实现程序逻辑的核心关键字,分3类更易理解:

1. 条件分支控制

ifelseswitchcasedefaultswitch的默认分支,与非访问修饰符default语义不同)

2. 循环遍历控制

forwhiledo(与while配合构成do-while循环)、for(Java5+增强for循环仍用此关键字)

3. 跳转中断控制

break(跳出循环/switch)、continue(跳过本次循环,进入下一次)、return(方法返回,可带/不带返回值)

三、访问权限修饰符关键字(4个,含无显式关键字的默认权限)

用于修饰类、方法、成员变量、构造器,控制其在不同包/类中的访问范围,是Java封装特性的核心实现,共4种权限(其中默认权限无显式关键字):

  • public:公共权限,所有包/类均可访问
  • protected:受保护权限,本类、同包子类、不同包子类可访问
  • private:私有权限,仅本类可访问
  • 【默认权限】:无任何访问修饰符,仅本包可访问(无对应关键字,需特别注意)

四、非访问修饰符关键字(11个,含模块/高级特性,已补充default)

用于修饰类、方法、变量、代码块 ,赋予其特殊语法特性(如静态、最终、抽象等),不控制访问范围,仅修饰行为/属性,含Java8+、Java9+新增特性相关修饰符,注意与switch中的default区分,二者为不同语义的关键字
static(静态)、final(最终,不可修改)、abstract(抽象)、synchronized(同步,线程安全)、native(原生,调用本地方法库)、strictfp(严格浮点,统一浮点计算规则)、transient(瞬态,序列化时忽略)、volatile(易变,保证变量可见性,禁止指令重排)、default(接口默认方法,Java8+,仅接口中使用)、exports(模块导出,Java9+)、requires(模块依赖,Java9+)

五、类与对象核心关键字(13个,面向对象基础)

用于类、接口、枚举、注解 的定义、继承、实现,以及包管理、对象实例判断,是Java面向对象(OOP)特性的核心关键字:
class(定义普通类)、interface(定义接口)、enum(定义枚举类,Java5+)、@interface(定义注解,Java5+,语法关键字)、extends(类继承/接口泛型限定)、implements(类实现接口)、package(定义包,用于类隔离)、import(导入包/类,简化类名)、this(当前对象实例引用)、super(父类对象/构造器引用)、instanceof(判断对象是否为指定类/接口的实例)、new(创建对象实例,调用构造器)、module(定义模块,Java9+)


【面向对象关键字深度扩展】

(在原有基础上补充核心关键字的用法、场景、版本特性及代码示例,含default修饰符相关扩展)

1. class(类定义)
  • 核心作用:定义普通类、抽象类、最终类,也是内部类的基础。
  • 扩展场景
    • 普通类:最基础的对象模板,包含属性与方法。

    • 抽象类 :用 abstract class 修饰,包含抽象方法(无实现),强制子类重写,用于提取公共抽象逻辑。

    • 最终类 :用 final class 修饰,不能被继承(如 JDK 中的 StringInteger),保证类的不可变性。

    • 内部类 :分为4种,用于实现更细粒度的封装

      java 复制代码
      // 成员内部类:依赖外部类实例,可访问外部类所有成员
      public class Outer {
          private String name = "Outer";
          public class Inner {
              public void show() { System.out.println(name); }
          }
      }
      
      // 静态内部类:不依赖外部类实例,仅能访问外部类静态成员
      public class Outer {
          private static String name = "Static Outer";
          public static class Inner {
              public void show() { System.out.println(name); }
          }
      }
      
      // 局部内部类:定义在方法/代码块内,作用域仅限当前块
      public class Outer {
          public void method() {
              class LocalClass {
                  public void show() { System.out.println("局部内部类"); }
              }
              new LocalClass().show();
          }
      }
      
      // 匿名内部类:无类名,直接实现接口/继承类,用于一次性场景
      new Runnable() {
          @Override
          public void run() { System.out.println("匿名内部类"); }
      }.run();
2. interface(接口定义)
  • 核心作用:定义抽象契约,支持多实现,是多态的核心载体。

  • 版本扩展

    • Java 8+:支持 default(默认方法,带实现,子类可重写)和 static(静态方法,类级别的)。
    • Java 9+:支持 private(私有方法,用于接口内部代码复用)。
  • 示例

    java 复制代码
    public interface Animal {
        // 抽象方法(默认public abstract)
        void eat();
    
        // Java8+ 默认方法(非访问修饰符default核心用法)
        default void sleep() { System.out.println("动物睡觉"); }
    
        // Java8+ 静态方法
        static void breathe() { System.out.println("动物呼吸"); }
    
        // Java9+ 私有方法
        private void clean() { System.out.println("清理毛发"); }
    }
0)、抽象类与接口 深度对比表
No. 区别点 抽象类(abstract class 接口(interface
1 定义本质 事物的模板式抽象,体现「is-a」继承关系,是包含抽象方法的类,允许同时包含具体实现 行为的契约式抽象,体现「has-a/can-do」能力关系,是抽象方法与常量的集合(JDK8+后支持默认方法、静态方法)
2 组成细节 * 构造方法:存在,用于初始化父类成员,子类构造器会隐式调用 * 抽象方法abstract修饰,无方法体,子类必须重写(除非子类也是抽象类) * 普通方法:允许有带方法体的实例方法、静态方法 * 成员变量 :支持实例变量(默认default权限)、静态变量、常量(final) * 代码块:允许静态代码块、实例代码块 * 构造方法:无(接口不能实例化,无实例成员需要初始化) * 抽象方法 :JDK8前默认public abstract;JDK8+可包含default(默认方法,带实现)、static(静态方法)、private(私有方法,JDK9+,用于内部复用) * 成员变量 :默认public static final修饰,必须初始化 * 代码块:无实例/静态代码块
3 使用方式 子类通过extends继承,单继承局限(一个子类只能继承一个抽象类);子类必须重写所有抽象方法(否则子类需声明为抽象类) 子类通过implements实现,多实现支持(一个类可实现多个接口);必须重写所有抽象方法(JDK8+默认方法可选择重写)
4 类与接口的关系 可以实现多个接口(implements),弥补单继承的灵活性不足 不能继承抽象类,但可以多继承其他接口extends),组合多个行为契约
5 常见设计模式 * 模板方法模式(定义算法骨架,子类实现可变步骤,如Spring的AbstractApplicationContext) * 回调模式(抽象类作为回调逻辑的父类) * 简单工厂/工厂方法/代理模式(接口作为代理与真实对象的契约) * 策略模式(接口定义策略行为) * 适配器模式(接口适配不同实现)
6 对象实例化 不能直接实例化,需子类继承后实例化子类,通过继承多态(父类引用指向子类对象)使用 不能直接实例化,需类实现后实例化实现类,或通过匿名内部类new 接口(){...})快速实例化
7 局限 单继承局限(子类只能继承一个抽象类,限制代码复用的灵活性);耦合度较高(继承关系强绑定) JDK8前仅能定义抽象方法,扩展性弱(JDK8+默认方法已改善);接口契约过多时易导致"接口污染"
8 实际作用 作为模板封装通用逻辑,定义规范同时提供部分实现(如工具类抽象父类、框架基类) 作为标准/能力标识 ,定义行为契约解耦代码(如Runnable标识可执行能力、Serializable标识可序列化能力)
9 选择原则 * 优先用接口:避免单继承局限、降低耦合、支持多能力组合 * 用抽象类:需复用代码、提供模板逻辑、依赖构造器/实例变量的场景 * 优先用接口:定义行为契约、实现多态解耦、适配多场景扩展 * 用抽象类:需保留状态、提供通用实现的场景
10 成员默认修饰符 成员变量默认default(包访问权限),方法默认default(可自定义为private/protected/public,抽象方法不能为private 成员变量默认public static final,抽象方法默认public abstract;默认方法public default,静态方法public static
11 JDK版本演进 自JDK1.0存在,语法稳定,无重大新增特性 JDK8新增default/static方法;JDK9新增private方法;JDK16新增密封接口sealed),限制实现类范围

1)、抽象类代码示例(模板方法模式)

抽象类适合封装通用模板逻辑,固定流程步骤,仅让子类实现可变部分。

java 复制代码
// 抽象类:定义支付流程的模板
abstract class AbstractPayment {
    // 模板方法:固定支付流程(校验→扣款→通知)
    public final void pay(double amount) {
        // 1. 通用校验逻辑(固定步骤)
        if (validateAmount(amount)) {
            // 2. 扣款逻辑(可变步骤,子类实现)
            boolean result = deduct(amount);
            // 3. 通用通知逻辑(固定步骤)
            sendNotification(result, amount);
        } else {
            System.out.println("支付金额校验失败");
        }
    }

    // 通用校验方法(具体实现)
    private boolean validateAmount(double amount) {
        return amount > 0;
    }

    // 抽象方法:扣款逻辑(子类必须实现)
    protected abstract boolean deduct(double amount);

    // 通用通知方法(具体实现)
    private void sendNotification(boolean success, double amount) {
        if (success) {
            System.out.println("支付" + amount + "元成功,已发送通知");
        } else {
            System.out.println("支付" + amount + "元失败,已发送通知");
        }
    }
}

// 子类:支付宝支付实现
class AlipayPayment extends AbstractPayment {
    @Override
    protected boolean deduct(double amount) {
        System.out.println("支付宝扣款" + amount + "元");
        return true;
    }
}

// 子类:微信支付实现
class WechatPayment extends AbstractPayment {
    @Override
    protected boolean deduct(double amount) {
        System.out.println("微信扣款" + amount + "元");
        return true;
    }
}

// 测试类
public class AbstractClassDemo {
    public static void main(String[] args) {
        AbstractPayment alipay = new AlipayPayment();
        alipay.pay(100.0); // 执行完整支付流程

        AbstractPayment wechat = new WechatPayment();
        wechat.pay(50.0);
    }
}

2)、接口代码示例(策略模式/行为契约)

接口适合定义行为契约,仅约定方法签名,不关注实现,支持多实现解耦。

java 复制代码
// 接口:支付渠道契约
interface PaymentChannel {
    // 抽象方法:支付行为(默认public abstract)
    boolean pay(double amount);

    // JDK8+ 默认方法:通用日志逻辑(可选重写)
    default void logPayment(double amount) {
        System.out.println("记录支付日志:金额" + amount + "元");
    }

    // JDK8+ 静态方法:工具方法
    static boolean checkChannelStatus() {
        System.out.println("检查支付渠道状态正常");
        return true;
    }
}

// 实现类:支付宝渠道
class AlipayChannel implements PaymentChannel {
    @Override
    public boolean pay(double amount) {
        System.out.println("支付宝渠道支付" + amount + "元");
        return true;
    }

    // 可选重写默认方法
    @Override
    public void logPayment(double amount) {
        System.out.println("支付宝专属日志:支付" + amount + "元");
    }
}

// 实现类:微信渠道
class WechatChannel implements PaymentChannel {
    @Override
    public boolean pay(double amount) {
        System.out.println("微信渠道支付" + amount + "元");
        return true;
    }
}

// 测试类
public class InterfaceDemo {
    public static void main(String[] args) {
        // 检查渠道状态(静态方法直接调用)
        PaymentChannel.checkChannelStatus();

        PaymentChannel alipay = new AlipayChannel();
        alipay.pay(100.0);
        alipay.logPayment(100.0);

        PaymentChannel wechat = new WechatChannel();
        wechat.pay(50.0);
        wechat.logPayment(50.0);
    }
}

3)、代码层面核心差异对比
特性 抽象类示例体现 接口示例体现
继承方式 extends单继承(一个类只能继承一个抽象类) implements多实现(一个类可实现多个接口)
成员修饰符 方法可设为private/protected/public,变量默认default权限 方法默认public,变量默认public static final(必须初始化)
构造方法 抽象类有构造方法(用于初始化父类成员) 接口无构造方法(不能实例化)
代码复用 提供通用实现(如validateAmountsendNotification),子类复用模板 仅定义契约,实现类需自行编写完整逻辑(默认方法可提供基础实现)
设计意图 体现「is-a」继承关系(如AlipayPaymentAbstractPayment的一种) 体现「can-do」能力关系(如AlipayChannel具备PaymentChannel的能力)

3. enum(枚举定义)
  • 核心作用 :定义枚举类,本质是继承 java.lang.Enum 的 final 类,用于表示固定的有限值集合(如性别、状态码)。

  • 扩展特性

    • 枚举常量自带 values()valueOf() 方法。
    • 可实现接口、定义构造器与成员方法。
  • 示例

    java 复制代码
    public enum Gender implements Serializable {
        MALE("男"), FEMALE("女");
    
        private final String desc;
        // 私有构造器(枚举构造器默认私有)
        Gender(String desc) { this.desc = desc; }
    
        public String getDesc() { return desc; }
    }
4. @interface(注解定义)
  • 核心作用:定义注解(Annotation),是元编程的基础,用于给代码添加元数据。

  • 扩展场景 :配合元注解(@Target@Retention@Documented@Inherited)使用,控制注解的作用范围与生命周期。

  • 示例

    java 复制代码
    @Target(ElementType.METHOD) // 仅能作用于方法
    @Retention(RetentionPolicy.RUNTIME) // 运行时保留
    public @interface Log {
        String value() default "操作日志"; // 此处为注解属性默认值,非关键字default
    }
5. record(Java 16+ 新增,数据载体定义)
  • 核心作用 :定义不可变数据载体(Data Carrier),自动生成 equals()hashCode()toString() 及全参构造器,简化 POJO 编写。

  • 示例

    java 复制代码
    public record User(Long id, String name, Integer age) {}
    // 自动生成构造器、getter、equals、hashCode、toString
6. extends(继承/泛型限定)
  • 核心作用:类的单继承、接口的多继承、泛型上界限定。

  • 关键限制

    • 类只能单继承(避免菱形继承问题),但可以实现多个接口。
    • 枚举类默认继承 java.lang.Enum,因此不能再继承其他类。
    • 接口可以多继承 (用 extends 关联多个父接口)。
  • 示例

    java 复制代码
    // 类单继承
    public class Cat extends Animal {}
    
    // 接口多继承
    public interface Flyable extends Animal, Movable {}
    
    // 泛型上界限定
    public <T extends Number> double sum(T a, T b) {
        return a.doubleValue() + b.doubleValue();
    }
7. implements(接口实现)
  • 核心作用:类实现接口,是多态的主要实现方式。

  • 扩展特性 :一个类可以同时实现多个接口,解决了类单继承的限制;实现接口时,可重写default方法,也可直接使用默认实现。

  • 示例

    java 复制代码
    // 类实现多个接口,重写default方法
    public class Bird implements Animal, Flyable {
        @Override
        public void eat() { System.out.println("鸟吃虫子"); }
    
        // 重写接口的default方法
        @Override
        public void sleep() { System.out.println("鸟站在树枝上睡觉"); }
    
        @Override
        public void fly() { System.out.println("鸟飞行"); }
    }
8. package(包声明)
  • 核心作用:声明类所属的包,用于隔离类名空间,避免类名冲突。
  • 命名规范 :采用反向域名(如 com.example.demo),全小写。
9. import(包导入)
  • 核心作用:导入其他包的类/接口,简化代码编写。
  • 扩展场景
    • 普通导入:import java.util.List;

    • 静态导入(Java 5+):导入类的静态成员(方法/变量),直接使用无需类名。

      java 复制代码
      import static java.lang.Math.PI;
      import static java.lang.Math.sqrt;
      public class Demo {
          public static void main(String[] args) {
              System.out.println(PI); // 直接使用静态变量
              System.out.println(sqrt(4)); // 直接使用静态方法
          }
      }
    • 通配符导入:import java.util.*;(不推荐,易引发类名冲突)

10. this(当前对象引用)
  • 核心作用 :代表当前对象的引用,用于

    • 区分同名的成员变量与局部变量(this.name = name)。
    • 调用当前类的其他构造器(this() 必须是构造器的第一句)。
    • 作为方法返回值(链式调用)。
  • 示例

    java 复制代码
    public class Person {
        private String name;
        public Person() { this("默认名称"); } // 调用带参构造器
        public Person(String name) { this.name = name; } // 区分同名变量
        public Person setName(String name) {
            this.name = name;
            return this; // 链式调用
        }
    }
11. super(父对象引用)
  • 核心作用 :代表父类对象的引用,用于

    • 调用父类的构造器(super() 必须是构造器的第一句,默认隐式调用父类无参构造器)。
    • 访问父类的成员(解决子类与父类成员重名的问题)。
  • 示例

    java 复制代码
    public class Cat extends Animal {
        public Cat() { super("猫"); } // 调用父类带参构造器
        @Override
        public void eat() {
            super.eat(); // 调用父类的eat方法
            System.out.println("猫吃鱼");
        }
    }
12. new(实例化)
  • 核心作用:创建对象实例、匿名内部类、数组。
  • 扩展场景
    • 普通对象:new Person();
    • 匿名内部类:new Runnable() { ... }
    • 数组:new int[5];
13. instanceof(类型判断)
  • 核心作用:判断对象是否为指定类/接口的实例,是多态类型判断的核心。

  • 版本扩展 :Java 16+ 支持模式匹配,直接将对象转型为目标类型,无需强制转换。

  • 示例

    java 复制代码
    // 传统用法
    if (obj instanceof String) {
        String s = (String) obj;
        System.out.println(s.length());
    }
    
    // Java16+ 模式匹配
    if (obj instanceof String s) {
        System.out.println(s.length()); // 直接使用s,无需强制转换
    }

六、异常处理关键字(5个)

专门用于Java异常的捕获、处理、抛出 ,实现程序的异常容错机制,分为异常捕获、异常抛出两类:
try(尝试执行可能抛出异常的代码)、catch(捕获指定类型的异常并处理)、finally(无论是否捕获异常,最终必执行的代码块)、throw(手动抛出单个异常对象)、throws(声明方法可能抛出的异常类型)

七、泛型相关关键字(2个+约定类型参数)

用于Java泛型编程(Java5+),实现类型参数化,解决类型安全问题,核心为泛型限定关键字,另含约定俗成的类型参数(非关键字,仅规范):

  • 核心关键字:extends(泛型上界限定,限制类型为指定类的子类/接口实现类)、super(泛型下界限定,限制类型为指定类的父类)
  • 【注意】:E/T/K/V/N/S/U等为泛型类型参数约定 (非关键字),仅为编程规范,可自定义,如List<String>中的String是实际类型参数。

八、模块化关键字(4个,Java9+新增)

用于Java模块系统 (Module System),实现代码的模块化隔离、依赖管理、资源导出,是Java9+的核心特性,均为新增关键字:
module(定义模块)、opens(模块开放包,允许反射访问)、exports(模块导出包,允许外部访问)、requires(模块依赖,声明依赖其他模块)

九、未使用的保留字(2个,不可作为标识符)

Java保留但从未在任何版本中使用 的关键字,语法上仍被认定为关键字,不能作为自定义标识符 ,未来可能被启用:
const(原本用于定义常量,Java中用final替代)、goto(原本用于无条件跳转,Java中禁止使用,避免程序流程混乱)

十、易混淆的「非关键字特殊值」(3个,可间接使用)

不是Java关键字 ,但为Java内置的字面量/特殊值,具有固定含义,虽不建议作为标识符,但语法上未严格禁止(实际开发中绝对不要使用),需与关键字严格区分:
true(布尔型字面量,真)、false(布尔型字面量,假)、null(引用类型字面量,空引用)

核心总结

  1. 关键字特性:全小写、固定含义、不可自定义使用,是Java语法的基础组成;
  2. 修饰符分类:分访问权限修饰符 (控制范围)和非访问修饰符 (修饰特性),二者可组合使用(如public static final),非访问修饰符default仅在接口中使用,与switch的default为同名不同义关键字
  3. 版本差异:模块化关键字(module/opens等)为Java9+新增,default(接口默认方法)、泛型、枚举、注解关键字(enum/@interface等)为Java5+/Java8+新增;
  4. 关键区分:true/false/null字面量 而非关键字,const/goto保留字 未实际使用,均不可作为自定义标识符;注解中default为属性默认值标识,非关键字用法。

Java关键字全表(按字母顺序,共51个有效+2个保留,已补充default)

abstract、assert、boolean、break、byte、case、catch、char、class、const(保留)、continue、default、do、double、else、enum、extends、final、finally、float、for、if、implements、import、instanceof、int、interface、long、native、new、null(字面量)、package、private、protected、public、return、short、static、strictfp、super、switch、synchronized、this、throw、throws、transient、try、void、volatile、while、goto(保留)、true(字面量)、false(字面量)

(注:括号内为特殊标识,实际有效关键字49个,2个保留字,3个非关键字特殊值;default为双语义关键字,含非访问修饰符、switch分支两种用法)

相关推荐
Python 老手2 小时前
Python while 循环 极简核心讲解
java·python·算法
java1234_小锋2 小时前
Java高频面试题:MyISAM索引与InnoDB索引的区别?
java·开发语言
2501_944525542 小时前
Flutter for OpenHarmony 个人理财管理App实战 - 支出分析页面
android·开发语言·前端·javascript·flutter
Mr_Xuhhh2 小时前
MySQL函数详解:日期、字符串、数学及其他常用函数
java·数据库·sql
qq_417129252 小时前
C++中的桥接模式变体
开发语言·c++·算法
开源技术2 小时前
如何将本地LLM模型与Ollama和Python集成
开发语言·python
Hello World . .3 小时前
数据结构:队列
c语言·开发语言·数据结构·vim
clever1013 小时前
在QtCreator 4.10.2中调试qt程序qDebug()输出中文为乱码问题的解决
开发语言·qt
测试开发Kevin3 小时前
小tip:换行符CRLF 和 LF 的区别以及二者在实际项目中的影响
java·开发语言·python