hackland - Java静态



static methods (4)

重复什么是“静态”关键字在类中做什么?

我已经阅读了这个帖子

方法中的“static”关键字是做什么的?

我记得被告知,静态!=粘性...但这是我所知道的关于这个关键字。


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

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 
    }
}

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



public void method() {
  static int callCount = 0;
  callCount++;
  System.out.println("Calls: " + callCount);
}

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

请注意,这与静态方法完全不同。 一个静态方法被调用它定义的类而不是这个类的一个实例。



class MyClass {
  public static void staticMethod() { ... }
  public void nonStaticMethod();
}

Myclass.staticMethod();

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

静态方法属于它定义的类,而不是该类的对象的实例,就像非静态方法一样。 作为不属于类的实例的副作用,在静态方法中尝试访问非静态字段是一个编译错误。 静态方法没有“this”来访问非静态字段。

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

Math.abs(3.14);

静态类变量可以被认为是一个全局类。 无论你有多少个实例,每个静态变量只有一个实例。

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





keyword