Skip to content

Files

Latest commit

5ae7d90 · Jun 25, 2020

History

History
120 lines (86 loc) · 4.21 KB

41.md

File metadata and controls

120 lines (86 loc) · 4.21 KB

Java static关键字

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

什么是static

静态是非访问修饰符。

适用于

可以将Static关键字应用于

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

不适用于

static关键字不能应用于

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

Java 中static关键字的目的

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

如何调用

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

/*
 * 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();
	}
}

上述程序的输出

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&feature=oembed