java: static and nonstatc function calling approach
我有一堂课:
1 2 3 4 5 6 | public class C1{ public int v=10; public int myFunction1(){ // some code } } |
要调用
1 2 3 | C1 ob = new C1(); ob.myFunction1(); ob.v; |
与"static"相同:
1 2 3 4 5 6 | public class C1{ public static int v=10; public static int myFunction1(){ // some code } } |
要调用
1 2 | C1.myFunction1(); C1.v; |
所以我的问题是这两种方法有什么区别。什么时候使用
型
如果我稍微改变一下您的示例,就可以很好地说明这一区别:
1 2 3 4 5 6 7 8 9 10 11 | public class C1{ private final int v; public C1(final int v) { this.v = v; } public int getV(){ return v; } } |
在这种情况下,当你创建你的
1 2 | final C1 firstC1 = new C1(10); final C1 secondC1 = new C1(20); |
号
使用
一般来说,在OO设计中,最好避免使用
型
如果
使用singleton而不是
有关更多讨论,请参阅此线程和此线程。
型
它有很大的不同。具有非静态成员和静态成员的类定义在不同的场景中都很有用。我们都知道静态成员变量由该类的所有实例共享。所以,在第二种情况下公共静态int v=10;
假设将其更改为20,那么类C1的所有实例都会看到这个值20。这在第一种情况下是不可能的公共int v=10;
在这种情况下,c1的所有实例都有自己的v副本,该副本初始化为10。一个实例将v 10的值更改为其他某个值,而不会影响其他实例v的值。
与静态方法类似,我们都知道静态方法只能访问静态成员的。所以,使方法静态或非静态取决于您的需求。
型
静态方法首先加载到内存堆栈中。如果您注意到类的主方法本身是静态的[public static void main]
类的所有实例都共享静态变量。所有静态变量都在创建任何对象之前初始化。
静态方法无法访问非静态变量。
静态方法适用于不依赖于特定实例的实用方法。
型