Java 静态类,块,方法和变量,static
关键字可以与类,变量,方法和块一起使用。静态成员属于类而不是特定实例,这意味着如果您将成员设为静态,则可以在不使用对象的情况下访问它。我们举一个例子来理解这个:
这里我们有一个静态方法myMethod()
,我们可以在没有任何对象的情况下调用这个方法,因为当我们将一个成员静态化时它就变成了类级别。如果我们删除static
关键字并使其成为非静态关键字,那么我们必须创建一个类的对象才能调用它。
静态成员对于类的所有实例(对象)是通用的,但非静态成员对于每个类实例是独立的。
输出:
静态块
静态块用于初始化静态变量。当在内存中加载类时,将执行此块。一个类可以有多个静态块,它们将按照它们写入程序的相同顺序执行。
示例 1:单个静态块
正如您所看到的,在我们在main
方法中访问它们之前,两个静态变量都已初始化。
输出:
示例 2:多个静态块
让我们看看多个静态块如何在 Java 中工作。它们以给定的顺序执行,这意味着第一个静态块在第二个静态块之前执行。这就是原因,第一个块初始化的值被第二个块覆盖。
输出:
Java 静态变量
静态变量对于类的所有实例(或对象)是通用的,因为它是类级变量。换句话说,您可以说只创建了一个静态变量副本,并在该类的所有实例之间共享。这些变量的内存分配仅在类加载到内存中时才会发生一次。
几点重点:
- 静态变量也称为类变量。
- 与非静态变量不同,这些变量可以直接在静态和非静态方法中访问。
示例 1:可以在静态方法中直接访问静态变量
这里我们有一个静态方法disp()
和两个静态变量var1
和var2
。这两个变量都可以在静态方法中直接访问。
输出:
示例 2:静态变量在类的所有实例之间共享
在此示例中,字符串变量是非静态的,整数变量是静态的。正如您在输出中看到的那样,两个对象的非静态变量是不同的,但静态变量在它们之间共享,这就是对象ob2
对静态变量所做的更改在两个对象中反映的原因。
输出:
Java 静态方法
静态方法可以在不使用类的对象(实例)的情况下访问类变量(静态变量),但是只能使用对象访问非静态方法和非静态变量。
可以在静态和非静态方法中直接访问静态方法。
语法:
静态关键字后跟返回类型,后跟方法名称。
示例 1:静态方法main
访问没有对象的静态变量
输出:
示例 2:直接在静态和非静态方法中访问的静态方法
输出:
静态类
只有当它是嵌套类时,才能使静态成为类。
- 嵌套的静态类不需要引用外类
- 静态类无法访问外部类的非静态成员
我们将在一个例子的帮助下看到这两点:
静态类示例
输出: