Java Static
本问题已经有最佳答案,请猛点这里访问。
重复:"static"关键字在类中做什么?
我已经读过这篇文章了。
方法中的"static"关键字有什么作用?
我记得有人告诉我静电!粘乎乎乎的……但我对这个关键词所知甚少。
静态类变量可以看作是全局类。无论类有多少实例,每个静态变量都只有一个实例。
静态方法不使用任何非静态类变量,它们可以直接从类外部调用,而无需实例化类本身。
静态变量和方法属于类而不是实例,尽管您可以从实例引用引用它们。通常,您使用类名来访问它们。
如果一个方法被声明为静态的,则不需要定义它的对象实例来调用它。现在,你可能想知道什么时候会出现这种情况?考虑Java的主要方法
公共静态void main(string[]参数)
为什么声明为静态?这是因为为了启动程序,这个方法应该开始执行。而且,由于程序尚未初始化,因此无法创建声明它的类的实例。因此,需要将类声明为public。当类通过
Java您的类名
此外,静态方法还用于修改静态变量。它们不能操作非静态实例变量。
另外,请注意,静态在另一种语言(如C)中具有不同的含义。
静态方法是为类建立的方法。它不需要(也没有)
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 |