Java static关键字

原文: https://javabeginnerstutorial.com/core-java-tutorial/java-static-keyword/

什么是static

静态是非访问修饰符。

适用于

可以将Static关键字应用于

  • 方法
  • 变量
  • 嵌套在另一个类中的类
  • 初始化块

不适用于

static关键字不能应用于

  • 类(未嵌套)
  • 构造器
  • 接口
  • 方法局部内部类(与嵌套类之间的区别)
  • 内部类方法
  • 实例变量
  • 局部变量

Java 中static关键字的目的

静态词可用于将变量或方法附加到类。 标记为静态的变量或方法属于该类,而不是任何特定实例。 与实例变量相反。

如何调用

可以在没有类实例的情况下使用静态变量和方法。 只有类才需要调用静态方法或静态变量。

  1. /*
  2. * Here we will learn to access Static method and Static Variable.
  3. */
  4. public class JavaStaticExample {
  5. static int i = 10;
  6. static void method() {
  7. System.out.println("Inside Static method");
  8. }
  9. public static void main(String[] args) {
  10. // Accessing Static method
  11. JavaStaticExample.method();
  12. // Accessing Static Variable
  13. System.out.println(JavaStaticExample.i);
  14. /*
  15. * No Instance is required to access Static Variable or Method as we
  16. * have seen above. Still we can access the same static variable and
  17. * static method using Instace references as below.
  18. */
  19. JavaStaticExample obj1 = new JavaStaticExample();
  20. JavaStaticExample obj2 = new JavaStaticExample();
  21. /*
  22. * Accessing static variable in Non Static way. Compiler will warn you
  23. * with below warning.
  24. *
  25. * The static field JavaStaticExample.i should be accessed in a static
  26. * way.
  27. */
  28. System.out.println(obj1.i);
  29. // Accessing satic method using reference.
  30. // Warning by compiler
  31. // "The static method method() from the type JavaStaticExample should be accessed in a static way"
  32. obj1.method();
  33. }
  34. }

上述程序的输出

  1. Inside Static method
  2. 10
  3. 10
  4. Inside Static method

static关键字可以与变量和方法一起使用。 它不适用于类。

类变量 – 静态字段

类变量(也称为静态字段)在类中的所有对象之间共享特征。 当您声明字段为静态字段时,只会创建关联变量的单个实例,该实例对于该类的所有对象都是通用的。 因此,当一个对象更改类变量的值时,它将影响该类的所有对象。 我们可以通过使用类的名称来访问类变量,而不必使用对类内单个对象的引用。 即使不存在该类的对象,也可以访问静态变量。 类变量使用static关键字声明。

类方法 – 静态方法

可以在没有类实例的情况下调用类似于类变量的类方法。 类方法通常用于为 Java 程序提供全局函数。 例如,java.lang.Math包中的方法是类方法。 您不能从静态方法内部调用非静态方法。

static关键字规则

  • 标记为static变量或方法属于 ,而不是任何特定实例。
  • 静态方法或变量可以在不创建或引用类实例的情况下使用。
  • 如果存在实例,则该类的所有实例将共享一个类的静态变量,这将导致 仅一个副本
  • 静态方法不能访问非静态变量,也不能直接调用非静态方法(它可以通过实例调用或访问方法或变量)。

备忘单

  • 静态是非访问修饰符。
  • 静态修饰符可以应用于变量或方法,块或内部类。
  • 静态成员仅属于类而不是实例。
  • 静态方法无法访问实例变量*。
  • 静态方法不能替代,因为它们是特定于类的,并且不属于实例。
  • 可以将重新定义静态方法。
  • 如果一个类包含任何静态块,则仅当将该类加载到 JVM 中时,才执行该块。 创建多个实例不会多次运行静态块。 仅构造器将执行多次。
  • 如果调用Class.forName("class_name"),则将执行类的静态块。

https://www.youtube.com/embed/QZwgz9tIy7I?start=1&feature=oembed