Java静态

重复 : ‘static’关键字在一个类中做什么?


我已经读过这篇文章了。

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

我记得被告知静态!=紧贴……但这就是我对这个关键字的全部了解。

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

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

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

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

Math.abs(3.14); 

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

 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指针,也无法访问实例数据。 所以你可以写一些ike

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

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

如果将方法声明为static,则不需要定义它的对象实例来调用它。 现在,你可能想知道这种情况何时会出现? 考虑一下java的主要方法

public static void main(String [] args)

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

java YourClassName

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

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