Java静态

Java Static

本问题已经有最佳答案,请猛点这里访问。

重复:"static"关键字在类中做什么?

我已经读过这篇文章了。

方法中的"static"关键字有什么作用?

我记得有人告诉我静电!粘乎乎乎的……但我对这个关键词所知甚少。


静态类变量可以看作是全局类。无论类有多少实例,每个静态变量都只有一个实例。

静态方法不使用任何非静态类变量,它们可以直接从类外部调用,而无需实例化类本身。


静态变量和方法属于类而不是实例,尽管您可以从实例引用引用它们。通常,您使用类名来访问它们。

如果一个方法被声明为静态的,则不需要定义它的对象实例来调用它。现在,你可能想知道什么时候会出现这种情况?考虑Java的主要方法

公共静态void main(string[]参数)

为什么声明为静态?这是因为为了启动程序,这个方法应该开始执行。而且,由于程序尚未初始化,因此无法创建声明它的类的实例。因此,需要将类声明为public。当类通过

Java您的类名

此外,静态方法还用于修改静态变量。它们不能操作非静态实例变量。

另外,请注意,静态在另一种语言(如C)中具有不同的含义。


静态方法是为类建立的方法。它不需要(也没有)this指针,并且不能访问实例数据。所以你可以写些类似的东西

1
2
3
4
5
6
7
8
9
10
11
12
13
14
public class Hello {

    void instanceHello() {
         System,out.println("Hello from the instance.");
    }

    public static void main(int argc, String[] argv){
         // The main method is defined even though there are no instances
         System.out.println("Hello from main.");
         instanceHello();  // but this is a syntax error;
         Hello h = new Hello();
         h.instanceHello();  // this isn't though
    }
}

方法中静态变量的值存储在对该方法的调用之间。

1
2
3
4
5
6
7
8
9
public void method() {
  static int callCount = 0;
  callCount++;
  System.out.println("Calls:" + callCount);
}

method(); //"Calls: 1"
method(); //"Calls: 2"
method(); //"Calls: 3"

请注意,这与静态方法完全不同。对在其中定义的类调用静态方法,而不是调用该类的实例。

1
2
3
4
5
6
7
8
9
class MyClass {
  public static void staticMethod() { ... }
  public void nonStaticMethod();
}

Myclass.staticMethod();

MyClass instance = new MyClass();
instance.nonStaticMethod();


与非静态方法一样,静态方法属于在该类中定义的类,而不是属于该类对象的实例。作为不属于类实例的副作用,在静态方法中尝试访问非静态字段是一个编译错误。静态方法无法从中获取非静态字段的访问权限。

Java数学类是一个很好的例子,因为它加载了静态方法。您从不创建数学类的实例,只需直接从该类调用方法。

1
Math.abs(3.14);