这很好理解。在Java中(我猜想所有的OO语言)应该在实例方法中声明实例方法时,它是唯一的选择,或者我们通常不关心它?是否可能的良好做法时声明方法静态?
回答
当你不需要他们知道类状态来处理某些东西时,方法是静态的。辅助方法就是这种情况的很好例子。
DateUtils.getDateNowInGMT()
上面的方法并不需要任何状态给你一个答案。下面的一个。
Withdrawer w = new Withdrawer.Builder().account(12545).build();
w.withdraw(100);
如果您不知道帐户号码(与提款人相关的帐户号码),您将无法提取()款项。您当然可以认为这可能是一种静态方法,并且将帐户信息传递给该方法可以解决问题,但由于所有其他方法都需要相同的帐户信息,因此会造成不便。
+1好样品。 – 2013-03-13 05:15:07
是的。
这是正确的方法,至少我遵循。
例如,实用方法应该是静态的。
但是,大多数未来需求和改变都需要很多,我们今天也不能预见所有这些需求。所以实例应优于static
。直到除非你遵循某种设计模式。
因此您可以使用任何类型的实现。但不是可能性,标准应该是要求。 如果你有一些操作要在类中执行,你应该选择静态方法。例如,如果您必须为每个实例生成一个uniqueID,或者您必须初始化实例将使用的任何内容,如显示或db-driver。在其他情况下,在操作是特定于实例的情况下,优选实例方法。
只有当静态方法有意义时,方法才应该是静态的。静态方法属于类而不属于它的特定实例。静态方法只能使用该类的其他静态功能。例如,静态方法无法调用实例方法或访问实例变量。如果这对你正在设计的方法有意义,那么使用静态是一个好主意。
静态元素,无论是变量还是方法,都会在类加载时加载到内存中,并一直保留到执行结束或类加载器卸载/重新加载它所属的类。
我使用静态方法,当他们的计算不适合我的应用程序的一般面向对象建模。通常,诸如验证输入数据或保存特定于整个应用程序执行的信息或访问外部数据库的方法等实用方法都是很好的选择。
据我所知, 如果你有这样一种代码或逻辑来利用或产生与特定对象状态有关的东西,或者简单地说,如果你的逻辑在方法中用不同的对象来处理不同的对象输入并生成一些不同的输出集合,则需要将此方法作为实例方法。 另一方面,如果你的方法有一个对每个对象都是通用的逻辑,并且输入和输出不取决于对象的状态,你应该声明它是静态的,但不是实例。
Explaination with examples:
Suppose you are organizing a college party and you have to provide a common coupon to the students of all departments,you just need to appoint a person for distributing a common coupon to students(without knowing about his/her department and roll no.) as he/she(person) approaches to the coupon counter.
Now think if you want to give the coupons with different serial numbers according to the departments and roll number of students, the person appointed by you need to get the department name and roll number of student(as input from each and every student)
and according to his/her department and roll number he will create a separate coupon with unique serial number.
First case is an example where we need static method, if we take it as instance method unnecessary it will increase the burden.
Second case is an example of instance method, where you need to treat each student(in sense of object) separately.
这个例子可能看起来很愚蠢,但我希望它能帮助你明确地理解这个区别。
- 1. createOperate方法不能被声明为静态;静态方法只能在静态或顶级类型中声明
- 2. Java尽可能使静态方法变为静态,好的做法?
- 3. 使用html'confirm'方法是否被认为是良好的做法?
- 4. java中允许声明静态方法这样做的好处是什么
- 5. 宁静的API,良好的做法
- 6. 什么是声明静态可变值的正确方法
- 7. 在PHP中声明类的ctor'final'是否是不好的做法?
- 8. CommonJS的函数声明范围内的良好做法
- 9. 将静态方法放入Laravel模型是否是一种好的做法?
- 10. 静态方法get - 这是不好的做法吗?
- 11. 良好做法MVC
- 12. jquery良好做法
- 13. 静态方法的类型间声明可以吗?
- 14. 定义PHP类时的良好做法
- 15. 这是否是重载方法的不良做法?
- 16. ajax和静态页面使用相同的partialView时的良好做法?
- 17. 是否有可能在C++中通过模板声明方法?
- 18. 是否有可能重写派生类中的静态方法?
- 19. 在非静态类中声明一个静态方法的意义是什么?
- 20. 在静态方法中使用非静态变量或调用非静态方法(使用对象实例访问)是否是一种很好的做法?
- 21. AsyncTask里面的静态方法 - 良好的编码习惯?
- 22. 参考成员的良好做法?是否是const成员?
- 23. 可以在.cpp中声明/定义静态方法吗?
- 24. IOS FMDB良好做法
- 25. 良好做法:JDBC连接
- 26. 良好做法在Perl
- 27. 是REPLACE INTO查询良好做法?
- 28. 是否有可能在一个静态方法使用Java
- 29. 什么时候应该在基类中声明静态方法?
- 30. 在做调用时,我能做的只是调用一些静态方法?
取决于要求。但它确实很重要! – 2013-03-13 05:03:39