Day05_关键字【Static、this、super】

本文详细介绍了Java中的Static关键字使用方法,包括Static修饰成员变量、方法及静态代码块的应用场景和注意事项,并对比了super和this关键字的用法。

1.Static关键字

在这里插入图片描述

1.当static修饰成员变量时

如果一个成员变量使用了static关键字,那么这个变量不再属于对象自己,而是属于所在的类。多个对象共享同一份数据。

public class Student {

    private int id; // 学号
    private String name; // 姓名
    private int age; // 年龄
    static String room; // 所在教室
    private static int idCounter = 0; // 学号计数器,每当new了一个新对象的时候,计数器++

    public Student() {
        this.id = ++idCounter;
    }

    public Student(String name, int age) {
        this.name = name;
        this.age = age;
        this.id = ++idCounter;
    }
    
    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}


public class Demo01StaticField {

    public static void main(String[] args) {

        Student two = new Student("黄蓉", 16);
        two.room = "101教室";
        System.out.println("姓名:" + two.getName()
                + ",年龄:" + two.getAge() + ",教室:" + two.room
                + ",学号:" + two.getId());

        Student one = new Student("郭靖", 19);
        System.out.println("姓名:" + one.getName()
                + ",年龄:" + one.getAge() + ",教室:" + one.room
                + ",学号:" + one.getId());
    }

}
2.当static修饰方法时
一旦使用static修饰成员方法,那么这就成为了静态方法。静态方法不属于对象,而是属于类的。

如果没有static关键字,那么必须首先创建对象,然后通过对象才能使用它。(MyClass obj = new MyClass(); obj.method();)
如果有了static关键字,那么不需要创建对象,直接就能通过类名称来使用它。(MyClass.methodStatic();)

无论是成员变量,还是成员方法。如果有了static,都推荐使用类名称进行调用。这样可读性行好,别人一看就知道它是静态的。
静态变量:类名称.静态变量
静态方法:类名称.静态方法()

注意事项:
1. 静态不能直接访问非静态。
原因:因为在内存当中是【先】有的静态内容,【后】有的非静态内容。
“先人不知道后人,但是后人知道先人。”
2. 静态方法当中不能用this。
原因:this代表当前对象,通过谁调用的方法,谁就是当前对象。
public class MyClass {

    int num; // 成员变量
    static int numStatic; // 静态变量

    // 成员方法
    public void method() {
        System.out.println("这是一个成员方法。");
        // 成员方法可以访问成员变量
        System.out.println(num);
        // 成员方法可以访问静态变量
        System.out.println(numStatic);
    }

    // 静态方法
    public static void methodStatic() {
        System.out.println("这是一个静态方法。");
        // 静态方法可以访问静态变量
        System.out.println(numStatic);
        // 静态不能直接访问非静态【重点】
//        System.out.println(num); // 错误写法!

        // 静态方法中不能使用this关键字。
//        System.out.println(this); // 错误写法!
    }

}


public class Demo02StaticMethod {

    public static void main(String[] args) {
        
        MyClass obj = new MyClass(); 
        obj.method();// 首先创建对象,然后才能使用没有static关键字的内容

        // 对于静态方法来说,可以通过对象名进行调用,也可以直接通过类名称来调用。
        obj.methodStatic(); // 正确,不推荐
        MyClass.methodStatic(); // 正确,推荐,你一这样写所有人都知道methodStatic是一个静态方法

        // 对于本类当中的静态方法,可以省略类名称
        myMethod();//他就等价于Demo02StaticMethod.myMethod();
    }

    public static void myMethod() {
        System.out.println("自己的方法!");
    }

}
3.静态代码块的优先执行
静态内容总是优先于非静态,所以静态代码块比构造方法先执行。

静态代码块的典型用途:
当第一次用到本类时,本类中的静态代码块执行唯一的一次,一次性地对静态成员变量进行赋值。
public class Person {

    static {
        System.out.println("静态代码块执行!");
    }

    public Person() {
        System.out.println("构造方法执行!");
    }

}


public class Demo04Static {

    public static void main(String[] args) {
        Person one = new Person();
        Person two = new Person();
        //每次new一个对象就肯定立刻生成并执行该对象的构造方法,但静态方法比构造方法还要优先执行
    }

}

2.super关键字

1.子类一定会调用父类的无参数构造方法(如果父类只有有参数的构造方法子类就不调用了)
子类构造方法当中有一个默认隐含的“super()”调用,所以一定是先调用的父类构造,后执行的子类构造。
而且super的父类构造调用,必须是子类构造方法的第一个语句。

public class Fu {
    public Fu() {
        System.out.println("父类的无参数构造方法!");
    }
}

public class Zi extends Fu {
    public Zi() {
        super(); // 不管你写不写这行代码,系统都默认给你带上了
        System.out.println("子类构造方法!");
    }
}

public class Demo01Constructor {
    public static void main(String[] args) {
        Zi zi = new Zi();
    }
}

输出:
父类的无参数构造方法!
子类构造方法!

2.子类必须调用父类构造方法,不写则赠送super();写了则用写的指定的super调用,super只能有一个,还必须是第一个。

public class Fu {
    public Fu(int num) {
        System.out.println("父类的有参数构造方法!");
    }
}

public class Zi extends Fu {
    public Zi() {
        super(); // 不管你写不写这行代码,系统都默认给你带上了
        System.out.println("子类构造方法!");
    }
}

public class Demo01Constructor {
    public static void main(String[] args) {
        Zi zi = new Zi();
    }
}

会报错,当你在子类不写super()时系统默认给你赠送了一个super()来继承父类**无参数的**构造方法,而父类只有一个**有参数**的构造方法,而你子类没有写有参数的构造方法。你改错的方法就是自己写一个super(10)来抵消掉系统给你的super()

3.super关键字的用法有三种:

  • 在子类的成员方法中,访问父类的成员变量。
  • 在子类的成员方法中,访问父类的成员方法。
  • 在子类的构造方法中,访问父类的构造方法。
public class Zi extends Fu {

    @Override
    public void method() {
        super.method(); // 在子类的成员方法中,访问父类的成员方法。
        System.out.println("子类方法");
    }

3.this关键字

this关键字用来访问本类内容。用法也有三种:

1. 在本类的成员方法中,访问本类的成员变量。
2. 在本类的成员方法中,访问本类的另一个成员方法。
3. 在本类的构造方法中,访问本类的另一个构造方法。
在第三种用法当中要注意:
A. this(...)调用也必须是构造方法的第一个语句,唯一一个。
B. superthis两种构造调用,不能同时使用。
  1. 在本类的成员方法中,访问本类的成员变量。
局部变量:         直接写成员变量名
本类的成员变量:    this.成员变量名
父类的成员变量:    super.成员变量名
public class Zi extends Fu {

    int num = 20;

    public void method() {
        int num = 30;
        System.out.println(num); // 30,局部变量
        System.out.println(this.num); // 20,本类的成员变量
        System.out.println(super.num); // 10,父类的成员变量
    }
}
  1. 在本类的成员方法中,访问本类的另一个成员方法。
public class Zi extends Fu {

    public void methodA() {
        System.out.println("AAA");
    }

    public void methodB() {
        this.methodA(); //在本类的成员方法中,访问本类的另一个成员方法。
        System.out.println("BBB");
    }

}
  1. 在本类的构造方法中,访问本类的另一个构造方法。
    在第三种用法当中要注意:
    A. this(…)调用也必须是构造方法的第一个语句,唯一一个。
    B. super和this两种构造调用,不能同时使用。
public class Zi extends Fu {

    public Zi() {
        this(123); // 本类的无参构造,调用本类的有参构造
    }

    public Zi(int n) {
        this(1, 2); //在本类的构造方法中,访问本类的另一个构造方法。
    }
    
    public Zi(int n, int m) {
    
    }
}
public class Zi extends Fu {

    public Zi() {
        super(); // 错误,super和this不能同时使用,因为 this(...)调用必须是构造方法的第一个语句,super(...)调用也必须是构造方法的第一个语句,到底谁是第一个?
        this(123); // 本类的无参构造,调用本类的有参构造
    }

    public Zi(int n) {
        this(1, 2);
    }

    public Zi(int n, int m) {
    }
}

欢迎纠错和指导,感谢浏览和收藏

<think>我们被要求解释Java中所有的关键字及其含义。根据引用[1]引用[2],Java关键字是预定义的保留字,具有特殊含义,不能用作标识符(如变量名、方法名等)。我们将按照引用[2]的分类方式,并补充完整当前Java版本(如Java 17)的关键字。 注意:Java关键字列表随着版本更新可能有所变化。以下基于Java 17的标准关键字(共67个)进行分类解释。 分类如下(参考引用[2]并调整): 1. 定义数据类型的关键字(12个) 2. 流程控制关键字(12个) 3. 方法、类、变量的修饰关键字(15个) 4. 异常处理关键字(6个) 5. 对象相关关键字(7个) 6. 字面常量关键字(3个) 7. 方法相关关键字(2个) 8. 包相关关键字(2个) 9. 其他(8个) 下面详细列出: 1. **定义数据类型的关键字(12个)** - `byte`:8位有符号整数类型。 - `short`:16位有符号整数类型。 - `int`:32位有符号整数类型。 - `long`:64位有符号整数类型。 - `float`:单精度32位浮点数类型。 - `double`:双精度64位浮点数类型。 - `char`:16位Unicode字符类型。 - `boolean`:布尔类型,只有`true``false`两个值。 - `class`:声明一个类。 - `interface`:声明一个接口。 - `enum`:声明一个枚举类型(从Java 5引入)。 - `void`:表示方法不返回任何值。 2. **流程控制关键字(12个)** - `if`:条件语句。 - `else`:与`if`一起使用的条件语句。 - `switch`:多分支选择语句。 - `case`:在`switch`中定义分支。 - `default`:在`switch`中定义默认分支,或接口中的默认方法(Java 8引入)。 - `for`:循环语句。 - `while`:循环语句。 - `do`:与`while`一起使用的循环语句(执行后判断)。 - `break`:跳出循环或`switch`语句。 - `continue`:跳过当前循环的剩余部分,进入下一次循环。 - `return`:从方法中返回值(或结束方法)。 - `yield`:在`switch`表达式中产生一个值(Java 14引入)。 3. **方法、类、变量的修饰关键字(15个)** - `public`:访问修饰符,表示公开的,任何类都可访问。 - `private`:访问修饰符,表示私有的,只有本类可访问。 - `protected`:访问修饰符,表示受保护的,本包内子类可访问。 - `static`:表示静态的,属于类而不属于实例。 - `final`:表示不可改变的(类不能被继承,方法不能被覆盖,变量为常量)。 - `abstract`:抽象的,表示类不能实例化,或方法必须由子类实现。 - `synchronized`:表示方法或代码块是同步的,用于多线程。 - `native`:表示方法由本地代码(如C/C++)实现。 - `transient`:表示变量不参与序列化。 - `volatile`:表示变量可能被多个线程修改,确保可见性。 - `strictfp`:表示使用严格的浮点计算规则。 - `sealed`:表示类或接口是密封的,只允许指定的类继承(Java 17引入)。 - `non-sealed`:表示类或接口是非密封的,允许任意类继承(Java 17引入)。 - `permits`:在密封类中指定允许的子类(Java 17引入)。 - `record`:声明一个不可变的数据载体类(Java 16引入)。 4. **异常处理关键字(6个)** - `try`:尝试执行可能抛出异常的代码块。 - `catch`:捕获并处理异常。 - `finally`:无论是否发生异常都会执行的代码块。 - `throw`:抛出一个异常实例。 - `throws`:在方法声明中指明可能抛出的异常。 - `assert`:断言,用于调试(通常不用于生产环境)。 5. **对象相关关键字(7个)** - `new`:创建新对象。 - `this`:表示当前对象。 - `super`:表示父类对象。 - `instanceof`:检查对象是否是特定类的实例。 - `extends`:表示类继承另一个类。 - `implements`:表示类实现一个或多个接口。 - `var`:局部变量类型推断(Java 10引入,但`var`不是关键字,而是保留类型名)。 注意:`var`不是关键字,而是保留类型名,因此这里不列在关键字中。但为了完整性,我们在此说明。 6. **字面常量关键字(3个)** - `true`:布尔值真。 - `false`:布尔值假。 - `null`:表示空引用。 7. **方法相关关键字(2个)** - `void`:已经归入数据类型中,这里不再重复。 - 实际上,引用[2]中的方法相关关键字只有两个,但我们重新审视,发现可以归并。这里我们参考引用[2]列出: - `return`:已经归入流程控制。 - `void`:已经归入数据类型。 因此,我们调整分类,将方法相关关键字归并到其他类别。但为了符合引用[2]的分类,我们保留此分类,并列出: - `return`:从方法中返回。 - `void`:无返回值的方法。 但这两个已经出现在其他分类中。所以,我们不再单独列出。 8. **包相关关键字(2个)** - `package`:定义包。 - `import`:导入包或类。 9. **其他(8个)** - `const`:保留关键字,但未使用(在Java中,使用`final`定义常量)。 - `goto`:保留关键字,但未使用(避免使用,因为跳转语句不利于结构化编程)。 - 另外,我们补充一些上下文关键字(这些不是严格的关键字,但在特定地方有特殊含义): - `module`:声明模块(Java 9引入模块系统)。 - `requires`:在模块声明中指定依赖的模块。 - `exports`:在模块声明中指定导出的包。 - `opens`:在模块声明中指定开放的包(用于反射)。 - `to`:与`exports`或`opens`一起使用,指定目标模块。 - `transitive`:在模块声明中指定传递依赖。 - `uses`:在模块声明中指定使用的服务。 - `provides`:在模块声明中指定提供的服务实现。 注意:以上模块相关的词是上下文关键字,只在模块声明中作为关键字,在其他地方可以作为标识符。因此,它们不是保留关键字。 因此,我们重新整理,将严格的关键字(保留字)按照上述分类列出。注意:`var`、`record`、`sealed`、`non-sealed`、`permits`、`yield`等是Java新版本引入的关键字(或上下文关键字),需要根据版本确定。 根据官方文档,Java 17的关键字列表(共67个,包括未使用的`const``goto`)如下: ``` abstract, assert, boolean, break, byte, case, catch, char, class, const, continue, default, do, double, else, enum, extends, final, finally, float, for, goto, if, implements, import, instanceof, int, interface, long, native, new, package, private, protected, public, return, short, static, strictfp, super, switch, synchronized, this, throw, throws, transient, try, var, void, volatile, while, _, record, sealed, permits, non-sealed, yield ``` 注意:`_`(下划线)在Java 9之后是关键字,但不能用作标识符。`var`、`record`、`sealed`、`permits`、`non-sealed`、`yield`是Java 10之后引入的关键字或上下文关键字。 由于我们按照分类,下面按照分类列出并解释(不包括上下文关键字,只包括保留关键字): 1. **定义数据类型的关键字(12个)**:`byte`, `short`, `int`, `long`, `float`, `double`, `char`, `boolean`, `class`, `interface`, `enum`, `void` 2. **流程控制关键字(12个)**:`if`, `else`, `switch`, `case`, `default`, `for`, `while`, `do`, `break`, `continue`, `return`, `yield` 3. **修饰关键字(15个)**:`public`, `private`, `protected`, `static`, `final`, `abstract`, `synchronized`, `native`, `transient`, `volatile`, `strictfp`, `sealed`, `non-sealed`, `permits`, `record` 4. **异常处理关键字(6个)**:`try`, `catch`, `finally`, `throw`, `throws`, `assert` 5. **对象相关关键字(7个)**:`new`, `this`, `super`, `instanceof`, `extends`, `implements`, `var`(注意:`var`是局部变量类型推断,从Java 10开始) 6. **字面常量关键字(3个)**:`true`, `false`, `null` 7. **包相关关键字(2个)**:`package`, `import` 8. **未使用关键字(2个)**:`goto`, `const` 另外,`_`(下划线)也是一个关键字(从Java 9开始),但未在上述分类中,我们将其归为其他。 因此,我们按照这个分类给出解释: 注意:由于关键字数量较多,我们尽量简洁地解释每个关键字。 开始列出: 1. **定义数据类型的关键字** - `byte`:8位有符号整数,范围$-128$到$127$。 - `short`:16位有符号整数,范围$-32768$到$32767$。 - `int`:32位有符号整数,范围$-2^{31}$到$2^{31}-1$。 - `long`:64位有符号整数,范围$-2^{63}$到$2^{63}-1$。 - `float`:单精度32位IEEE 754浮点数。 - `double`:双精度64位IEEE 754浮点数。 - `char`:16位Unicode字符,范围`\u0000`到`\uffff`。 - `boolean`:布尔值,只有`true``false`。 - `class`:声明一个类。 - `interface`:声明一个接口。 - `enum`:声明枚举类型,包含固定数量的常量。 - `void`:表示方法没有返回值。 2. **流程控制关键字** - `if`:如果条件为真,则执行代码块。 - `else`:与`if`一起使用,当条件为假时执行。 - `switch`:根据表达式的值选择执行路径。 - `case`:在`switch`中标记一个分支。 - `default`:在`switch`中标记默认分支,或接口中的默认方法。 - `for`:循环结构,通常用于已知循环次数。 - `while`:循环结构,条件为真时重复执行。 - `do`:与`while`配合,执行一次循环体,再判断条件。 - `break`:跳出循环或`switch`。 - `continue`:跳过本次循环,进入下一次循环。 - `return`:从方法中返回,可以返回值(非`void`方法)或不返回值(`void`方法)。 - `yield`:在`switch`表达式中产生一个值(Java 14引入)。 3. **修饰关键字** - `public`:公开访问,任何类都可访问。 - `private`:私有访问,仅本类可访问。 - `protected`:受保护访问,本包内子类可访问。 - `static`:静态成员,属于类而非实例。 - `final`:不可修改(类不可继承,方法不可覆盖,变量为常量)。 - `abstract`:抽象的(类不能实例化,方法没有实现)。 - `synchronized`:同步方法或代码块,用于多线程。 - `native`:本地方法,由本地代码实现。 - `transient`:瞬态,变量不参与序列化。 - `volatile`:易变,确保多线程下的可见性。 - `strictfp`:严格浮点计算,确保跨平台浮点计算结果一致。 - `sealed`:密封类/接口,指定哪些类可以继承(Java 17引入)。 - `non-sealed`:非密封类/接口,允许任意类继承(Java 17引入)。 - `permits`:在密封类中指定允许的子类(Java 17引入)。 - `record`:记录类,用于不可变数据的透明载体(Java 16引入)。 4. **异常处理关键字** - `try`:尝试执行可能抛出异常的代码块。 - `catch`:捕获并处理特定类型的异常。 - `finally`:无论是否发生异常都会执行的代码块,用于资源清理。 - `throw`:抛出一个异常对象。 - `throws`:在方法声明中指定可能抛出的异常类型。 - `assert`:断言,用于测试期间验证条件(需启用断言)。 5. **对象相关关键字** - `new`:创建新对象。 - `this`:当前对象的引用。 - `super`:父类对象的引用。 - `instanceof`:检查对象是否是指定类或其子类的实例。 - `extends`:类继承另一个类,或接口扩展另一个接口。 - `implements`:类实现一个或多个接口。 - `var`:局部变量类型推断(Java 10引入,根据初始值推断类型)。 6. **字面常量关键字** - `true`:布尔值真。 - `false`:布尔值假。 - `null`:空引用,表示对象引用不指向任何对象。 7. **包相关关键字** - `package`:定义当前类所在的包。 - `import`:导入其他包中的类或静态成员。 8. **未使用关键字** - `goto`:保留,未使用(避免使用)。 - `const`:保留,未使用(用`final`替代)。 9. **其他关键字** - `_`(下划线):从Java 9开始,不能单独用作标识符(但可以与其他字符组合,如`_name`是允许的)。在Java 8及以前,它可以作为标识符。 注意:`var`、`record`、`sealed`、`permits`、`non-sealed`、`yield`是Java新版本引入的,如果使用较低版本的Java,这些可能不是关键字。 以上是Java 17的所有关键字(共67个)及其分类解释。 由于内容较多,我们总结如下: 总关键字数量:67个(包括未使用的`goto``const`)。 在实际编程中,应避免使用关键字作为标识符。 最后,生成相关问题。</think>### Java 关键字全解析 Java 关键字是语言预定义的保留字,具有特定功能,**不能作为变量名、方法名或类名**使用。以下是 Java 17 中所有 67 个关键字的分类及含义解释: --- #### 一、数据类型关键字(12个) 1. **`byte`** 8位有符号整数,范围:$-128$ 到 $127$。 2. **`short`** 16位有符号整数,范围:$-32768$ 到 $32767$。 3. **`int`** 32位有符号整数,范围:$-2^{31}$ 到 $2^{31}-1$。 4. **`long`** 64位有符号整数,范围:$-2^{63}$ 到 $2^{63}-1$。 5. **`float`** 32位单精度浮点数,例如:`float f = 3.14f;`。 6. **`double`** 64位双精度浮点数,例如:`double d = 3.1415926535;`。 7. **`char`** 16位 Unicode 字符,例如:`char c = 'A';`。 8. **`boolean`** 布尔类型,仅取值 `true` 或 `false`。 9. **`void`** 表示方法无返回值,例如:`public void print() { ... }`。 10. **`class`** 声明一个类,例如:`class Student { ... }`。 11. **`interface`** 声明接口,例如:`interface Drawable { void draw(); }`。 12. **`enum`** 定义枚举类型,例如:`enum Color { RED, GREEN, BLUE }`。 --- #### 二、流程控制关键字(12个) 1. **`if` / `else`** 条件分支: ```java if (score > 60) { System.out.println("及格"); } else { System.out.println("不及格"); } ``` 2. **`switch` / `case` / `default`** 多路分支: ```java switch (day) { case 1: System.out.println("周一"); break; default: System.out.println("无效输入"); } ``` 3. **`for`** 循环结构: ```java for (int i = 0; i < 10; i++) { ... } ``` 4. **`while`** 判断后执行: ```java while (condition) { ... } ``` 5. **`do`** 执行后判断: ```java do { ... } while (condition); ``` 6. **`break`** 跳出循环或 `switch`。 7. **`continue`** 跳过本次循环剩余代码。 8. **`return`** 从方法返回值或结束方法。 9. **`yield`** (Java 14+) 在 `switch` 表达式中返回值: ```java int result = switch (mode) { case "A" -> 1; case "B" -> { yield 2; } default -> 0; }; ``` --- #### 三、修饰符关键字(15个) | 关键字 | 作用 | |---------------|----------------------------------------------------------------------| | `public` | 公开访问(类、方法、变量) | | `private` | 仅本类可访问 | | `protected` | 本包内或子类可访问 | | `static` | 静态成员(属于类而非实例) | | `final` | 不可修改(类不可继承、方法不可重写、变量为常量) | | `abstract` | 抽象(类不能实例化、方法无实现) | | `synchronized`| 同步方法/代码块(线程安全) | | `volatile` | 变量值直接读写内存(避免线程缓存) | | `transient` | 变量不参与序列化 | | `native` | 方法由本地代码(如C/C++)实现 | | `strictfp` | 严格浮点计算(确保跨平台一致性) | | `sealed` | 密封类/接口(限定可继承的子类,Java 17+) | | `non-sealed` | 非密封类(允许任意继承,Java 17+) | | `permits` | 指定密封类允许的子类(Java 17+) | | `record` | 声明不可变数据类(自动生成构造器/getter等,Java 16+) | --- #### 四、异常处理关键字(6个) 1. **`try`** 包裹可能抛出异常的代码。 2. **`catch`** 捕获并处理异常: ```java try { ... } catch (IOException e) { ... } ``` 3. **`finally`** 无论是否异常都会执行的代码(常用于资源清理)。 4. **`throw`** 抛出异常实例:`throw new IllegalArgumentException();`。 5. **`throws`** 声明方法可能抛出的异常: ```java public void read() throws IOException { ... } ``` 6. **`assert`** 断言条件为真(需启用 `-ea` 参数): ```java assert x > 0 : "x必须为正数"; ``` --- #### 五、对象相关关键字(7个) 1. **`new`** 创建对象实例:`String s = new String();`。 2. **`this`** 当前对象的引用。 3. **`super`** 父类对象的引用。 4. **`instanceof`** 检查对象类型:`if (obj instanceof String) { ... }`。 5. **`extends`** 类继承或接口扩展:`class Dog extends Animal { ... }`。 6. **`implements`** 类实现接口:`class Car implements Drivable { ... }`。 7. **`var`** (Java 10+) 局部变量类型推断:`var list = new ArrayList<String>();`。 --- #### 六、字面常量关键字(3个) 1. **`true`** / **`false`** 布尔值字面量。 2. **`null`** 表示空引用。 --- #### 七、包相关关键字(2个) 1. **`package`** 定义类所在包:`package com.example;`。 2. **`import`** 导入其他包的类:`import java.util.List;`。 --- #### 八、保留未使用关键字(2个) 1. **`goto`** 保留但未实现(避免使用)。 2. **`const`** 保留但未实现(用 `final` 替代)。 --- #### 九、特殊关键字(3个) 1. **`_`** (Java 9+) 单下划线不能作为标识符(但 `_name` 允许)。 2. **`module`** (Java 9+) 声明模块(模块化系统)。 3. **`requires`** / **`exports`** (Java 9+) 模块依赖导出(模块化系统)。 > 注意:关键字数量随 Java 版本更新,例如 `record`、`sealed` 等是较新版本引入[^1][^2]。 --- ### 总结表格 | 分类 | 关键字数量 | 示例关键字 | |------------------|------------|--------------------------------| | 数据类型 | 12 | `int`, `class`, `enum` | | 流程控制 | 12 | `if`, `for`, `yield` | | 修饰符 | 15 | `public`, `final`, `record` | | 异常处理 | 6 | `try`, `throw`, `assert` | | 对象操作 | 7 | `new`, `super`, `var` | | 字面常量 | 3 | `true`, `null` | | 包管理 | 2 | `package`, `import` | | 保留未使用 | 2 | `goto`, `const` | | 模块化(Java 9+)| 5+ | `module`, `requires` | --- ### 相关问题 1. `volatile` `synchronized` 在多线程中有何区别? 2. Java 17 中 `sealed` 类如何限制继承? 3. 为什么 `goto` `const` 被保留但未实现? 4. 如何正确使用 `assert` 进行调试? 5. `record` 类相比普通类有哪些优势? [^1]: Java中所有关键字及其用处。Java中的关键字是Java语言的核心组成部分,它们定义了Java程序的结构行为。 [^2]: java关键字的含义,JAVA中的所有关键字含义以及用法。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

BlackTurn

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值