💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
# Java `static`关键字 > 原文: [https://javabeginnerstutorial.com/core-java-tutorial/java-static-keyword/](https://javabeginnerstutorial.com/core-java-tutorial/java-static-keyword/) ## 什么是`static` 静态是非访问修饰符。 ## 适用于 可以将`Static`关键字应用于 * *方法* * *变量* * *嵌套在另一个类中的类* * *初始化块* ## 不适用于 `static`关键字不能应用于 * 类(未嵌套) * 构造器 * 接口 * 方法局部内部类(与嵌套类之间的区别) * 内部类方法 * 实例变量 * 局部变量 ## Java 中`static`关键字的目的 静态词可用于将变量或方法附加到类。 标记为静态的变量或方法属于该类,而不是任何特定实例。 与[实例变量相反。](https://javabeginnerstutorial.com/core-java-tutorial/instance-variable-java/) ## 如何调用 可以在没有类实例的情况下使用静态变量和方法。 只有类才需要调用静态方法或静态变量。 ```java /* * Here we will learn to access Static method and Static Variable. */ public class JavaStaticExample { static int i = 10; static void method() { System.out.println("Inside Static method"); } public static void main(String[] args) { // Accessing Static method JavaStaticExample.method(); // Accessing Static Variable System.out.println(JavaStaticExample.i); /* * No Instance is required to access Static Variable or Method as we * have seen above. Still we can access the same static variable and * static method using Instace references as below. */ JavaStaticExample obj1 = new JavaStaticExample(); JavaStaticExample obj2 = new JavaStaticExample(); /* * Accessing static variable in Non Static way. Compiler will warn you * with below warning. * * The static field JavaStaticExample.i should be accessed in a static * way. */ System.out.println(obj1.i); // Accessing satic method using reference. // Warning by compiler // "The static method method() from the type JavaStaticExample should be accessed in a static way" obj1.method(); } } ``` 上述程序的输出 ```java Inside Static method 10 10 Inside Static method ``` **注**:`static`关键字可以与变量和方法一起使用。 它**不适用于**类。 ## 类变量 – 静态字段 类变量(也称为静态字段)在类中的所有对象之间共享特征。 当您声明字段为静态字段时,只会创建关联变量的单个实例,该实例对于该类的所有对象都是通用的。 因此,当一个对象更改类变量的值时,它将影响该类的所有对象。 我们可以通过使用类的名称来访问类变量,而不必使用对类内单个对象的引用。 即使不存在该类的对象,也可以访问静态变量。 类变量使用`static`关键字声明。 ## 类方法 – 静态方法 可以在没有类实例的情况下调用类似于类变量的类方法。 类方法通常用于为 Java 程序提供全局函数。 例如,`java.lang.Math`包中的方法是类方法。 您不能从静态方法内部调用非静态方法。 ## `static`关键字规则 * 标记为`static`的**变量或方法**属于**类** ,而不是任何特定实例。 * **静态方法或变量**可以在不创建或引用类实例的情况下使用。 * 如果存在实例,则该类的所有实例将共享一个类的静态变量,这将导致 **仅一个副本** 。 * 静态方法不能访问非静态变量,也不能直接调用非静态方法(它可以通过*实例*调用或访问方法或变量)。 ## 备忘单 * **静态**是非访问修饰符。 * **静态**修饰符可以应用于变量或方法,块或内部类。 * **静态成员**仅属于类而不是实例。 * 静态方法**无法访问**实例变量*。 * 静态方法**不能替代**,因为它们是特定于类的,并且不属于实例。 * 可以将**重新定义**静态方法。 * 如果一个类包含任何静态块,则仅当将该类加载到 JVM 中时,才执行该块。 创建多个实例不会多次运行静态块。 仅构造器将执行多次。 * 如果调用`Class.forName("class_name")`,则将执行类的静态块。 <https://www.youtube.com/embed/QZwgz9tIy7I?start=1&amp;feature=oembed>