0

重复类中的“静态”关键字有什么作用?


我已经读过这篇文章了。

方法中的“静态”关键字有什么作用?

我记得有人告诉我静态!= 紧贴...但这几乎就是我对这个关键字的全部了解。

4

5 回答 5

6

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

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

于 2009-01-16T03:58:48.760 回答
2

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

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

公共静态无效主要(字符串 [] 参数)

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

java 你的类名

除此之外,静态方法用于修改静态变量。他们不能操纵非静态实例变量。

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

于 2009-01-16T04:02:53.917 回答
1

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

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

Math.abs(3.14);
于 2009-01-16T03:57:42.490 回答
1

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



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();

于 2009-01-16T03:59:33.220 回答
1

静态方法是为建​​立的方法。它不需要(也没有)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 
    }
}
于 2009-01-16T04:00:01.457 回答