Java 程序中的成员可以使用其声明/定义之前的关键字“static”声明为静态的。当一个成员被声明为静态时,它本质上意味着该成员由一个类的所有实例共享,而无需为每个实例制作副本。
因此 static 是 Java 中使用的非类修饰符,可以应用于以下成员:
当一个成员被声明为静态的,那么它就可以在不使用对象的情况下被访问。这意味着在类被实例化之前,静态成员是活动的并且是可访问的。与当类的对象超出范围时不再存在的其他非静态类成员不同,静态成员显然仍然是活动的。
Java中的静态变量
声明为静态的类的成员变量称为静态变量。它也被称为“类变量”。一旦变量被声明为静态,内存只分配一次,而不是每次实例化类时。因此,您可以在不引用对象的情况下访问静态变量。
以下 Java 程序描述了静态变量的用法:
class Main
{
// static variables a and b
static int a = 10;
static int b;
static void printStatic()
{
a = a /2;
b = a;
System.out.println("printStatic::Value of a : "+a + " Value of b :
"+b);
}
public static void main(String[] args)
{
printStatic();
b = a*5;
a++;
System.out.println("main::Value of a : "+a + " Value of b : "+b);
}
}
输出::
printStatic::Value of a : Value of b : 5
main::Value of a : 6 Value of b : 25
在上面的程序中,我们有两个静态变量,即 a 和 b。我们在函数“printStatic”和“main”中修改这些变量。请注意,即使函数范围结束,这些静态变量的值也会在函数中保留。输出显示两个函数中的变量值。
静态方法
当 Java 中的方法前面带有关键字“static”时,它就是静态的。
关于静态方法,您需要记住的一些要点包括:
- 与使用类的实例调用的其他非静态方法相比,静态方法属于该类。
- 要调用静态方法,您不需要类对象。
- 静态方法可以访问类的静态数据成员。静态方法甚至可以更改静态数据成员的值。
- 静态方法不能引用“this”或“super”成员。即使静态方法尝试引用它们,也会出现编译器错误。
- 就像静态数据一样,静态方法也可以调用其他静态方法。静态方法不能引用非静态数据成员或变量,也不能调用非静态方法。
以下程序显示了 Java 中静态方法的实现:
class Main
{
// static method
static void static_method()
{
System.out.println("Static method in Java...called without any
object");
}
public static void main(String[] args)
{
static_method();
}
}
输出:
Static method in Java...called without any object
Java中的静态块
就像您在 Java 中的 C++、C# 等编程语言中具有功能块一样,也有一个称为“静态”块的特殊块,它通常包含与静态数据相关的代码块。
此静态块在创建类的第一个对象时(准确地说是在类加载时)或使用块内的静态成员时执行。
以下程序显示了静态块的用法。
class Main
{
static int sum = 0;
static int val1 = 5;
static int val2;
// static block
static {
sum = val1 + val2;
System.out.println("In static block, val1: " + val1 + " val2: "+
val2 + " sum:" + sum);
val2 = val1 * 3;
sum = val1 + val2;
}
public static void main(String[] args)
{
System.out.println("In main function, val1: " + val1 + " val2: "+ val2 + " sum:" + sum);
}
}
输出:
In static block, val1: 5 val2: 0 sum:5
In main function, val1: val2: 15 sum:20
静态类
在 Java 中,您有静态块、静态方法,甚至是静态变量。因此很明显,您也可以拥有静态类。在 Java 中,可以在另一个类中包含一个类,这称为嵌套类。包含嵌套类的类称为 Outer 类。
在 Java 中,虽然可以将嵌套类声明为静态,但不能将外部类声明为静态。
现在让我们探索 Java 中的静态嵌套类。
静态嵌套类
如前所述,您可以在 Java 中将嵌套类声明为静态。静态嵌套类在某些方面不同于非静态嵌套类(内部类),如下所示。
与非静态嵌套类不同,嵌套静态类不需要外部类引用。
静态嵌套类只能访问外部类的静态成员,而非静态类可以访问外部类的静态成员和非静态成员。
下面给出了一个静态嵌套类的示例。
class Main{
private static String str = "SoftwareTestingHelp";
//Static nested class
static class NestedClass{
//non-static method
public void display() {
System.out.println("Static string in OuterClass: " + str);
}
}
public static void main(String args[])
{
Main.NestedClassobj = new Main.NestedClass();
obj.display();
}
}
输出
Static string in OuterClass: SoftwareTestingHelp
我认为这就是 static 关键字在 java 中的工作方式。